using Furniture.Bff.Application.Adapters; using Furniture.Bff.Application.DependencyInjection; using Furniture.Bff.Application.Grpc; using Furniture.Bff.Application.Handlers; using Furniture.Bff.Contracts.Api; using Furniture.Service.Contracts.UseCases; using Microsoft.Extensions.DependencyInjection; namespace Furniture.Bff.Application.UnitTests; public class RuntimeWiringTests { [Fact] public async Task AddFurnitureBffApplicationRuntime_WhenResolved_WiresHandler() { var services = new ServiceCollection(); services.AddFurnitureBffApplicationRuntime(); services.AddSingleton(); using var provider = services.BuildServiceProvider(); var handler = provider.GetRequiredService(); var response = await handler.HandleAsync(new GetFurnitureAvailabilityApiRequest("FUR-001", "corr-123")); Assert.Equal("FUR-001", response.FurnitureId); Assert.Equal("Chair", response.DisplayName); Assert.Equal(7, response.QuantityAvailable); } [Fact] public void FurnitureAvailabilityEdgeGrpcContractAdapter_WhenMapped_PreservesValues() { var adapter = new FurnitureAvailabilityEdgeGrpcContractAdapter(); var request = new GetFurnitureAvailabilityApiRequest("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 FurnitureAvailabilityEdgeGrpcContractAdapter_WhenCorrelationMissing_GeneratesCorrelation() { var adapter = new FurnitureAvailabilityEdgeGrpcContractAdapter(); var grpcContract = new GetFurnitureAvailabilityEdgeGrpcContract("FUR-003", string.Empty); var mapped = adapter.FromGrpc(grpcContract); Assert.Equal("FUR-003", mapped.FurnitureId); Assert.NotEmpty(mapped.CorrelationId); } private sealed class FakeFurnitureServiceClient : IFurnitureServiceClient { public Task GetAvailabilityAsync(GetFurnitureAvailabilityRequest request) { return Task.FromResult(new GetFurnitureAvailabilityResponse(request.FurnitureId, "Chair", 7)); } } }