furniture-bff/tests/Furniture.Bff.Application.UnitTests/RuntimeWiringTests.cs
2026-02-22 19:26:50 -06:00

63 lines
2.3 KiB
C#

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<IFurnitureServiceClient, FakeFurnitureServiceClient>();
using var provider = services.BuildServiceProvider();
var handler = provider.GetRequiredService<IGetFurnitureAvailabilityHandler>();
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<GetFurnitureAvailabilityResponse> GetAvailabilityAsync(GetFurnitureAvailabilityRequest request)
{
return Task.FromResult(new GetFurnitureAvailabilityResponse(request.FurnitureId, "Chair", 7));
}
}
}