feat: authsession service
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
package testkit
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"galaxy/authsession/internal/domain/challenge"
|
||||
"galaxy/authsession/internal/domain/common"
|
||||
"galaxy/authsession/internal/ports"
|
||||
)
|
||||
|
||||
func TestInMemoryChallengeStoreCreateAndGet(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
store := &InMemoryChallengeStore{}
|
||||
record := challengeFixture()
|
||||
|
||||
if err := store.Create(context.Background(), record); err != nil {
|
||||
require.Failf(t, "test failed", "Create() returned error: %v", err)
|
||||
}
|
||||
|
||||
got, err := store.Get(context.Background(), record.ID)
|
||||
if err != nil {
|
||||
require.Failf(t, "test failed", "Get() returned error: %v", err)
|
||||
}
|
||||
if got.ID != record.ID {
|
||||
require.Failf(t, "test failed", "Get().ID = %q, want %q", got.ID, record.ID)
|
||||
}
|
||||
if &got.CodeHash[0] == &record.CodeHash[0] {
|
||||
require.FailNow(t, "Get() returned aliased code hash slice")
|
||||
}
|
||||
}
|
||||
|
||||
func TestInMemoryChallengeStoreGetNotFound(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
store := &InMemoryChallengeStore{}
|
||||
|
||||
_, err := store.Get(context.Background(), common.ChallengeID("missing"))
|
||||
if !errors.Is(err, ports.ErrNotFound) {
|
||||
require.Failf(t, "test failed", "Get() error = %v, want ErrNotFound", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInMemoryChallengeStoreCompareAndSwapConflict(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
store := &InMemoryChallengeStore{}
|
||||
record := challengeFixture()
|
||||
if err := store.Create(context.Background(), record); err != nil {
|
||||
require.Failf(t, "test failed", "Create() returned error: %v", err)
|
||||
}
|
||||
|
||||
previous := record
|
||||
previous.Attempts.Confirm = 1
|
||||
next := record
|
||||
next.Status = challenge.StatusSent
|
||||
next.DeliveryState = challenge.DeliverySent
|
||||
|
||||
err := store.CompareAndSwap(context.Background(), previous, next)
|
||||
if !errors.Is(err, ports.ErrConflict) {
|
||||
require.Failf(t, "test failed", "CompareAndSwap() error = %v, want ErrConflict", err)
|
||||
}
|
||||
}
|
||||
|
||||
func challengeFixture() challenge.Challenge {
|
||||
timestamp := time.Unix(20, 0).UTC()
|
||||
return challenge.Challenge{
|
||||
ID: common.ChallengeID("challenge-1"),
|
||||
Email: common.Email("pilot@example.com"),
|
||||
CodeHash: []byte("hash"),
|
||||
Status: challenge.StatusPendingSend,
|
||||
DeliveryState: challenge.DeliveryPending,
|
||||
CreatedAt: timestamp,
|
||||
ExpiresAt: timestamp.Add(10 * time.Minute),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user