82 lines
2.3 KiB
Go
82 lines
2.3 KiB
Go
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"),
|
|
PreferredLanguage: "en",
|
|
Status: challenge.StatusPendingSend,
|
|
DeliveryState: challenge.DeliveryPending,
|
|
CreatedAt: timestamp,
|
|
ExpiresAt: timestamp.Add(10 * time.Minute),
|
|
}
|
|
}
|