using Microsoft.Extensions.DependencyInjection; using Thalos.DAL.Adapters; using Thalos.DAL.Contracts; using Thalos.DAL.DependencyInjection; using Thalos.DAL.Health; using Thalos.DAL.Repositories; namespace Thalos.DAL.UnitTests; public class RuntimeWiringTests { [Fact] public async Task AddThalosDalRuntime_WhenResolved_WiresRepositoryAndProviders() { var services = new ServiceCollection(); services.AddThalosDalRuntime(); using var provider = services.BuildServiceProvider(); var repository = provider.GetRequiredService(); var request = new IdentityTokenLookupRequest( new IdentityContractEnvelope("1.0.0", "corr-123"), "user-1", "tenant-1"); var response = await repository.ReadIdentityTokenAsync(request); Assert.NotNull(response); Assert.Equal("user-1", response.SubjectId); Assert.Equal("tenant-1", response.TenantId); Assert.Equal(1800, response.ExpiresInSeconds); Assert.Equal(BuildingBlock.Identity.Contracts.Conventions.IdentityAuthProvider.InternalJwt, response.Provider); } [Fact] public async Task AddThalosDalRuntime_WhenExternalProviderUsed_ResolvesProviderSpecificToken() { var services = new ServiceCollection(); services.AddThalosDalRuntime(); using var provider = services.BuildServiceProvider(); var repository = provider.GetRequiredService(); var request = new IdentityTokenLookupRequest( new IdentityContractEnvelope("1.0.0", "corr-ext"), string.Empty, "tenant-2", BuildingBlock.Identity.Contracts.Conventions.IdentityAuthProvider.AzureAd, "external-azure-token"); var response = await repository.ReadIdentityTokenAsync(request); Assert.NotNull(response); Assert.Equal(BuildingBlock.Identity.Contracts.Conventions.IdentityAuthProvider.AzureAd, response.Provider); Assert.StartsWith("azure:", response.Token); } [Fact] public void AddThalosDalRuntime_WhenResolved_WiresGrpcContractAdapter() { var services = new ServiceCollection(); services.AddThalosDalRuntime(); using var provider = services.BuildServiceProvider(); var adapter = provider.GetRequiredService(); var grpcContract = new Thalos.DAL.Grpc.IdentityTokenDalGrpcContract("user-2", "tenant-2"); var request = adapter.FromGrpcTokenRequest(grpcContract); Assert.Equal("user-2", request.SubjectId); Assert.Equal("tenant-2", request.TenantId); Assert.NotEmpty(request.Envelope.CorrelationId); } [Fact] public async Task AddThalosDalRuntime_WhenResolved_WiresDependencyHealthCheck() { var services = new ServiceCollection(); services.AddThalosDalRuntime(); using var provider = services.BuildServiceProvider(); var healthCheck = provider.GetRequiredService(); var status = await healthCheck.CheckAsync(); Assert.True(status.IsHealthy); Assert.Contains("IUserDataProvider", status.DependencyNames); Assert.Contains("IPermissionDataProvider", status.DependencyNames); } }