From ee20d129af059c12a9e0c7ffe06ce0b62e2cd168 Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Sat, 17 Jul 2021 07:49:16 +0200 Subject: [PATCH] add TestLoadEnnoblements --- tw/twdataloader/endpoints.go | 3 +- tw/twdataloader/helpers.go | 2 +- tw/twdataloader/server_data_loader_test.go | 122 +++++++++++++++++++++ 3 files changed, 125 insertions(+), 2 deletions(-) diff --git a/tw/twdataloader/endpoints.go b/tw/twdataloader/endpoints.go index d06f771..7e5705b 100644 --- a/tw/twdataloader/endpoints.go +++ b/tw/twdataloader/endpoints.go @@ -26,6 +26,7 @@ const ( EndpointKillAllTribeNotGzipped = "/map/kill_all_tribe.txt" EndpointConquer = "/map/conquer.txt.gz" EndpointConquerNotGzipped = "/map/conquer.txt" - EndpointGetConquer = "/interface.php?func=get_conquer&since=%d" + endpointInterface = "/interface.php" + EndpointGetConquer = endpointInterface + "?func=get_conquer&since=%d" EndpointGetServers = "/backend/get_servers.php" ) diff --git a/tw/twdataloader/helpers.go b/tw/twdataloader/helpers.go index a41e2e2..cbd18b4 100644 --- a/tw/twdataloader/helpers.go +++ b/tw/twdataloader/helpers.go @@ -133,7 +133,7 @@ func prepareTestServer(h *handlers) *httptest.Server { case EndpointConquer: h.conquer(w, r) return - case EndpointGetConquer: + case endpointInterface: h.getConquer(w, r) return default: diff --git a/tw/twdataloader/server_data_loader_test.go b/tw/twdataloader/server_data_loader_test.go index be0e363..f4afe03 100644 --- a/tw/twdataloader/server_data_loader_test.go +++ b/tw/twdataloader/server_data_loader_test.go @@ -1,8 +1,10 @@ package twdataloader import ( + "fmt" "github.com/stretchr/testify/assert" "testing" + "time" "github.com/tribalwarshelp/shared/tw/twmodel" ) @@ -502,3 +504,123 @@ func TestLoadVillages(t *testing.T) { ts.Close() } } + +func TestLoadEnnoblements(t *testing.T) { + type scenario struct { + respConquer string + respGetConquer string + cfg *LoadEnnoblementsConfig + expectedResult []*twmodel.Ennoblement + expectedErrMsg string + } + + nowMinus5h := time.Now().Add(-5 * time.Hour).Unix() + nowMinus6h := time.Now().Add(-6 * time.Hour).Unix() + scenarios := []scenario{ + { + respConquer: "1,1,1", + expectedErrMsg: "invalid line format (should be village_id,timestamp,new_owner_id,old_owner_id)", + }, + { + respConquer: "1,name,1,500,500", + expectedErrMsg: "invalid line format (should be village_id,timestamp,new_owner_id,old_owner_id)", + }, + { + respConquer: "asd,123,123,123", + expectedErrMsg: "ennoblement.VillageID: strconv.Atoi: parsing \"asd\"", + }, + { + respConquer: "123,asd,123,123", + expectedErrMsg: "timestamp: strconv.Atoi: parsing \"asd\"", + }, + { + respConquer: "123,123,asd,123", + expectedErrMsg: "ennoblement.NewOwnerID: strconv.Atoi: parsing \"asd\"", + }, + { + respConquer: "123,123,123,asd", + expectedErrMsg: "ennoblement.OldOwnerID: strconv.Atoi: parsing \"asd\"", + }, + { + respConquer: "123,124,125,126\n127,128,129,130", + expectedResult: []*twmodel.Ennoblement{ + { + VillageID: 123, + EnnobledAt: time.Unix(124, 0), + NewOwnerID: 125, + OldOwnerID: 126, + }, + { + VillageID: 127, + EnnobledAt: time.Unix(128, 0), + NewOwnerID: 129, + OldOwnerID: 130, + }, + }, + }, + { + respGetConquer: "123,124,125,126\n127,128,129,130", + cfg: &LoadEnnoblementsConfig{ + EnnobledAtGT: time.Now().Add(5 * time.Hour), + }, + expectedResult: []*twmodel.Ennoblement{}, + }, + { + respConquer: fmt.Sprintf("123,%d,125,126\n127,%d,129,130", nowMinus5h, nowMinus6h), + expectedResult: []*twmodel.Ennoblement{ + { + VillageID: 123, + EnnobledAt: time.Unix(nowMinus5h, 0), + NewOwnerID: 125, + OldOwnerID: 126, + }, + { + VillageID: 127, + EnnobledAt: time.Unix(nowMinus6h, 0), + NewOwnerID: 129, + OldOwnerID: 130, + }, + }, + }, + } + + for _, scenario := range scenarios { + ts := prepareTestServer(&handlers{ + conquer: createWriteCompressedStringHandler(scenario.respConquer), + getConquer: createWriteStringHandler(scenario.respGetConquer), + }) + + dl := NewServerDataLoader(&ServerDataLoaderConfig{ + BaseURL: ts.URL, + Client: ts.Client(), + }) + + res, err := dl.LoadEnnoblements(scenario.cfg) + if scenario.expectedErrMsg != "" { + assert.NotNil(t, err) + assert.Contains(t, err.Error(), scenario.expectedErrMsg) + } else { + assert.Nil(t, err) + } + + if scenario.expectedResult != nil { + assert.Len(t, res, len(scenario.expectedResult)) + for _, singleResult := range res { + found := false + var ennoblement *twmodel.Ennoblement + for _, expected := range scenario.expectedResult { + if expected.VillageID == singleResult.VillageID { + found = true + ennoblement = expected + break + } + } + assert.True(t, found) + assert.NotNil(t, ennoblement) + assert.EqualValues(t, ennoblement, singleResult) + } + } + + ts.Close() + } +}