Files
galaxy-game/authsession/internal/testkit/challenge_store_test.go
T
2026-04-17 18:39:16 +02:00

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),
}
}