From 40f1687972088526eafd8ed0464466446507bffe Mon Sep 17 00:00:00 2001 From: Artyom Belousov Date: Sun, 7 Feb 2021 10:33:16 +0300 Subject: [PATCH] Added Fetcher --- cmd/go-mtg-vk/main.go | 2 ++ internal/caching/cache_test.go | 8 ++++++++ internal/caching/client.go | 7 +------ internal/cardsinfo/fetcher.go | 3 +++ internal/cardsinfo/format.go | 2 +- internal/cardsinfo/format_test.go | 3 ++- internal/cardsinfo/names.go | 4 ++-- internal/cardsinfo/names_test.go | 15 ++++++++++----- internal/cardsinfo/prices.go | 2 +- internal/cardsinfo/prices_test.go | 9 ++++++--- 10 files changed, 36 insertions(+), 19 deletions(-) create mode 100644 internal/cardsinfo/fetcher.go diff --git a/cmd/go-mtg-vk/main.go b/cmd/go-mtg-vk/main.go index 519cf91..7a46209 100644 --- a/cmd/go-mtg-vk/main.go +++ b/cmd/go-mtg-vk/main.go @@ -1,6 +1,7 @@ package main import ( + "gitlab.com/flygrounder/go-mtg-vk/internal/cardsinfo" "log" "math/rand" "os" @@ -28,6 +29,7 @@ func main() { ConfirmationString: os.Getenv("VK_CONFIRMATION_STRING"), DictPath: "./assets/additional_cards.json", Cache: caching.GetClient(), + InfoFetcher: &cardsinfo.Fetcher{}, } r.POST("callback/message", handler.HandleMessage) diff --git a/internal/caching/cache_test.go b/internal/caching/cache_test.go index 9540720..35a9b57 100644 --- a/internal/caching/cache_test.go +++ b/internal/caching/cache_test.go @@ -10,6 +10,14 @@ import ( "github.com/stretchr/testify/assert" ) +func TestGetClient(t *testing.T) { + c := GetClient() + assert.Equal(t, CacheExpiration, c.Expiration) + assert.Equal(t, 0, c.Storage.Options().DB) + assert.Equal(t, HostName, c.Storage.Options().Addr) + assert.Equal(t, Password, c.Storage.Options().Password) +} + func TestGetSet(t *testing.T) { client, s := getTestClient() defer s.Close() diff --git a/internal/caching/client.go b/internal/caching/client.go index f34263d..f767f22 100644 --- a/internal/caching/client.go +++ b/internal/caching/client.go @@ -10,13 +10,8 @@ type CacheClient struct { Expiration time.Duration } -var client *CacheClient - func GetClient() *CacheClient { - if client != nil { - return client - } - client = new(CacheClient) + client := new(CacheClient) client.Init() return client } diff --git a/internal/cardsinfo/fetcher.go b/internal/cardsinfo/fetcher.go new file mode 100644 index 0000000..5ee6133 --- /dev/null +++ b/internal/cardsinfo/fetcher.go @@ -0,0 +1,3 @@ +package cardsinfo + +type Fetcher struct{} diff --git a/internal/cardsinfo/format.go b/internal/cardsinfo/format.go index 9b5f155..5def049 100644 --- a/internal/cardsinfo/format.go +++ b/internal/cardsinfo/format.go @@ -4,7 +4,7 @@ import ( "fmt" ) -func FormatCardPrices(name string, prices []CardPrice) string { +func (f *Fetcher) FormatCardPrices(name string, prices []CardPrice) string { message := fmt.Sprintf("Оригинальное название: %v\n", name) message += fmt.Sprintf("Результатов: %v\n", len(prices)) for i, v := range prices { diff --git a/internal/cardsinfo/format_test.go b/internal/cardsinfo/format_test.go index 5c94176..26d0e1c 100644 --- a/internal/cardsinfo/format_test.go +++ b/internal/cardsinfo/format_test.go @@ -6,7 +6,8 @@ import ( ) func TestFormatCardPrices(t *testing.T) { - formatted := FormatCardPrices("card", []CardPrice{ + f := &Fetcher{} + formatted := f.FormatCardPrices("card", []CardPrice{ &ScgCardPrice{ Price: "1.5$", Edition: "ED", diff --git a/internal/cardsinfo/names.go b/internal/cardsinfo/names.go index d253cde..9386b49 100644 --- a/internal/cardsinfo/names.go +++ b/internal/cardsinfo/names.go @@ -12,7 +12,7 @@ import ( const ScryfallUrl = "https://api.scryfall.com" -func GetNameByCardId(set string, number string) string { +func (f *Fetcher) GetNameByCardId(set string, number string) string { /* Note: number is string because some cards contain letters in their numbers. */ @@ -20,7 +20,7 @@ func GetNameByCardId(set string, number string) string { return GetCardByUrl(path) } -func GetOriginalName(name string, dict io.Reader) string { +func (f *Fetcher) GetOriginalName(name string, dict io.Reader) string { path := ScryfallUrl + "/cards/named?fuzzy=" + ApplyFilters(name) result := GetCardByUrl(path) if result == "" && dict != nil { diff --git a/internal/cardsinfo/names_test.go b/internal/cardsinfo/names_test.go index 436eccc..4e2c453 100644 --- a/internal/cardsinfo/names_test.go +++ b/internal/cardsinfo/names_test.go @@ -15,7 +15,8 @@ func TestGetNameByCardId(t *testing.T) { gock.New(ScryfallUrl + "/set/1").Reply(http.StatusOK).JSON(Card{ Name: "card", }) - name := GetNameByCardId("set", "1") + f := &Fetcher{} + name := f.GetNameByCardId("set", "1") assert.Equal(t, "card", name) } @@ -25,7 +26,8 @@ func TestGetOriginalName_Scryfall(t *testing.T) { gock.New(ScryfallUrl + "/cards/named?fuzzy=card").Reply(http.StatusOK).JSON(Card{ Name: "Result Card", }) - name := GetOriginalName("card", nil) + f := &Fetcher{} + name := f.GetOriginalName("card", nil) assert.Equal(t, "Result Card", name) } @@ -37,7 +39,8 @@ func TestGetOriginalName_Dict(t *testing.T) { "card": "Card", }) dict := strings.NewReader(string(serialized)) - name := GetOriginalName("card", dict) + f := &Fetcher{} + name := f.GetOriginalName("card", dict) assert.Equal(t, "Card", name) } @@ -45,7 +48,8 @@ func TestGetOriginalName_BadJson(t *testing.T) { defer gock.Off() gock.New(ScryfallUrl + "/cards/named?fuzzy=card").Reply(http.StatusOK).BodyString("}") - name := GetOriginalName("card", nil) + f := &Fetcher{} + name := f.GetOriginalName("card", nil) assert.Equal(t, "", name) } @@ -56,6 +60,7 @@ func TestGetOriginalName_DoubleSide(t *testing.T) { Name: "Legion's Landing // Adanto, the First Fort", Layout: "transform", }) - name := GetOriginalName("card", nil) + f := &Fetcher{} + name := f.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 774b5fe..24300d6 100644 --- a/internal/cardsinfo/prices.go +++ b/internal/cardsinfo/prices.go @@ -10,7 +10,7 @@ import ( const scgDomain = "https://starcitygames.com" const scgSearchUrlTemplate = "https://starcitygames.hawksearch.com/sites/starcitygames/?search_query=" -func GetPrices(name string) ([]CardPrice, error) { +func (f *Fetcher) GetPrices(name string) ([]CardPrice, error) { prices, err := GetPricesScg(name) if err != nil { return nil, err diff --git a/internal/cardsinfo/prices_test.go b/internal/cardsinfo/prices_test.go index 6435597..bb6ccfc 100644 --- a/internal/cardsinfo/prices_test.go +++ b/internal/cardsinfo/prices_test.go @@ -14,7 +14,8 @@ func TestGetPrices_Ok(t *testing.T) { file, _ := os.Open("test_data/AcademyRuinsTest.html") gock.New(scgSearchUrlTemplate + "card").Reply(http.StatusOK).Body(file) - prices, err := GetPrices("card") + f := &Fetcher{} + prices, err := f.GetPrices("card") assert.Nil(t, err) assert.Equal(t, []CardPrice{ &ScgCardPrice{ @@ -49,7 +50,8 @@ func TestGetPrices_Unavailable(t *testing.T) { defer gock.Off() gock.New(scgSearchUrlTemplate + "card").Reply(http.StatusBadGateway) - _, err := GetPrices("card") + f := &Fetcher{} + _, err := f.GetPrices("card") assert.NotNil(t, err) } @@ -58,7 +60,8 @@ func TestGetPrices_Empty(t *testing.T) { file, _ := os.Open("test_data/EmptyTest.html") gock.New(scgSearchUrlTemplate + "card").Reply(http.StatusOK).Body(file) - prices, err := GetPrices("card") + f := &Fetcher{} + prices, err := f.GetPrices("card") assert.Nil(t, err) assert.Nil(t, prices) }