From 425f0fd56dc9fa6ac189bb052c8a1aae989c272e Mon Sep 17 00:00:00 2001 From: Artyom Belousov Date: Sun, 7 Feb 2021 16:21:21 +0300 Subject: [PATCH] Fixed bug with Reader exhaustion --- cmd/go-mtg-vk/main.go | 7 ++++++- internal/cardsinfo/fetcher.go | 4 +--- internal/cardsinfo/names.go | 2 +- internal/cardsinfo/names_test.go | 16 +++++++--------- internal/dicttranslate/find.go | 15 +-------------- internal/dicttranslate/find_test.go | 16 ++-------------- 6 files changed, 18 insertions(+), 42 deletions(-) diff --git a/cmd/go-mtg-vk/main.go b/cmd/go-mtg-vk/main.go index 87ba99b..909a40a 100644 --- a/cmd/go-mtg-vk/main.go +++ b/cmd/go-mtg-vk/main.go @@ -1,7 +1,9 @@ package main import ( + "encoding/json" "gitlab.com/flygrounder/go-mtg-vk/internal/cardsinfo" + "io/ioutil" "log" "math/rand" "os" @@ -20,6 +22,9 @@ func main() { groupId, _ := strconv.ParseInt(os.Getenv("VK_GROUP_ID"), 10, 64) dict, _ := os.Open("./assets/additional_cards.json") + dictBytes, _ := ioutil.ReadAll(dict) + var dictMap map[string]string + _ = json.Unmarshal(dictBytes, &dictMap) handler := vk.Handler{ Sender: &vk.ApiSender{ Token: os.Getenv("VK_TOKEN"), @@ -30,7 +35,7 @@ func main() { ConfirmationString: os.Getenv("VK_CONFIRMATION_STRING"), Cache: caching.NewClient("redis:6379", "", time.Hour*24, 0), InfoFetcher: &cardsinfo.Fetcher{ - Dict: dict, + Dict: dictMap, }, } diff --git a/internal/cardsinfo/fetcher.go b/internal/cardsinfo/fetcher.go index e509ec8..252fcf4 100644 --- a/internal/cardsinfo/fetcher.go +++ b/internal/cardsinfo/fetcher.go @@ -1,7 +1,5 @@ package cardsinfo -import "io" - type Fetcher struct { - Dict io.Reader + Dict map[string]string } diff --git a/internal/cardsinfo/names.go b/internal/cardsinfo/names.go index 4d3a629..31866bb 100644 --- a/internal/cardsinfo/names.go +++ b/internal/cardsinfo/names.go @@ -23,7 +23,7 @@ func (f *Fetcher) GetOriginalName(name string) string { path := scryfallUrl + "/cards/named?fuzzy=" + applyFilters(name) result := getCardByUrl(path) if result == "" && f.Dict != nil { - result, _ = dicttranslate.FindFromReader(name, f.Dict, 5) + result, _ = dicttranslate.Find(name, f.Dict, 5) } return result } diff --git a/internal/cardsinfo/names_test.go b/internal/cardsinfo/names_test.go index 5208430..e648146 100644 --- a/internal/cardsinfo/names_test.go +++ b/internal/cardsinfo/names_test.go @@ -1,11 +1,9 @@ package cardsinfo import ( - "encoding/json" "github.com/stretchr/testify/assert" "gopkg.in/h2non/gock.v1" "net/http" - "strings" "testing" ) @@ -31,19 +29,19 @@ func TestGetOriginalName_Scryfall(t *testing.T) { assert.Equal(t, "Result Card", name) } -func TestGetOriginalName_Dict(t *testing.T) { +func TestGetOriginalName_DictTwice(t *testing.T) { defer gock.Off() - gock.New(scryfallUrl + "/cards/named?fuzzy=card").Reply(http.StatusOK).JSON(card{}) - serialized, _ := json.Marshal(map[string]string{ - "card": "Card", - }) - dict := strings.NewReader(string(serialized)) + gock.New(scryfallUrl + "/cards/named?fuzzy=card").Persist().Reply(http.StatusOK).JSON(card{}) f := &Fetcher{ - Dict: dict, + Dict: map[string]string{ + "card": "Card", + }, } name := f.GetOriginalName("card") assert.Equal(t, "Card", name) + name = f.GetOriginalName("card") + assert.Equal(t, "Card", name) } func TestGetOriginalName_BadJson(t *testing.T) { diff --git a/internal/dicttranslate/find.go b/internal/dicttranslate/find.go index f9c5ffd..b4e5f71 100644 --- a/internal/dicttranslate/find.go +++ b/internal/dicttranslate/find.go @@ -1,12 +1,6 @@ package dicttranslate -import ( - "encoding/json" - "io" - "io/ioutil" -) - -func find(query string, dict map[string]string, maxDist int) (string, bool) { +func Find(query string, dict map[string]string, maxDist int) (string, bool) { var keys []string for i := range dict { keys = append(keys, i) @@ -14,10 +8,3 @@ func find(query string, dict map[string]string, maxDist int) (string, bool) { key, f := match(query, keys, maxDist) return dict[key], f } - -func FindFromReader(query string, reader io.Reader, maxDist int) (string, bool) { - content, _ := ioutil.ReadAll(reader) - dict := map[string]string{} - _ = json.Unmarshal(content, &dict) - return find(query, dict, maxDist) -} diff --git a/internal/dicttranslate/find_test.go b/internal/dicttranslate/find_test.go index 04577b9..e778646 100644 --- a/internal/dicttranslate/find_test.go +++ b/internal/dicttranslate/find_test.go @@ -2,13 +2,12 @@ package dicttranslate import ( "github.com/stretchr/testify/assert" - "strings" "testing" ) func TestFindEmpty(t *testing.T) { dict := map[string]string{} - _, f := find("", dict, 0) + _, f := Find("", dict, 0) assert.False(t, f) } @@ -16,18 +15,7 @@ func TestFindEntry(t *testing.T) { dict := map[string]string{ "entry": "value", } - val, f := find("entry", dict, 0) + val, f := Find("entry", dict, 0) assert.True(t, f) assert.Equal(t, "value", val) } - -func TestFindFromReaderFail(t *testing.T) { - _, f := FindFromReader("entry", strings.NewReader("{}"), 0) - assert.False(t, f) -} - -func TestFindFromReaderSuccess(t *testing.T) { - value, f := FindFromReader("entry", strings.NewReader("{\"entry\":\"value\"}"), 0) - assert.True(t, f) - assert.Equal(t, "value", value) -}