feat: authsession service

This commit is contained in:
Ilia Denisov
2026-04-08 16:23:07 +02:00
committed by GitHub
parent 28f04916af
commit 86a68ed9d0
174 changed files with 31732 additions and 112 deletions
@@ -0,0 +1,147 @@
package testkit
import (
"context"
"errors"
"github.com/stretchr/testify/require"
"testing"
"time"
"galaxy/authsession/internal/domain/common"
"galaxy/authsession/internal/domain/gatewayprojection"
"galaxy/authsession/internal/ports"
)
func TestStaticConfigProvider(t *testing.T) {
t.Parallel()
limit := 4
provider := StaticConfigProvider{
Config: ports.SessionLimitConfig{ActiveSessionLimit: &limit},
}
got, err := provider.LoadSessionLimit(context.Background())
if err != nil {
require.Failf(t, "test failed", "LoadSessionLimit() returned error: %v", err)
}
if got.ActiveSessionLimit == nil || *got.ActiveSessionLimit != limit {
require.Failf(t, "test failed", "LoadSessionLimit() = %+v, want limit %d", got, limit)
}
}
func TestSequenceIDGenerator(t *testing.T) {
t.Parallel()
generator := &SequenceIDGenerator{
ChallengeIDs: []common.ChallengeID{"challenge-queue"},
DeviceSessionIDs: []common.DeviceSessionID{"device-session-queue"},
}
challengeID, err := generator.NewChallengeID()
if err != nil {
require.Failf(t, "test failed", "NewChallengeID() returned error: %v", err)
}
if challengeID != common.ChallengeID("challenge-queue") {
require.Failf(t, "test failed", "NewChallengeID() = %q, want queued id", challengeID)
}
deviceSessionID, err := generator.NewDeviceSessionID()
if err != nil {
require.Failf(t, "test failed", "NewDeviceSessionID() returned error: %v", err)
}
if deviceSessionID != common.DeviceSessionID("device-session-queue") {
require.Failf(t, "test failed", "NewDeviceSessionID() = %q, want queued id", deviceSessionID)
}
}
func TestFixedCodeGenerator(t *testing.T) {
t.Parallel()
generator := FixedCodeGenerator{Code: "123456"}
got, err := generator.Generate()
if err != nil {
require.Failf(t, "test failed", "Generate() returned error: %v", err)
}
if got != "123456" {
require.Failf(t, "test failed", "Generate() = %q, want %q", got, "123456")
}
}
func TestDeterministicCodeHasher(t *testing.T) {
t.Parallel()
hasher := DeterministicCodeHasher{}
hash, err := hasher.Hash("123456")
if err != nil {
require.Failf(t, "test failed", "Hash() returned error: %v", err)
}
match, err := hasher.Compare(hash, "123456")
if err != nil {
require.Failf(t, "test failed", "Compare() returned error: %v", err)
}
if !match {
require.FailNow(t, "Compare() = false, want true")
}
}
func TestRecordingMailSender(t *testing.T) {
t.Parallel()
sender := &RecordingMailSender{
Results: []ports.SendLoginCodeResult{
{Outcome: ports.SendLoginCodeOutcomeSuppressed},
},
}
result, err := sender.SendLoginCode(context.Background(), ports.SendLoginCodeInput{
Email: common.Email("pilot@example.com"),
Code: "654321",
})
if err != nil {
require.Failf(t, "test failed", "SendLoginCode() returned error: %v", err)
}
if result.Outcome != ports.SendLoginCodeOutcomeSuppressed {
require.Failf(t, "test failed", "SendLoginCode().Outcome = %q, want %q", result.Outcome, ports.SendLoginCodeOutcomeSuppressed)
}
if len(sender.RecordedInputs()) != 1 {
require.Failf(t, "test failed", "RecordedInputs() length = %d, want 1", len(sender.RecordedInputs()))
}
}
func TestRecordingProjectionPublisher(t *testing.T) {
t.Parallel()
publisher := &RecordingProjectionPublisher{}
revokedAt := time.Unix(30, 0).UTC()
snapshot := gatewayprojection.Snapshot{
DeviceSessionID: common.DeviceSessionID("device-session-1"),
UserID: common.UserID("user-1"),
ClientPublicKey: "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8=",
Status: gatewayprojection.StatusRevoked,
RevokedAt: &revokedAt,
RevokeReasonCode: common.RevokeReasonCode("logout_all"),
RevokeActorType: common.RevokeActorType("system"),
}
if err := publisher.PublishSession(context.Background(), snapshot); err != nil {
require.Failf(t, "test failed", "PublishSession() returned error: %v", err)
}
if len(publisher.PublishedSnapshots()) != 1 {
require.Failf(t, "test failed", "PublishedSnapshots() length = %d, want 1", len(publisher.PublishedSnapshots()))
}
}
func TestStaticConfigProviderReturnsConfiguredError(t *testing.T) {
t.Parallel()
wantErr := errors.New("config failed")
provider := StaticConfigProvider{Err: wantErr}
_, err := provider.LoadSessionLimit(context.Background())
if !errors.Is(err, wantErr) {
require.Failf(t, "test failed", "LoadSessionLimit() error = %v, want %v", err, wantErr)
}
}