diff --git a/internal/cardsinfo/names_test.go b/internal/cardsinfo/names_test.go index f93dd60..436eccc 100644 --- a/internal/cardsinfo/names_test.go +++ b/internal/cardsinfo/names_test.go @@ -40,6 +40,7 @@ func TestGetOriginalName_Dict(t *testing.T) { name := GetOriginalName("card", dict) assert.Equal(t, "Card", name) } + func TestGetOriginalName_BadJson(t *testing.T) { defer gock.Off() @@ -47,3 +48,14 @@ func TestGetOriginalName_BadJson(t *testing.T) { name := GetOriginalName("card", nil) assert.Equal(t, "", name) } + +func TestGetOriginalName_DoubleSide(t *testing.T) { + defer gock.Off() + + gock.New(ScryfallUrl + "/cards/named?fuzzy=card").Reply(http.StatusOK).JSON(Card{ + Name: "Legion's Landing // Adanto, the First Fort", + Layout: "transform", + }) + name := GetOriginalName("card", nil) + assert.Equal(t, "Legion's Landing | Adanto, the First Fort", name) +} diff --git a/internal/cardsinfo/prices.go b/internal/cardsinfo/prices.go index 541f06a..774b5fe 100644 --- a/internal/cardsinfo/prices.go +++ b/internal/cardsinfo/prices.go @@ -1,7 +1,6 @@ package cardsinfo import ( - "fmt" "net/url" "github.com/antchfx/htmlquery" @@ -9,7 +8,7 @@ import ( ) const scgDomain = "https://starcitygames.com" -const scgSearchUrlTemplate = "https://starcitygames.hawksearch.com/sites/starcitygames/?search_query=%v" +const scgSearchUrlTemplate = "https://starcitygames.hawksearch.com/sites/starcitygames/?search_query=" func GetPrices(name string) ([]CardPrice, error) { prices, err := GetPricesScg(name) @@ -24,7 +23,7 @@ func GetPrices(name string) ([]CardPrice, error) { func GetPricesScg(name string) ([]CardPrice, error) { escapedName := url.QueryEscape(name) - searchUrl := fmt.Sprintf(scgSearchUrlTemplate, escapedName) + searchUrl := scgSearchUrlTemplate + escapedName node, err := htmlquery.LoadURL(searchUrl) if err != nil { return nil, errors.Wrap(err, "cannot load url") diff --git a/internal/cardsinfo/prices_test.go b/internal/cardsinfo/prices_test.go index f85b70a..6435597 100644 --- a/internal/cardsinfo/prices_test.go +++ b/internal/cardsinfo/prices_test.go @@ -1,13 +1,64 @@ package cardsinfo import ( + "gopkg.in/h2non/gock.v1" + "net/http" + "os" "testing" "github.com/stretchr/testify/assert" ) -func TestParser(t *testing.T) { - prices, err := GetPrices("Black lotus") +func TestGetPrices_Ok(t *testing.T) { + defer gock.Off() + + file, _ := os.Open("test_data/AcademyRuinsTest.html") + gock.New(scgSearchUrlTemplate + "card").Reply(http.StatusOK).Body(file) + prices, err := GetPrices("card") assert.Nil(t, err) - assert.NotEmpty(t, prices) + assert.Equal(t, []CardPrice{ + &ScgCardPrice{ + Price: "$6.99", + Edition: "Double Masters", + Link: "https://starcitygames.com/academy-ruins-sgl-mtg-2xm-309-enn/?sku=SGL-MTG-2XM-309-ENN1", + }, + &ScgCardPrice{ + Price: "$9.99", + Edition: "Double Masters (Foil)", + Link: "https://starcitygames.com/academy-ruins-sgl-mtg-2xm-309-enf/?sku=SGL-MTG-2XM-309-ENF1", + }, + &ScgCardPrice{ + Price: "$11.99", + Edition: "Double Masters - Variants", + Link: "https://starcitygames.com/academy-ruins-sgl-mtg-2xm2-369-enn/?sku=SGL-MTG-2XM2-369-ENN1", + }, + &ScgCardPrice{ + Price: "$14.99", + Edition: "Double Masters - Variants (Foil)", + Link: "https://starcitygames.com/academy-ruins-sgl-mtg-2xm2-369-enf/?sku=SGL-MTG-2XM2-369-ENF1", + }, + &ScgCardPrice{ + Price: "$7.99", + Edition: "Modern Masters: 2013 Edition", + Link: "https://starcitygames.com/academy-ruins-sgl-mtg-mma-219-enn/?sku=SGL-MTG-MMA-219-ENN1", + }, + }, prices) +} + +func TestGetPrices_Unavailable(t *testing.T) { + defer gock.Off() + + gock.New(scgSearchUrlTemplate + "card").Reply(http.StatusBadGateway) + _, err := GetPrices("card") + assert.NotNil(t, err) +} + +func TestGetPrices_Empty(t *testing.T) { + defer gock.Off() + + file, _ := os.Open("test_data/EmptyTest.html") + gock.New(scgSearchUrlTemplate + "card").Reply(http.StatusOK).Body(file) + prices, err := GetPrices("card") + assert.Nil(t, err) + assert.Nil(t, prices) } diff --git a/internal/cardsinfo/test_data/AcademyRuinsTest.html b/internal/cardsinfo/test_data/AcademyRuinsTest.html new file mode 100644 index 0000000..16102be --- /dev/null +++ b/internal/cardsinfo/test_data/AcademyRuinsTest.html @@ -0,0 +1,3005 @@ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+