This repository has been archived on 2024-04-06. You can view files and clone it, but cannot push or open issues or pull requests.
core-old/internal/bundb/player_test.go
Dawid Wysokiński 2a84f71f90
All checks were successful
continuous-integration/drone/push Build is passing
feat: player snapshots (#117)
Reviewed-on: twhelp/core#117
2022-11-04 04:49:14 +00:00

677 lines
25 KiB
Go

package bundb_test
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/require"
"gitea.dwysokinski.me/twhelp/core/internal/bundb/internal/model"
"github.com/uptrace/bun/dbfixture"
"gitea.dwysokinski.me/twhelp/core/internal/bundb"
"gitea.dwysokinski.me/twhelp/core/internal/domain"
"github.com/jackc/pgerrcode"
"github.com/stretchr/testify/assert"
"github.com/uptrace/bun/driver/pgdriver"
)
func TestPlayer_CreateOrUpdate(t *testing.T) {
t.Parallel()
db := newDB(t)
fixture := loadFixtures(t, db)
repo := bundb.NewPlayer(db)
t.Run("OK", func(t *testing.T) {
t.Parallel()
serverKey := "pl169"
tribeTT := getTribeFromFixture(t, fixture, "pl169-tt")
tribeCSA := getTribeFromFixture(t, fixture, "pl169-csa")
createParams := []domain.CreatePlayerParams{
{
OpponentsDefeated: domain.OpponentsDefeated{
RankAtt: 1,
ScoreAtt: 2,
RankDef: 3,
ScoreDef: 4,
RankSup: 5,
ScoreSup: 6,
RankTotal: 7,
ScoreTotal: 8,
},
ID: 999,
Name: "name 999",
NumVillages: 3,
Points: 4,
Rank: 6,
TribeID: tribeTT.ID,
ProfileURL: "profile-999",
ServerKey: serverKey,
},
{
OpponentsDefeated: domain.OpponentsDefeated{
RankAtt: 8,
ScoreAtt: 7,
RankDef: 6,
ScoreDef: 5,
RankSup: 4,
ScoreSup: 3,
RankTotal: 2,
ScoreTotal: 1,
},
ID: 998,
Name: "name 998",
NumVillages: 5,
Points: 4,
Rank: 2,
ProfileURL: "profile-998",
ServerKey: serverKey,
},
}
updateParams := make([]domain.CreatePlayerParams, 0, len(createParams))
ids := make([]int64, 0, len(createParams))
for i, p := range createParams {
var tribeID int64
if i%2 == 0 {
tribeID = tribeCSA.ID
}
updateParams = append(updateParams, domain.CreatePlayerParams{
OpponentsDefeated: domain.OpponentsDefeated{
RankAtt: p.RankAtt + 1,
ScoreAtt: p.ScoreAtt + 1,
RankDef: p.RankDef + 1,
ScoreDef: p.ScoreDef + 1,
RankSup: p.RankSup + 1,
ScoreSup: p.ScoreSup + 1,
RankTotal: p.RankTotal + 1,
ScoreTotal: p.ScoreTotal + 1,
},
ID: p.ID,
Name: p.Name + "Update",
NumVillages: p.NumVillages + 1,
Points: p.Points + 1,
Rank: p.Rank + 1,
TribeID: tribeID,
ProfileURL: p.ProfileURL + "Update",
ServerKey: p.ServerKey,
})
ids = append(ids, p.ID)
}
listParams := domain.ListPlayersParams{
IDs: ids,
ServerKeys: []string{serverKey},
}
ctx := context.Background()
assert.NoError(t, repo.CreateOrUpdate(ctx, createParams...))
createdPlayers, _, err := repo.List(ctx, listParams)
assert.NoError(t, err)
assertCreatedPlayers(t, createParams, createdPlayers)
assert.NoError(t, repo.CreateOrUpdate(ctx, updateParams...))
updatedPlayers, _, err := repo.List(ctx, listParams)
assert.NoError(t, err)
assertCreatedPlayers(t, updateParams, updatedPlayers)
})
t.Run("OK: len(params) == 0", func(t *testing.T) {
t.Parallel()
assert.NoError(t, repo.CreateOrUpdate(context.Background()))
})
t.Run("ERR: server must exist in the db", func(t *testing.T) {
t.Parallel()
err := repo.CreateOrUpdate(context.Background(), domain.CreatePlayerParams{
OpponentsDefeated: domain.OpponentsDefeated{
RankAtt: 1,
ScoreAtt: 2,
RankDef: 3,
ScoreDef: 4,
RankSup: 5,
ScoreSup: 6,
RankTotal: 7,
ScoreTotal: 8,
},
ID: 999,
Name: "name 999",
NumVillages: 3,
Points: 4,
Rank: 6,
ServerKey: "pl999",
})
var pgErr pgdriver.Error
assert.ErrorAs(t, err, &pgErr)
assert.Equal(t, pgerrcode.ForeignKeyViolation, pgErr.Field('C'))
assert.Equal(t, "players_server_key_fkey", pgErr.Field('n'))
})
}
func TestPlayer_DeleteByID(t *testing.T) {
t.Parallel()
db := newDB(t)
fixture := loadFixtures(t, db)
repo := bundb.NewPlayer(db)
t.Run("OK", func(t *testing.T) {
t.Parallel()
playerChceszRemont := getPlayerFromFixture(t, fixture, "pl169-chcesz-remont")
require.Zero(t, playerChceszRemont.DeletedAt)
playerMaddov := getPlayerFromFixture(t, fixture, "pl169-maddov")
require.Zero(t, playerMaddov.DeletedAt)
assert.NoError(t, repo.DeleteByID(context.Background(), playerChceszRemont.ID, playerMaddov.ID))
players, _, err := repo.List(context.Background(), domain.ListPlayersParams{
IDs: []int64{playerChceszRemont.ID, playerMaddov.ID},
ServerKeys: []string{playerChceszRemont.ServerKey},
})
assert.NoError(t, err)
assert.Len(t, players, 2)
for _, player := range players {
assert.WithinDuration(t, time.Now(), player.DeletedAt, 1*time.Second)
assert.Zero(t, player.TribeID)
}
})
t.Run("OK: len(ids) == 0", func(t *testing.T) {
t.Parallel()
assert.NoError(t, repo.DeleteByID(context.Background()))
})
}
func TestPlayer_List(t *testing.T) {
t.Parallel()
db := newDB(t)
fixture := loadFixtures(t, db)
repo := bundb.NewPlayer(db)
players := getAllPlayersFromFixture(t, fixture)
type expectedPlayer struct {
id int64
tribeID int64
serverKey string
}
allPlayers := make([]expectedPlayer, 0, len(players))
for _, p := range players {
allPlayers = append(allPlayers, expectedPlayer{
id: p.ID,
serverKey: p.ServerKey,
})
}
//nolint:prealloc
var playersIT70 []expectedPlayer
for _, p := range players {
if p.ServerKey != "it70" {
continue
}
playersIT70 = append(playersIT70, expectedPlayer{
id: p.ID,
serverKey: p.ServerKey,
})
}
tests := []struct {
name string
params domain.ListPlayersParams
expectedPlayers []expectedPlayer
expectedCount int64
}{
{
name: "Count=true",
params: domain.ListPlayersParams{Count: true},
expectedPlayers: allPlayers,
expectedCount: int64(len(allPlayers)),
},
{
name: "Count=false",
params: domain.ListPlayersParams{Count: false},
expectedPlayers: allPlayers,
expectedCount: 0,
},
{
name: "ServerKeys=[it70],Count=true",
params: domain.ListPlayersParams{ServerKeys: []string{"it70"}, Count: true},
expectedPlayers: playersIT70,
expectedCount: int64(len(playersIT70)),
},
{
name: "IDs=[699734930],Count=true",
params: domain.ListPlayersParams{IDs: []int64{699734930}, Count: true},
expectedPlayers: []expectedPlayer{
{
id: 699734930,
serverKey: "pl169",
},
},
expectedCount: 1,
},
{
name: "IDs=[6180190,8419570,699736927],IDGT=6180190,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
IDGT: domain.NullInt64{Valid: true, Int64: 6180190},
ServerKeys: []string{"pl169"},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 8419570,
serverKey: "pl169",
},
{
id: 699736927,
serverKey: "pl169",
},
},
expectedCount: 2,
},
{
name: "IDs=[6180190,8419570,699736927],Sort=[{By=ID,Direction=ASC}],Limit=1,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
ServerKeys: []string{"pl169"},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByID, Direction: domain.SortDirectionASC}},
Pagination: domain.Pagination{
Limit: 1,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 6180190,
serverKey: "pl169",
},
},
expectedCount: 3,
},
{
name: "IDs=[6180190,8419570,699736927],Sort=[{By=ID,Direction=DESC}],Offset=1,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
ServerKeys: []string{"pl169"},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByID, Direction: domain.SortDirectionDESC}},
Pagination: domain.Pagination{
Offset: 1,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 6180190,
serverKey: "pl169",
},
{
id: 8419570,
serverKey: "pl169",
},
},
expectedCount: 3,
},
{
name: "IDs=[6180190,8419570,699736927],Sort=[{By=ScoreAtt,Direction=ASC}],Offset=2,Limit=1,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
ServerKeys: []string{"pl169"},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByScoreAtt, Direction: domain.SortDirectionASC}},
Pagination: domain.Pagination{
Limit: 1,
Offset: 2,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 699736927,
serverKey: "pl169",
},
},
expectedCount: 3,
},
{
name: "IDs=[6180190,8419570,699736927],Sort=[{By=ScoreAtt,Direction=DESC}],Offset=2,Limit=1,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
ServerKeys: []string{"pl169"},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByScoreAtt, Direction: domain.SortDirectionDESC}},
Pagination: domain.Pagination{
Limit: 1,
Offset: 2,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 8419570,
serverKey: "pl169",
},
},
expectedCount: 3,
},
{
name: "IDs=[6180190,8419570,699736927],Sort=[{By=ScoreDef,Direction=ASC}],Limit=1,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
ServerKeys: []string{"pl169"},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByScoreDef, Direction: domain.SortDirectionASC}},
Pagination: domain.Pagination{
Limit: 1,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 8419570,
serverKey: "pl169",
},
},
expectedCount: 3,
},
{
name: "IDs=[6180190,8419570,699736927],Sort=[{By=ScoreDef,Direction=DESC}],Limit=1,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
ServerKeys: []string{"pl169"},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByScoreDef, Direction: domain.SortDirectionDESC}},
Pagination: domain.Pagination{
Limit: 1,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 6180190,
serverKey: "pl169",
},
},
expectedCount: 3,
},
{
name: "IDs=[6180190,8419570,699736927],Sort=[{By=ScoreSup,Direction=ASC}],Limit=1,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
ServerKeys: []string{"pl169"},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByScoreSup, Direction: domain.SortDirectionASC}},
Pagination: domain.Pagination{
Limit: 1,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 699736927,
serverKey: "pl169",
},
},
expectedCount: 3,
},
{
name: "IDs=[6180190,8419570,699736927],Sort=[{By=ScoreSup,Direction=DESC}],Limit=1,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
ServerKeys: []string{"pl169"},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByScoreSup, Direction: domain.SortDirectionDESC}},
Pagination: domain.Pagination{
Limit: 1,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 8419570,
serverKey: "pl169",
},
},
expectedCount: 3,
},
{
name: "IDs=[6180190,8419570,699736927],Sort=[{By=ScoreTotal,Direction=ASC}],Limit=1,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
ServerKeys: []string{"pl169"},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByScoreTotal, Direction: domain.SortDirectionASC}},
Pagination: domain.Pagination{
Limit: 1,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 8419570,
serverKey: "pl169",
},
},
expectedCount: 3,
},
{
name: "IDs=[6180190,8419570,699736927],Sort=[{By=ScoreTotal,Direction=DESC}],Limit=1,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
ServerKeys: []string{"pl169"},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByScoreTotal, Direction: domain.SortDirectionDESC}},
Pagination: domain.Pagination{
Limit: 1,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 6180190,
serverKey: "pl169",
},
},
expectedCount: 3,
},
{
name: "IDs=[6180190,8419570,699736927],Sort=[{By=Points,Direction=ASC}],Limit=1,ServerKeys=[pl169],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{6180190, 8419570, 699736927},
ServerKeys: []string{"pl169"},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByPoints, Direction: domain.SortDirectionASC}},
Pagination: domain.Pagination{
Limit: 1,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 699736927,
serverKey: "pl169",
},
},
expectedCount: 3,
},
{
name: "IDs=[1111,1112],Deleted=true,Sort=[{By=DeletedAt,Direction=ASC}],Limit=1,ServerKeys=[en113],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{1111, 1112},
ServerKeys: []string{"en113"},
Deleted: domain.NullBool{
Bool: true,
Valid: true,
},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByDeletedAt, Direction: domain.SortDirectionASC}},
Pagination: domain.Pagination{
Limit: 1,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 1112,
serverKey: "en113",
},
},
expectedCount: 2,
},
{
name: "IDs=[1111,1112],Deleted=true,Sort=[{By=DeletedAt,Direction=DESC}],Limit=1,ServerKeys=[en113],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{1111, 1112},
ServerKeys: []string{"en113"},
Deleted: domain.NullBool{
Bool: true,
Valid: true,
},
Sort: []domain.PlayerSort{{By: domain.PlayerSortByDeletedAt, Direction: domain.SortDirectionDESC}},
Pagination: domain.Pagination{
Limit: 1,
},
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 1111,
serverKey: "en113",
},
},
expectedCount: 2,
},
{
name: "IDs=[8625053,622676],IncludeTribe=true,ServerKeys=[en113],Count=true",
params: domain.ListPlayersParams{
IDs: []int64{8625053, 622676},
ServerKeys: []string{"en113"},
IncludeTribe: true,
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 8625053,
tribeID: 122,
serverKey: "en113",
},
{
id: 622676,
tribeID: 122,
serverKey: "en113",
},
},
expectedCount: 2,
},
{
name: "Deleted=true,IncludeTribe=true,ServerKeys=[en113],Count=true",
params: domain.ListPlayersParams{
Deleted: domain.NullBool{Bool: true, Valid: true},
ServerKeys: []string{"en113"},
IncludeTribe: true,
Count: true,
},
expectedPlayers: []expectedPlayer{
{
id: 1111,
tribeID: 0,
serverKey: "en113",
},
{
id: 1112,
tribeID: 0,
serverKey: "en113",
},
},
expectedCount: 2,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
res, count, err := repo.List(context.Background(), tt.params)
assert.NoError(t, err)
assert.Equal(t, tt.expectedCount, count)
assert.Len(t, res, len(tt.expectedPlayers))
for _, expPlayer := range tt.expectedPlayers {
found := false
for _, player := range res {
if player.ID != expPlayer.id {
continue
}
if player.ServerKey != expPlayer.serverKey {
continue
}
if player.Tribe.Tribe.ID != expPlayer.tribeID {
continue
}
found = true
break
}
assert.True(t, found, "player (id=%d,tribeID=%d,serverkey=%s) not found",
expPlayer.id,
expPlayer.tribeID,
expPlayer.serverKey,
)
}
})
}
}
func assertCreatedPlayers(tb testing.TB, params []domain.CreatePlayerParams, players []domain.PlayerWithRelations) {
tb.Helper()
assert.Len(tb, players, len(params))
for _, p := range params {
var player domain.PlayerWithRelations
for _, pl := range players {
if pl.ID == p.ID && pl.ServerKey == p.ServerKey {
player = pl
break
}
}
assert.EqualValues(tb, p.OpponentsDefeated, player.OpponentsDefeated)
assert.Equal(tb, p.ID, player.ID)
assert.Equal(tb, p.Name, player.Name)
assert.Equal(tb, p.NumVillages, player.NumVillages)
assert.Equal(tb, p.Points, player.Points)
assert.Equal(tb, p.Rank, player.Rank)
assert.Equal(tb, p.TribeID, player.TribeID)
assert.Equal(tb, p.ProfileURL, player.ProfileURL)
assert.Equal(tb, p.ServerKey, player.ServerKey)
assert.Zero(tb, player.DeletedAt)
assert.WithinDuration(tb, player.CreatedAt, time.Now(), 1*time.Second)
}
}
func getAllPlayersFromFixture(tb testing.TB, fixture *dbfixture.Fixture) []model.Player {
tb.Helper()
//nolint:lll
ids := []string{"de188-1scoo", "de188-g-sus", "de188-rest-in-peace", "de188-bob-der-botmeister", "de188-riou89", "de188-nobelpreis", "de188-silberkiller", "de188-voitijaner", "de188-august-iner", "de188-ina-instabil", "de188-doch-nicht-zu-netto", "de188-stefan-der-i", "de188-undercover", "de188-kibitz", "de188-udosnack", "de188-colderaser", "de188-thegenetix", "de188-awesome-bigyves", "de188-crowns", "de188-kaptnblaubar", "de188-geheimratsecke", "de188-schnapsnasenhai", "de188-mahagoni", "de188-yuri-tarded", "de188-augustus-der-ii", "de188-st-rike", "de188-udin-1", "de188-werner-frankfurt", "de188-aletheias-leuchtfeuer", "de188-tim212", "de188-creepy-creeperton", "de188-mal-eleve", "de188-blueman65", "de188-tongomakalele", "en113-zero-two", "en113-makobex", "en113-dont-mind-me", "en113-deleted-1", "en113-deleted-2", "en113-twoangrykittens", "en113-danneboii", "en113-kingjay321", "en113-julius-caesar", "en113-scarlett-maiden", "en113-mrburger", "en113-rain", "en113-geegee", "en113-monkey-on-camel", "en113-copelaax", "en113-bluedog2000", "en113-turambar", "en113-dreaaamyr", "en113-amans", "en113-krige", "en113-meaningless", "en113-a-k-a-elmoo", "en113-dummbullen2", "en113-syncopic", "en113-jamaicanmebacon", "en113-kjpker", "en113-transistor1337", "en113-vercingetorix", "en113-mr-noob", "en113-doctor-strangewar", "en113-aimbots-here", "en113-rickieboyo", "en113-curious-george", "en113-guy-with-no-humor", "en113-twisted-horizons", "en113-hide-n-seek", "en113-survivants", "en113-talli56", "en113-jupp", "it70-squirtle", "it70-nero-il-nerd", "it70-tomaskh-96", "it70-cavani-is-back", "it70-pise17", "it70-doublechen", "it70-sauron", "it70-zambo700", "it70-biondo", "it70-insert-coin", "it70-night-st4lker", "it70-idealeultras", "it70-fabeer", "it70-king-tork", "it70-march96", "it70-jinchuriki", "it70-close-to-the-edge", "it70-wearepro", "it70-durocell", "it70-angelus29", "it70-devan95", "it70-giek", "it70-slender-man", "it70-igneel", "it70-lodi94", "it70-meganium", "it70-manura", "it70-stemax", "it70-fgregoris", "it70-morrodoro", "it70-eleinad", "it70-herbert-ballerina", "it70-frtd", "it70-bobo876", "it70-pandapizza", "it70-manosul", "it70-robertoveronica", "it70-chained-censurato", "it70-michelezambo", "it70-sir-lion", "it70-hexe", "it70-scotch", "it70-the-executioner", "it70-paboo", "it70-paracetamolo", "it70-monkey-d-luffy", "it70-carlo00mark", "it70-the8major", "it70-kees-popinga", "it70-xxmarcoxx", "it70-r1c0h", "it70-setrakusra", "it70-kobras", "it70-slayer", "it70-tua-madre", "it70-balor", "it70-singdeath", "it70-love-farm", "it70-luisabruna", "it70-pokermania", "it70-snabol", "it70-luciofox695", "it70-matmac", "it70-zfiire", "it70-gogeta-lv4", "it70-ciccio-il-figo", "it70-loryely1", "it70-clodia", "it70-frank", "it70-simonzello", "it70-sir-bestia91", "it70-isterica85", "it70-geser", "it70-supergini", "it70-monryt", "it70-saxman", "it70-3erzad0se", "it70-snipercat", "it70-aco950", "it70-jambo", "it70-makkiato", "it70-unaltravolta", "it70-iormund", "it70-vodilka", "it70-sirbanana", "it70-re-sbattila83", "it70-smokingwhite", "it70-lavatrici-shura", "it70-peppe-93", "it70-time-out", "it70-iena73", "it70-masco529", "it70-ggigazz", "it70-palaandmes-i-muratori", "it70-monica-vitti", "it70-balerion78", "it70-ramuz", "it70-itop", "it70-realnot16", "it70-sunjii", "it70-marcolinomax", "it70-erjus", "it70-pulcinella", "it70-onivinz", "it70-lordmasaniello", "it70-kronus", "it70-inaros", "it70-crows", "it70-bibi95", "it70-ultraquantum", "it70-tobias-fate", "it70-sarchiapone", "it70-wolverinexxx", "it70-draco15", "it70-don-mayo", "it70-fuunnygaamees", "it70-arbegas", "it70-elaheart", "it70-loveless", "it70-alfarabe", "it70-maddaismadda", "pl169-chcesz-remont", "pl169-maddov", "pl169-bociarze", "pl169-83ania83-x-radwalk3", "pl169-tomasz-lomot", "pl169-iwan-23-2", "pl169-combobombo", "pl169-szunaj23", "pl169-definitelyrlythed0orek", "pl169-xkentinpl", "pl169-charfa", "pl169-dasilva2402", "pl169-deveste", "pl169-brown", "pl169-kubekxd11", "pl169-fristajla", "pl169-sandre", "pl169-notfair", "pl169-kuzyn-tymoteusz", "pl169-xerios", "pl169-alessaandra", "pl169-ryju15", "pl169-bucks", "pl169-redram", "pl169-pawcio231", "pl169-bujaki-top", "pl169-bystek7", "pl169-suppx", "pl169-dzymi3", "pl169-george74", "pl169-before1995", "pl169-maciob1997", "pl169-luxipux", "pl169-krysian997", "pl169-kampaj3", "pl169-sebaqwe97", "pl169-k4miru", "pl169-mackobl14", "pl169-wezu", "pl169-dobrodziej-i-wspanialy", "pl169-hitman003", "pl169-pijaniibracia", "pl169-japczan", "pl169-future-traveler", "pl169-mercel", "pl169-xkikutx", "pl169-brisingr", "pl169-krulik", "pl169-farmier-und-mroczny", "pl169-donszwagreone", "pl169-kicka14", "pl169-jeku", "pl169-nuben", "pl169-asd-sa", "pl169-weebuus", "pl169-dziki-zwierzz", "pl169-krismal", "pl169-shotasik", "pl169-mr-dymer", "pl169-marcinfix", "pl169-100dni", "pl169-bax8009", "pl169-born2befree", "pl169-kakares18", "pl169-kuzyn-bartosz", "pl169-etowy89", "pl169-xhavajek", "pl169-zulbert", "pl169-brat447", "pl169-vequs", "pl169-loalanek", "pl169-ladylonia", "pl169-fomiczowka", "pl169-tomi77", "pl169-luki-99", "pl169-revrand", "pl169-sir-rekin-ii", "pl169-olineekk", "pl169-pjetreq", "pl169-psykoo", "pl169-majson-x-szef-ryszard", "pl169-szukajmnie", "pl169-krulandrzej", "pl169-piotrhs", "pl169-renieek", "pl169-aquel", "pl169-walka500", "pl169-kuba1845", "pl169-johnyyyy", "pl169-fresio", "pl169-fkg007", "pl169-nulja", "pl169-spojler201", "pl169-perezkcn", "pl169-wojcieho97", "pl169-aissa", "pl169-wuja", "pl169-krystian0825", "pl169-sugardandy", "pl169-hera1", "pl169-miru", "pl169-anabolic250", "pl169-pepe125", "pl169-xxwiedzminxx", "pl169-matekmata", "pl169-croussant", "pl169-rafaldan", "pl169-bafik2004", "pl169-stine94", "pl169-mklo12", "pl169-rutecky", "pl169-artpaw", "pl169-dat", "pl169-rohhan415", "pl169-lihtum", "pl169-tann", "pl169-innosensq", "pl169-matex50", "pl169-stachu1223", "pl169-sew112", "pl169-krzok14", "pl169-master-wir", "pl169-cosiepaczys", "pl169-plasil230415", "pl169-scarface91", "pl169-ravcio", "pl169-banan1223", "pl169-geraltv47", "pl169-wlodar-staragwardia", "pl169-holweko", "pl169-expresowy", "pl169-max-delor", "pl169-ogolnietokristo", "pl169-nervouse", "pl169-czapek", "pl169-papcio-krol", "pl169-zemstapowraca", "pl169-pawtok", "pl169-nyga69xd", "pl169-tarcza55", "pl169-krugerses", "pl169-chaos-black", "pl169-kodeiniarz", "pl169-magnats", "pl169-gopnik", "pl169-bonnie-i-clyde", "pl169-tima4", "pl169-hexuuu", "pl169-zmuutowanny", "pl169-expertocredite", "pl169-wdamianse", "pl169-zeta-reticuli", "pl169-miden", "pl169-lodar93", "pl169-soa1", "pl169-dzieszko1", "pl169-llllllllllllllllllllllll", "pl169-alicei", "pl169-yardys", "pl169-czarnydzeedaj", "pl169-romekwislatsw", "pl169-ernialdinio", "pl169-bartiii95", "pl169-wrobel-pogromca", "pl169-pablo-pablo", "pl169-milwaukee", "pl169-lukizak3", "pl169-marek", "pl169-tyson-23", "pl169-nazar1908", "pl169-niezwyciezony89xbiczbozy", "pl169-hatnter", "pl169-grigor-2007", "pl169-menager86", "pl169-easy26", "pl169-reco", "pl169-pawel-katalonczyk", "pl169-nygusovsky", "pl169-lazan", "pl169-patronusek", "pl169-macky", "pl169-bpawel10", "pl169-discordia", "pl169-paxxx", "pl169-darkoniks", "pl169-sir-jago", "pl169-abuk888", "pl169-shym", "pl169-cris92", "pl169-moniullka987", "pl169-boteczeq-aka-lease", "pl169-3lobit", "pl169-mujdom11", "pl169-szilka", "pl169-mariel", "pl169-malamii", "pl169-beba1234ify", "pl169-mareczekcukiereczek", "pl169-lord5daniel", "pl169-tiensinhan"}
players := make([]model.Player, 0, len(ids))
for _, id := range ids {
players = append(players, getPlayerFromFixture(tb, fixture, id))
}
return players
}
func getPlayerFromFixture(tb testing.TB, fixture *dbfixture.Fixture, id string) model.Player {
tb.Helper()
row, err := fixture.Row("Player." + id)
require.NoError(tb, err)
p, ok := row.(*model.Player)
require.True(tb, ok)
return *p
}