using Furniture.DAL.Adapters; using Furniture.DAL.Contracts; using Furniture.DAL.DependencyInjection; using Furniture.DAL.Health; using Furniture.DAL.Repositories; using Microsoft.Extensions.DependencyInjection; namespace Furniture.DAL.UnitTests; public class RuntimeWiringTests { [Fact] public async Task AddFurnitureDalRuntime_WhenResolved_WiresRepositoriesAndProviders() { var services = new ServiceCollection(); services.AddFurnitureDalRuntime(); using var provider = services.BuildServiceProvider(); var furnitureRepository = provider.GetRequiredService(); var catalogRepository = provider.GetRequiredService(); var envelope = new FurnitureDalContractEnvelope("1.0.0", "corr-123"); var availability = await furnitureRepository.ReadAvailabilityAsync( new FurnitureAvailabilityLookupRequest(envelope, "FURN-001")); var product = await catalogRepository.ReadProductAsync( new CatalogProductLookupRequest(envelope, "PROD-FURN-001")); Assert.NotNull(availability); Assert.Equal("FURN-001", availability.FurnitureId); Assert.Equal(22, availability.QuantityAvailable); Assert.NotNull(product); Assert.Equal("PROD-FURN-001", product.ProductId); Assert.Equal("Nordic Chair", product.DisplayName); } [Fact] public void AddFurnitureDalRuntime_WhenResolved_WiresGrpcAndCatalogAdapters() { var services = new ServiceCollection(); services.AddFurnitureDalRuntime(); using var provider = services.BuildServiceProvider(); var grpcAdapter = provider.GetRequiredService(); var projectionAdapter = provider.GetRequiredService(); var availabilityRequest = grpcAdapter.FromGrpcAvailabilityRequest( new Furniture.DAL.Grpc.FurnitureAvailabilityDalGrpcContract("FURN-002")); var catalogRequest = projectionAdapter.ToDalRequest( new BuildingBlock.Catalog.Contracts.Products.ProductContract( new BuildingBlock.Catalog.Contracts.Conventions.CatalogContractEnvelope("1.0.0", "corr-456"), "PROD-FURN-002", "Oak Dining Table")); Assert.Equal("FURN-002", availabilityRequest.FurnitureId); Assert.NotEmpty(availabilityRequest.Envelope.CorrelationId); Assert.Equal("PROD-FURN-002", catalogRequest.ProductId); Assert.Equal("corr-456", catalogRequest.Envelope.CorrelationId); } [Fact] public async Task AddFurnitureDalRuntime_WhenResolved_WiresDependencyHealthCheck() { var services = new ServiceCollection(); services.AddFurnitureDalRuntime(); using var provider = services.BuildServiceProvider(); var healthCheck = provider.GetRequiredService(); var status = await healthCheck.CheckAsync(); Assert.True(status.IsHealthy); Assert.Contains("IFurnitureDataProvider", status.DependencyNames); Assert.Contains("ICatalogRepository", status.DependencyNames); } }