add TestLoadEnnoblements

This commit is contained in:
Dawid Wysokiński 2021-07-17 07:49:16 +02:00
parent 4e82ae6bed
commit ee20d129af
3 changed files with 125 additions and 2 deletions

View File

@ -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"
)

View File

@ -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:

View File

@ -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()
}
}