package domain_test import ( "fmt" "testing" "gitea.dwysokinski.me/twhelp/dcbot/internal/domain" "github.com/google/uuid" "github.com/stretchr/testify/assert" ) func TestNewCreateGroupParams(t *testing.T) { t.Parallel() tests := []struct { name string serverID string versionCode string serverKey string channelGainedVillages string channelLostVillages string err error }{ { name: "OK", serverID: "123441", versionCode: "en", serverKey: "en113", channelGainedVillages: "1234", channelLostVillages: "1234", err: nil, }, { name: "ERR: ServerID cannot be blank", versionCode: "", serverID: "", err: domain.RequiredError{Field: "ServerID"}, }, { name: "ERR: VersionCode cannot be blank", serverID: "1234", versionCode: "", err: domain.RequiredError{Field: "VersionCode"}, }, { name: "ERR: ServerKey cannot be blank", serverID: "1234", versionCode: "en", serverKey: "", err: domain.RequiredError{Field: "ServerKey"}, }, } for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() res, err := domain.NewCreateGroupParams( tt.serverID, tt.versionCode, tt.serverKey, tt.channelGainedVillages, tt.channelLostVillages, ) if tt.err != nil { assert.ErrorIs(t, err, tt.err) assert.Zero(t, res) return } assert.NoError(t, err) assert.Equal(t, tt.serverID, res.ServerID()) assert.Equal(t, tt.serverKey, res.ServerKey()) assert.Equal(t, tt.versionCode, res.VersionCode()) assert.Equal(t, tt.channelGainedVillages, res.ChannelGainedVillages()) assert.Equal(t, tt.channelLostVillages, res.ChannelLostVillages()) }) } } func TestUpdateGroupParams_IsZero(t *testing.T) { t.Parallel() tests := []struct { name string params domain.UpdateGroupParams output bool }{ { name: "OK: all", params: domain.UpdateGroupParams{ ChannelGainedVillages: domain.NullString{ String: "123", Valid: true, }, ChannelLostVillages: domain.NullString{ String: "123", Valid: true, }, ServerKey: domain.NullString{ String: "123", Valid: true, }, VersionCode: domain.NullString{ String: "123", Valid: true, }, }, output: false, }, { name: "OK: ChannelGainedVillages", params: domain.UpdateGroupParams{ ChannelGainedVillages: domain.NullString{ String: "123", Valid: true, }, }, output: false, }, { name: "OK: ChannelLostVillages", params: domain.UpdateGroupParams{ ChannelLostVillages: domain.NullString{ String: "123", Valid: true, }, }, output: false, }, { name: "OK: ServerKey", params: domain.UpdateGroupParams{ ServerKey: domain.NullString{ String: "123", Valid: true, }, }, output: false, }, { name: "OK: VersionCode", params: domain.UpdateGroupParams{ VersionCode: domain.NullString{ String: "123", Valid: true, }, }, output: false, }, { name: "OK: empty struct", params: domain.UpdateGroupParams{}, output: true, }, } for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() assert.Equal(t, tt.output, tt.params.IsZero()) }) } } func TestGroupLimitReachedError(t *testing.T) { t.Parallel() err := domain.GroupLimitReachedError{ Current: 10, Limit: 10, } var _ domain.UserError = err assert.Equal(t, fmt.Sprintf("group limit has been reached (%d/%d)", err.Current, err.Limit), err.Error()) assert.Equal(t, err.Error(), err.UserError()) assert.Equal(t, domain.ErrorCodeValidationError, err.Code()) } func TestGroupNotFoundError(t *testing.T) { t.Parallel() err := domain.GroupNotFoundError{ ID: uuid.NewString(), } var _ domain.UserError = err assert.Equal(t, fmt.Sprintf("group (ID=%s) not found", err.ID), err.Error()) assert.Equal(t, err.Error(), err.UserError()) assert.Equal(t, domain.ErrorCodeEntityNotFound, err.Code()) }