Introduces IGraphRuntimeRepository + PostgresGraphRuntimeRepository that back runtime-path graph reads with real persistence. Graph.Api Program.cs wires the new repository into the DI graph. InMemory* services get small cleanups so they remain viable for tests and local dev. CompatibilityEndpoints: extends the integration-test surface. Tests: GraphPostgresRuntimeIntegrationTests, GraphRuntimeRepositoryRegistrationTests, expanded GraphCompatibilityEndpointsIntegrationTests. Docs: graph architecture page updated. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
64 lines
2.3 KiB
C#
64 lines
2.3 KiB
C#
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.AspNetCore.Mvc.Testing;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using StellaOps.Graph.Api.Services;
|
|
|
|
namespace StellaOps.Graph.Api.Tests;
|
|
|
|
public sealed class GraphRuntimeRepositoryRegistrationTests : IClassFixture<GraphApiPostgresFixture>
|
|
{
|
|
private readonly GraphApiPostgresFixture _fixture;
|
|
|
|
public GraphRuntimeRepositoryRegistrationTests(GraphApiPostgresFixture fixture)
|
|
{
|
|
_fixture = fixture;
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Category", "Integration")]
|
|
[Trait("Intent", "Registration")]
|
|
public void Resolves_PostgresRuntimeRepository_WhenConnectionStringIsConfigured()
|
|
{
|
|
using var factory = CreateFactory(_fixture.ConnectionString);
|
|
using var scope = factory.Services.CreateScope();
|
|
|
|
var repository = scope.ServiceProvider.GetRequiredService<IGraphRuntimeRepository>();
|
|
|
|
Assert.IsType<PostgresGraphRuntimeRepository>(repository);
|
|
}
|
|
|
|
[Fact]
|
|
[Trait("Category", "Integration")]
|
|
[Trait("Intent", "Registration")]
|
|
public void Resolves_EmptyInMemoryRuntimeRepository_WhenConnectionStringIsMissing()
|
|
{
|
|
using var factory = CreateFactory(string.Empty);
|
|
using var scope = factory.Services.CreateScope();
|
|
|
|
var repository = scope.ServiceProvider.GetRequiredService<IGraphRuntimeRepository>();
|
|
var inMemoryRepository = Assert.IsType<InMemoryGraphRepository>(repository);
|
|
|
|
Assert.Empty(inMemoryRepository.GetCompatibilityNodes("acme"));
|
|
Assert.Empty(inMemoryRepository.GetCompatibilityEdges("acme"));
|
|
}
|
|
|
|
private static WebApplicationFactory<Program> CreateFactory(string? connectionString)
|
|
{
|
|
return new WebApplicationFactory<Program>()
|
|
.WithWebHostBuilder(builder =>
|
|
{
|
|
builder.UseEnvironment("Development");
|
|
builder.ConfigureAppConfiguration((_, configurationBuilder) =>
|
|
{
|
|
configurationBuilder.AddInMemoryCollection(new Dictionary<string, string?>
|
|
{
|
|
["Postgres:Graph:ConnectionString"] = connectionString,
|
|
["Postgres:Graph:SchemaName"] = "graph",
|
|
});
|
|
});
|
|
});
|
|
}
|
|
}
|