2023-07-13 04:22:52 +00:00
|
|
|
package service_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"gitea.dwysokinski.me/twhelp/dcbot/internal/domain"
|
|
|
|
"gitea.dwysokinski.me/twhelp/dcbot/internal/service"
|
|
|
|
"gitea.dwysokinski.me/twhelp/dcbot/internal/service/internal/mock"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestVillage_TranslateCoords(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
|
2023-07-13 04:57:17 +00:00
|
|
|
server := domain.TWServer{
|
|
|
|
Key: "pl181",
|
|
|
|
URL: "https://pl181.plemiona.pl",
|
|
|
|
Open: true,
|
|
|
|
}
|
|
|
|
versionCode := server.Key[:2]
|
|
|
|
|
|
|
|
villages := []domain.Village{
|
|
|
|
{
|
|
|
|
X: 123,
|
|
|
|
Y: 123,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
X: 897,
|
|
|
|
Y: 123,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
X: 778,
|
|
|
|
Y: 689,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
notFound := []string{
|
|
|
|
"789|123",
|
|
|
|
"678|123",
|
|
|
|
}
|
|
|
|
|
|
|
|
var builderCoordsStr strings.Builder
|
|
|
|
|
|
|
|
for _, v := range villages {
|
|
|
|
builderCoordsStr.WriteString(v.Coords() + " ")
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, coords := range notFound {
|
|
|
|
builderCoordsStr.WriteString(coords + " ")
|
|
|
|
}
|
|
|
|
|
|
|
|
params, err := domain.NewTranslateVillageCoordsParams(versionCode, server.Key, builderCoordsStr.String(), 2)
|
|
|
|
require.NoError(t, err)
|
2023-07-13 04:43:06 +00:00
|
|
|
|
2023-07-13 04:57:17 +00:00
|
|
|
tests := []struct {
|
|
|
|
page int32
|
|
|
|
hasNext bool
|
|
|
|
hasPrev bool
|
|
|
|
villages []domain.Village
|
|
|
|
notFound []string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
page: 1,
|
|
|
|
hasNext: true,
|
|
|
|
hasPrev: false,
|
|
|
|
villages: []domain.Village{
|
|
|
|
villages[0],
|
|
|
|
villages[1],
|
2023-07-13 04:22:52 +00:00
|
|
|
},
|
2023-07-13 04:57:17 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
page: 2,
|
|
|
|
hasNext: true,
|
|
|
|
hasPrev: true,
|
|
|
|
villages: []domain.Village{
|
|
|
|
villages[2],
|
2023-07-13 04:22:52 +00:00
|
|
|
},
|
2023-07-13 04:57:17 +00:00
|
|
|
notFound: []string{
|
|
|
|
notFound[0],
|
2023-07-13 04:22:52 +00:00
|
|
|
},
|
2023-07-13 04:57:17 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
page: 3,
|
|
|
|
hasNext: false,
|
|
|
|
hasPrev: true,
|
|
|
|
notFound: []string{
|
|
|
|
notFound[1],
|
2023-07-13 04:22:52 +00:00
|
|
|
},
|
2023-07-13 04:57:17 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for i := range tests {
|
|
|
|
tt := tests[i]
|
|
|
|
|
|
|
|
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
twhelpSvc := &mock.FakeTWHelpService{}
|
|
|
|
twhelpSvc.ListVillagesByCoordsCalls(func(
|
|
|
|
ctx context.Context,
|
|
|
|
versionCode string,
|
|
|
|
serverKey string,
|
|
|
|
coords []string,
|
|
|
|
offset int32,
|
|
|
|
perPage int32,
|
|
|
|
) ([]domain.Village, error) {
|
|
|
|
if versionCode != params.VersionCode() || serverKey != params.ServerKey() {
|
|
|
|
return nil, nil
|
|
|
|
}
|
2023-07-13 04:22:52 +00:00
|
|
|
|
2023-07-13 04:57:17 +00:00
|
|
|
res := make([]domain.Village, 0, len(coords))
|
2023-07-13 04:22:52 +00:00
|
|
|
|
2023-07-13 04:57:17 +00:00
|
|
|
for _, c := range coords {
|
|
|
|
for _, v := range villages {
|
|
|
|
if v.Coords() == c {
|
|
|
|
res = append(res, v)
|
|
|
|
break
|
2023-07-13 04:22:52 +00:00
|
|
|
}
|
|
|
|
}
|
2023-07-13 04:57:17 +00:00
|
|
|
}
|
2023-07-13 04:22:52 +00:00
|
|
|
|
2023-07-13 04:57:17 +00:00
|
|
|
return res, nil
|
|
|
|
})
|
|
|
|
twhelpSvc.GetServerCalls(func(ctx context.Context, versionCode string, serverKey string) (domain.TWServer, error) {
|
|
|
|
if versionCode != params.VersionCode() || serverKey != params.ServerKey() {
|
|
|
|
return domain.TWServer{}, domain.TWServerNotFoundError{
|
|
|
|
VersionCode: params.VersionCode(),
|
|
|
|
Key: params.ServerKey(),
|
2023-07-13 04:43:06 +00:00
|
|
|
}
|
2023-07-13 04:22:52 +00:00
|
|
|
}
|
2023-07-13 04:57:17 +00:00
|
|
|
return server, nil
|
2023-07-13 04:22:52 +00:00
|
|
|
})
|
|
|
|
|
2023-07-13 04:57:17 +00:00
|
|
|
res, err := service.NewVillage(&mock.FakeVillageRepository{}, twhelpSvc).
|
|
|
|
TranslateCoords(context.Background(), params, tt.page)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Len(t, res.Villages, len(tt.villages))
|
|
|
|
for _, v := range tt.villages {
|
|
|
|
assert.Contains(t, res.Villages, v)
|
|
|
|
}
|
|
|
|
assert.Len(t, res.NotFound, len(tt.notFound))
|
|
|
|
for _, coords := range tt.notFound {
|
|
|
|
assert.Contains(t, res.NotFound, coords)
|
|
|
|
}
|
|
|
|
assert.Equal(t, tt.hasPrev, res.HasPrev)
|
|
|
|
assert.Equal(t, tt.hasNext, res.HasNext)
|
|
|
|
assert.Equal(t, tt.page, res.Page)
|
|
|
|
assert.Equal(t, params.MaxPage(), res.MaxPage)
|
|
|
|
assert.Equal(t, params.SHA256(), res.ParamsSHA256)
|
2023-07-13 04:22:52 +00:00
|
|
|
})
|
2023-07-13 04:57:17 +00:00
|
|
|
}
|
2023-07-13 04:22:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestVillage_TranslateCoordsFromHash(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
params, err := domain.NewTranslateVillageCoordsParams("pl", "pl181", "123|123 897|123 778|689 789|123 678|123", 2)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
repo := &mock.FakeVillageRepository{}
|
|
|
|
repo.GetTranslateCoordsParamsCalls(func(ctx context.Context, hash string) (domain.TranslateVillageCoordsParams, error) {
|
|
|
|
if hash != params.SHA256() {
|
|
|
|
return domain.TranslateVillageCoordsParams{}, domain.TranslateVillageCoordsParamsNotFoundError{
|
|
|
|
SHA256: hash,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return params, nil
|
|
|
|
})
|
|
|
|
|
|
|
|
res, err := service.NewVillage(repo, &mock.FakeTWHelpService{}).
|
|
|
|
TranslateCoordsFromHash(context.Background(), params.SHA256(), 1)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.NotZero(t, res)
|
|
|
|
}
|