package domain_test import ( "fmt" "testing" "gitea.dwysokinski.me/twhelp/sessions/internal/domain" "github.com/google/uuid" "github.com/stretchr/testify/assert" ) func TestNewCreateAPIKeyParams(t *testing.T) { t.Parallel() tests := []struct { name string keyName string key string userID int64 expectedErr error }{ { name: "OK", keyName: uuid.NewString(), key: uuid.NewString(), userID: 1, expectedErr: nil, }, { name: "ERR: name is required", keyName: "", key: uuid.NewString(), expectedErr: domain.ValidationError{ Field: "Name", Err: domain.ErrRequired, }, }, { name: "ERR: name is too long", keyName: randString(101), key: uuid.NewString(), expectedErr: domain.ValidationError{ Field: "Name", Err: domain.MaxLengthError{ Max: 100, }, }, }, { name: "ERR: key is required", keyName: uuid.NewString(), key: "", expectedErr: domain.ValidationError{ Field: "Key", Err: domain.ErrRequired, }, }, { name: "ERR: userID < 1", keyName: uuid.NewString(), key: uuid.NewString(), userID: 0, expectedErr: domain.ValidationError{ Field: "UserID", Err: domain.MinError{ Min: 1, }, }, }, } for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() params, err := domain.NewCreateAPIKeyParams(tt.keyName, tt.key, tt.userID) if tt.expectedErr != nil { assert.Equal(t, tt.expectedErr, err) assert.Zero(t, params) return } assert.NoError(t, err) assert.Equal(t, tt.key, params.Key()) assert.Equal(t, tt.userID, params.UserID()) }) } } func TestAPIKeyNotFoundError(t *testing.T) { t.Parallel() err := domain.APIKeyNotFoundError{ Key: uuid.NewString(), } var _ domain.Error = err assert.Equal(t, fmt.Sprintf("API key (key=%s) not found", err.Key), err.Error()) assert.Equal(t, err.Error(), err.UserError()) assert.Equal(t, domain.ErrorCodeEntityNotFound, err.Code()) }