using Furniture.Bff.Application.Adapters; using Furniture.Bff.Application.Handlers; using Furniture.Bff.Contracts.Api; using Furniture.Service.Contracts.UseCases; namespace Furniture.Bff.Application.UnitTests; public class GetFurnitureAvailabilityHandlerTests { [Fact] public async Task HandleAsync_WhenCalled_DelegatesToServiceClient() { var handler = new GetFurnitureAvailabilityHandler( new FakeFurnitureServiceClient(), new FakeFurnitureAvailabilityEdgeContractAdapter()); var response = await handler.HandleAsync(new GetFurnitureAvailabilityApiRequest("FUR-001", "corr-123")); Assert.Equal("FUR-001", response.FurnitureId); Assert.Equal("Chair", response.DisplayName); Assert.Equal(3, response.QuantityAvailable); } private sealed class FakeFurnitureServiceClient : IFurnitureServiceClient { public Task GetAvailabilityAsync(GetFurnitureAvailabilityRequest request) { return Task.FromResult(new GetFurnitureAvailabilityResponse(request.FurnitureId, "Chair", 3)); } } private sealed class FakeFurnitureAvailabilityEdgeContractAdapter : IFurnitureAvailabilityEdgeContractAdapter { public GetFurnitureAvailabilityRequest ToServiceRequest(GetFurnitureAvailabilityApiRequest request) { return new GetFurnitureAvailabilityRequest(request.FurnitureId, request.CorrelationId); } public GetFurnitureAvailabilityApiResponse ToApiResponse(GetFurnitureAvailabilityResponse response) { return new GetFurnitureAvailabilityApiResponse( response.FurnitureId, response.DisplayName, response.QuantityAvailable); } } }