package domain_test import ( "fmt" "testing" "gitea.dwysokinski.me/twhelp/dcbot/internal/domain" "github.com/google/uuid" "github.com/stretchr/testify/assert" ) func TestNewCreateMonitorParams(t *testing.T) { t.Parallel() tests := []struct { name string tribeID int64 groupID string err error }{ { name: "OK", tribeID: 15, groupID: uuid.NewString(), }, { name: "ERR: GroupID cannot be blank", groupID: "", err: domain.ValidationError{ Field: "GroupID", Err: domain.ErrRequired, }, }, { name: "ERR: TribeID < 1", groupID: uuid.NewString(), tribeID: 0, err: domain.ValidationError{ Field: "TribeID", Err: domain.MinError{ Min: 1, }, }, }, } for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() res, err := domain.NewCreateMonitorParams( tt.groupID, tt.tribeID, ) if tt.err != nil { assert.ErrorIs(t, err, tt.err) assert.Zero(t, res) return } assert.NoError(t, err) assert.Equal(t, tt.groupID, res.GroupID()) assert.Equal(t, tt.tribeID, res.TribeID()) }) } } func TestMonitorAlreadyExistsError(t *testing.T) { t.Parallel() err := domain.MonitorAlreadyExistsError{ GroupID: uuid.NewString(), TribeID: 1234, } var _ domain.UserError = err assert.Equal(t, fmt.Sprintf("monitor (GroupID=%s,TribeID=%d) already exists", err.GroupID, err.TribeID), err.Error()) assert.Equal(t, err.Error(), err.UserError()) assert.Equal(t, domain.ErrorCodeAlreadyExists, err.Code()) } func TestMonitorLimitReachedError(t *testing.T) { t.Parallel() err := domain.MonitorLimitReachedError{ Current: 10, Limit: 10, } var _ domain.UserError = err assert.Equal(t, fmt.Sprintf("monitor 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 TestMonitorNotFoundError(t *testing.T) { t.Parallel() err := domain.MonitorNotFoundError{ ID: uuid.NewString(), } var _ domain.UserError = err assert.Equal(t, fmt.Sprintf("monitor (ID=%s) not found", err.ID), err.Error()) assert.Equal(t, err.Error(), err.UserError()) assert.Equal(t, domain.ErrorCodeEntityNotFound, err.Code()) }