dcbot/internal/bundb/group_test.go

128 lines
3.0 KiB
Go

package bundb_test
import (
"context"
"testing"
"time"
"gitea.dwysokinski.me/twhelp/dcbot/internal/bundb"
"gitea.dwysokinski.me/twhelp/dcbot/internal/bundb/internal/model"
"gitea.dwysokinski.me/twhelp/dcbot/internal/domain"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/uptrace/bun/dbfixture"
)
func TestGroup_Create(t *testing.T) {
t.Parallel()
repo := bundb.NewGroup(newDB(t))
t.Run("OK", func(t *testing.T) {
t.Parallel()
params, err := domain.NewCreateGroupParams(
"592292203234328587",
"en",
"en113",
"1234",
"1235",
)
require.NoError(t, err)
group, err := repo.Create(context.Background(), params)
assert.NoError(t, err)
_, err = uuid.Parse(group.ID)
assert.NoError(t, err)
assert.Equal(t, params.ServerID(), group.ServerID)
assert.Equal(t, params.ServerKey(), group.ServerKey)
assert.Equal(t, params.VersionCode(), group.VersionCode)
assert.Equal(t, params.ChannelGainedVillages(), group.ChannelGainedVillages)
assert.Equal(t, params.ChannelLostVillages(), group.ChannelLostVillages)
assert.WithinDuration(t, time.Now(), group.CreatedAt, 1*time.Second)
})
}
func TestGroup_List(t *testing.T) {
t.Parallel()
db := newDB(t)
fixture := loadFixtures(t, db)
repo := bundb.NewGroup(db)
groups := getAllGroupsFromFixture(t, fixture)
allGroups := make([]string, 0, len(groups))
for _, g := range groups {
allGroups = append(allGroups, g.ID.String())
}
tests := []struct {
name string
params domain.ListGroupsParams
expectedGroups []string
}{
{
name: "no params",
params: domain.ListGroupsParams{},
expectedGroups: allGroups,
},
{
name: "ServerIDs=[server-1]",
params: domain.ListGroupsParams{
ServerIDs: []string{"server-1"},
},
expectedGroups: []string{
"d56ad37f-2637-48ea-98f8-79627f3fcc96",
"429b790e-7186-4106-b531-4cc4931ce2ba",
},
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
res, err := repo.List(context.Background(), tt.params)
assert.NoError(t, err)
assert.Len(t, res, len(tt.expectedGroups))
for _, id := range tt.expectedGroups {
found := false
for _, grp := range res {
if grp.ID == id {
found = true
break
}
}
assert.True(t, found, "group (id=%s) not found", id)
}
})
}
}
func getAllGroupsFromFixture(tb testing.TB, fixture *dbfixture.Fixture) []model.Group {
tb.Helper()
//nolint:lll
ids := []string{"group-server-1-1", "group-server-1-2", "group-server-2-1", "group-server-2-2"}
groups := make([]model.Group, 0, len(ids))
for _, id := range ids {
groups = append(groups, getGroupFromFixture(tb, fixture, id))
}
return groups
}
func getGroupFromFixture(tb testing.TB, fixture *dbfixture.Fixture, id string) model.Group {
tb.Helper()
row, err := fixture.Row("Group." + id)
require.NoError(tb, err)
g, ok := row.(*model.Group)
require.True(tb, ok)
return *g
}