Refactor code structure and optimize performance across multiple modules
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
// -----------------------------------------------------------------------------
|
||||
// BinaryIndexIntegrationFixture.cs
|
||||
// Sprint: SPRINT_20251226_011_BINIDX
|
||||
// Task: BINCAT-18 - Integration tests with Testcontainers PostgreSQL
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
using System.Reflection;
|
||||
using Dapper;
|
||||
using Npgsql;
|
||||
using StellaOps.BinaryIndex.Core.Services;
|
||||
using StellaOps.Infrastructure.Postgres.Testing;
|
||||
|
||||
namespace StellaOps.BinaryIndex.Persistence.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// PostgreSQL integration test fixture for BinaryIndex module.
|
||||
/// Spins up a real PostgreSQL container and runs schema migrations.
|
||||
/// </summary>
|
||||
public sealed class BinaryIndexIntegrationFixture : PostgresIntegrationFixture
|
||||
{
|
||||
private const string TestTenantId = "00000000-0000-0000-0000-000000000001";
|
||||
private NpgsqlDataSource? _dataSource;
|
||||
|
||||
protected override Assembly? GetMigrationAssembly()
|
||||
=> typeof(BinaryIndexDbContext).Assembly;
|
||||
|
||||
protected override string GetModuleName() => "BinaryIndex";
|
||||
|
||||
protected override string? GetResourcePrefix() => "StellaOps.BinaryIndex.Persistence.Migrations";
|
||||
|
||||
public override async Task InitializeAsync()
|
||||
{
|
||||
await base.InitializeAsync();
|
||||
_dataSource = NpgsqlDataSource.Create(ConnectionString);
|
||||
}
|
||||
|
||||
public override async Task DisposeAsync()
|
||||
{
|
||||
if (_dataSource != null)
|
||||
{
|
||||
await _dataSource.DisposeAsync();
|
||||
}
|
||||
await base.DisposeAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new database context with the test tenant configured.
|
||||
/// </summary>
|
||||
public BinaryIndexDbContext CreateDbContext(string? tenantId = null)
|
||||
{
|
||||
if (_dataSource == null)
|
||||
{
|
||||
throw new InvalidOperationException("Fixture not initialized. Call InitializeAsync first.");
|
||||
}
|
||||
|
||||
var tenant = new TestTenantContext(tenantId ?? TestTenantId);
|
||||
return new BinaryIndexDbContext(_dataSource, tenant);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the default test tenant ID.
|
||||
/// </summary>
|
||||
public string GetTestTenantId() => TestTenantId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Simple tenant context implementation for testing.
|
||||
/// </summary>
|
||||
internal sealed class TestTenantContext : ITenantContext
|
||||
{
|
||||
public TestTenantContext(string tenantId)
|
||||
{
|
||||
TenantId = tenantId;
|
||||
}
|
||||
|
||||
public string TenantId { get; }
|
||||
}
|
||||
Reference in New Issue
Block a user