feat: authsession service
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user