148 lines
4.3 KiB
Go
148 lines
4.3 KiB
Go
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)
|
|
}
|
|
}
|