sessions/internal/service/api_key_test.go

98 lines
2.5 KiB
Go

package service_test
import (
"context"
"testing"
"time"
"gitea.dwysokinski.me/twhelp/sessions/internal/domain"
"gitea.dwysokinski.me/twhelp/sessions/internal/service"
"gitea.dwysokinski.me/twhelp/sessions/internal/service/internal/mock"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
)
func TestAPIKey_Create(t *testing.T) {
t.Parallel()
t.Run("OK", func(t *testing.T) {
t.Parallel()
apiKeyRepo := &mock.FakeAPIKeyRepository{}
apiKeyRepo.CreateCalls(func(ctx context.Context, params domain.CreateAPIKeyParams) (domain.APIKey, error) {
return domain.APIKey{
ID: 1,
Key: params.Key(),
UserID: params.UserID(),
CreatedAt: time.Now(),
}, nil
})
userSvc := &mock.FakeUserGetter{}
user := domain.User{ID: 1234}
userSvc.GetReturns(user, nil)
ak, err := service.NewAPIKey(apiKeyRepo, userSvc).Create(context.Background(), user.ID)
assert.NoError(t, err)
assert.Greater(t, ak.ID, int64(0))
_, err = uuid.Parse(ak.Key)
assert.NoError(t, err)
assert.Equal(t, user.ID, ak.UserID)
assert.WithinDuration(t, time.Now(), ak.CreatedAt, 100*time.Millisecond)
})
t.Run("ERR: user doesnt exist", func(t *testing.T) {
t.Parallel()
userSvc := &mock.FakeUserGetter{}
var userID int64 = 1234
userSvc.GetReturns(domain.User{}, domain.UserNotFoundError{ID: userID})
ak, err := service.NewAPIKey(nil, userSvc).Create(context.Background(), userID)
assert.ErrorIs(t, err, domain.UserDoesNotExistError{ID: userID})
assert.Zero(t, ak)
})
}
func TestAPIKey_Verify(t *testing.T) {
t.Parallel()
t.Run("OK", func(t *testing.T) {
t.Parallel()
apiKeyRepo := &mock.FakeAPIKeyRepository{}
apiKeyRepo.GetCalls(func(ctx context.Context, key string) (domain.APIKey, error) {
return domain.APIKey{
ID: 1,
Key: key,
UserID: 125,
CreatedAt: time.Now(),
}, nil
})
userSvc := &mock.FakeUserGetter{}
userSvc.GetCalls(func(ctx context.Context, id int64) (domain.User, error) {
return domain.User{
ID: id,
Name: uuid.NewString(),
CreatedAt: time.Now(),
}, nil
})
user, err := service.NewAPIKey(apiKeyRepo, userSvc).Verify(context.Background(), uuid.NewString())
assert.NoError(t, err)
assert.Greater(t, user.ID, int64(0))
})
t.Run("ERR: invalid uuid", func(t *testing.T) {
t.Parallel()
key := "abcd"
user, err := service.NewAPIKey(nil, nil).Verify(context.Background(), key)
assert.ErrorIs(t, err, domain.APIKeyNotFoundError{
Key: key,
})
assert.Zero(t, user)
})
}