66 lines
1.9 KiB
Go
66 lines
1.9 KiB
Go
package contracttest
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"galaxy/authsession/internal/ports"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// ConfigProviderHarnessFactory constructs a fresh semantic ConfigProvider
|
|
// harness suitable for one isolated contract subtest.
|
|
type ConfigProviderHarnessFactory func(t *testing.T) ConfigProviderHarness
|
|
|
|
// ConfigProviderHarness bundles one semantic ConfigProvider instance with the
|
|
// seed hooks needed by the backend-agnostic contract suite.
|
|
type ConfigProviderHarness struct {
|
|
// Provider is the semantic ConfigProvider under test.
|
|
Provider ports.ConfigProvider
|
|
|
|
// SeedDisabled prepares storage so LoadSessionLimit observes “limit absent”.
|
|
SeedDisabled func(t *testing.T)
|
|
|
|
// SeedLimit prepares storage so LoadSessionLimit observes a valid positive
|
|
// configured limit.
|
|
SeedLimit func(t *testing.T, limit int)
|
|
}
|
|
|
|
// RunConfigProviderContractTests executes the backend-agnostic ConfigProvider
|
|
// semantic contract suite against newHarness.
|
|
func RunConfigProviderContractTests(t *testing.T, newHarness ConfigProviderHarnessFactory) {
|
|
t.Helper()
|
|
|
|
t.Run("limit absent means disabled", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
harness := newHarness(t)
|
|
require.NotNil(t, harness.Provider)
|
|
require.NotNil(t, harness.SeedDisabled)
|
|
|
|
harness.SeedDisabled(t)
|
|
|
|
got, err := harness.Provider.LoadSessionLimit(context.Background())
|
|
require.NoError(t, err)
|
|
assert.Equal(t, ports.SessionLimitConfig{}, got)
|
|
})
|
|
|
|
t.Run("valid positive limit means configured", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
harness := newHarness(t)
|
|
require.NotNil(t, harness.Provider)
|
|
require.NotNil(t, harness.SeedLimit)
|
|
|
|
want := 5
|
|
harness.SeedLimit(t, want)
|
|
|
|
got, err := harness.Provider.LoadSessionLimit(context.Background())
|
|
require.NoError(t, err)
|
|
require.NotNil(t, got.ActiveSessionLimit)
|
|
assert.Equal(t, want, *got.ActiveSessionLimit)
|
|
})
|
|
}
|