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