using Furniture.Service.Application.Adapters; using Furniture.Service.Application.DependencyInjection; using Furniture.Service.Application.Grpc; using Furniture.Service.Application.UseCases; using Furniture.Service.Contracts.UseCases; using Microsoft.Extensions.DependencyInjection; namespace Furniture.Service.Application.UnitTests; public class RuntimeWiringTests { [Fact] public async Task AddFurnitureServiceRuntime_WhenInvoked_ResolvesUseCase() { var services = new ServiceCollection(); services.AddFurnitureServiceRuntime(); using var provider = services.BuildServiceProvider(); var useCase = provider.GetRequiredService(); var response = await useCase.HandleAsync(new GetFurnitureAvailabilityRequest("FUR-001", "corr-123")); Assert.Equal("FUR-001", response.FurnitureId); Assert.Equal("Contoso Lounge Chair", response.DisplayName); Assert.Equal(8, response.QuantityAvailable); } [Fact] public async Task AddFurnitureServiceRuntime_WhenUsingDemoFurnitureAlias_ResolvesMappedAvailability() { var services = new ServiceCollection(); services.AddFurnitureServiceRuntime(); using var provider = services.BuildServiceProvider(); var useCase = provider.GetRequiredService(); var response = await useCase.HandleAsync(new GetFurnitureAvailabilityRequest("FURN-001", "corr-123")); Assert.Equal("FURN-001", response.FurnitureId); Assert.Equal("Contoso Lounge Chair", response.DisplayName); Assert.Equal(8, response.QuantityAvailable); } [Fact] public void FurnitureAvailabilityGrpcContractAdapter_WhenMapped_PreservesValues() { var adapter = new FurnitureAvailabilityGrpcContractAdapter(); var request = new GetFurnitureAvailabilityRequest("FUR-002", "corr-456"); var grpcContract = adapter.ToGrpc(request); var roundtrip = adapter.FromGrpc(grpcContract); Assert.Equal("FUR-002", roundtrip.FurnitureId); Assert.Equal("corr-456", roundtrip.CorrelationId); } [Fact] public void FurnitureAvailabilityGrpcContractAdapter_WhenCorrelationMissing_GeneratesCorrelation() { var adapter = new FurnitureAvailabilityGrpcContractAdapter(); var grpcContract = new GetFurnitureAvailabilityGrpcContract("FUR-003", string.Empty); var mapped = adapter.FromGrpc(grpcContract); Assert.Equal("FUR-003", mapped.FurnitureId); Assert.NotEmpty(mapped.CorrelationId); } }