128 lines
3.6 KiB
Go
128 lines
3.6 KiB
Go
package service_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"gitea.dwysokinski.me/twhelp/dcbot/internal/domain"
|
|
"gitea.dwysokinski.me/twhelp/dcbot/internal/service"
|
|
"gitea.dwysokinski.me/twhelp/dcbot/internal/service/internal/mock"
|
|
"gitea.dwysokinski.me/twhelp/dcbot/internal/twhelp"
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestGroup_Create(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
params, err := domain.NewCreateGroupParams(
|
|
"592292203234328587",
|
|
"en",
|
|
"en113",
|
|
"1234",
|
|
"1235",
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
t.Run("OK", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
repo := &mock.FakeGroupRepository{}
|
|
repo.CreateCalls(func(_ context.Context, p domain.CreateGroupParams) (domain.Group, error) {
|
|
return domain.Group{
|
|
ID: uuid.NewString(),
|
|
ServerID: p.ServerID(),
|
|
ChannelGainedVillages: p.ChannelGainedVillages(),
|
|
ChannelLostVillages: p.ChannelLostVillages(),
|
|
ServerKey: p.ServerKey(),
|
|
VersionCode: p.VersionCode(),
|
|
CreatedAt: time.Now(),
|
|
}, nil
|
|
})
|
|
repo.ListReturns(nil, nil)
|
|
|
|
client := &mock.FakeTWHelpClient{}
|
|
client.GetServerCalls(func(_ context.Context, _ string, server string) (twhelp.Server, error) {
|
|
return twhelp.Server{
|
|
Key: server,
|
|
URL: fmt.Sprintf("https://%s.tribalwars.net", server),
|
|
Open: true,
|
|
}, nil
|
|
})
|
|
|
|
g, err := service.NewGroup(repo, client).Create(context.Background(), params)
|
|
assert.NoError(t, err)
|
|
assert.NotEmpty(t, g.ID)
|
|
assert.Equal(t, params.ServerID(), g.ServerID)
|
|
assert.Equal(t, params.ServerKey(), g.ServerKey)
|
|
assert.Equal(t, params.VersionCode(), g.VersionCode)
|
|
assert.Equal(t, params.ChannelGainedVillages(), g.ChannelGainedVillages)
|
|
assert.Equal(t, params.ChannelLostVillages(), g.ChannelLostVillages)
|
|
assert.NotEmpty(t, g.CreatedAt)
|
|
})
|
|
|
|
t.Run("ERR: group limit has been reached", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
const maxGroupsPerServer = 10
|
|
|
|
repo := &mock.FakeGroupRepository{}
|
|
repo.ListReturns(make([]domain.Group, maxGroupsPerServer), nil)
|
|
|
|
g, err := service.NewGroup(repo, nil).Create(context.Background(), params)
|
|
assert.ErrorIs(t, err, domain.GroupLimitReachedError{
|
|
Current: maxGroupsPerServer,
|
|
Limit: maxGroupsPerServer,
|
|
})
|
|
assert.Zero(t, g)
|
|
})
|
|
|
|
t.Run("ERR: server doesn't exist", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
repo := &mock.FakeGroupRepository{}
|
|
repo.ListReturns(nil, nil)
|
|
|
|
client := &mock.FakeTWHelpClient{}
|
|
client.GetServerCalls(func(_ context.Context, _ string, _ string) (twhelp.Server, error) {
|
|
return twhelp.Server{}, twhelp.APIError{
|
|
Code: twhelp.ErrorCodeEntityNotFound,
|
|
Message: "server not found",
|
|
}
|
|
})
|
|
|
|
g, err := service.NewGroup(repo, client).Create(context.Background(), params)
|
|
assert.ErrorIs(t, err, domain.ServerDoesNotExistError{
|
|
VersionCode: params.VersionCode(),
|
|
Key: params.ServerKey(),
|
|
})
|
|
assert.Zero(t, g)
|
|
})
|
|
|
|
t.Run("ERR: server is closed", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
repo := &mock.FakeGroupRepository{}
|
|
repo.ListReturns(nil, nil)
|
|
|
|
client := &mock.FakeTWHelpClient{}
|
|
client.GetServerCalls(func(ctx context.Context, _ string, server string) (twhelp.Server, error) {
|
|
return twhelp.Server{
|
|
Key: server,
|
|
URL: fmt.Sprintf("https://%s.tribalwars.net", server),
|
|
Open: false,
|
|
}, nil
|
|
})
|
|
|
|
g, err := service.NewGroup(repo, client).Create(context.Background(), params)
|
|
assert.ErrorIs(t, err, domain.ServerIsClosedError{
|
|
VersionCode: params.VersionCode(),
|
|
Key: params.ServerKey(),
|
|
})
|
|
assert.Zero(t, g)
|
|
})
|
|
}
|