V13-FE-011: finalize search list layout slice
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
using Xunit;
|
||||
using Npgsql;
|
||||
using Testcontainers.PostgreSql;
|
||||
|
||||
namespace Kbx.Tests.Scenarios;
|
||||
|
||||
/// <summary>
|
||||
/// Host repository reference fixture. Requires Testcontainers.PostgreSql and Npgsql.
|
||||
/// The container is disposable; never point this fixture at a production connection string.
|
||||
/// </summary>
|
||||
public sealed class KbxScenarioPostgresFixture : IAsyncLifetime
|
||||
{
|
||||
private readonly PostgreSqlContainer _postgres = new PostgreSqlBuilder()
|
||||
.WithImage("postgres:17-alpine")
|
||||
.WithDatabase("kbx_scenario_test")
|
||||
.WithUsername("kbx")
|
||||
.WithPassword("kbx-test-only")
|
||||
.Build();
|
||||
|
||||
public string ConnectionString => _postgres.GetConnectionString();
|
||||
|
||||
public async Task InitializeAsync()
|
||||
{
|
||||
await _postgres.StartAsync();
|
||||
// Host: run DbUp migrations in filename order, then bootstrap/reset/seed SQL.
|
||||
}
|
||||
|
||||
public Task DisposeAsync() => _postgres.DisposeAsync().AsTask();
|
||||
|
||||
public static async Task AssertTestGuardAsync(string connectionString, CancellationToken ct = default)
|
||||
{
|
||||
await using var connection = new NpgsqlConnection(connectionString);
|
||||
await connection.OpenAsync(ct);
|
||||
await using var command = new NpgsqlCommand(
|
||||
"select exists(select 1 from kbx_test.environment_guard where marker='KBX_SCENARIO_TEST_ONLY')", connection);
|
||||
if (await command.ExecuteScalarAsync(ct) is not true)
|
||||
throw new InvalidOperationException("KBX scenario database guard is missing.");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user