93 lines
3.3 KiB
C#
93 lines
3.3 KiB
C#
using BuildingBlock.Catalog.Contracts.Conventions;
|
|
using BuildingBlock.Catalog.Contracts.Responses;
|
|
using BuildingBlock.Inventory.Contracts.Conventions;
|
|
using BuildingBlock.Inventory.Contracts.Responses;
|
|
using Furniture.Domain.Contracts;
|
|
using Furniture.Domain.Decisions;
|
|
|
|
namespace Furniture.Domain.UnitTests;
|
|
|
|
public class FurnitureAvailabilityDecisionServiceTests
|
|
{
|
|
[Fact]
|
|
public void BuildCatalogRequest_WhenCalled_UsesFurnitureIdAsProductId()
|
|
{
|
|
var service = new FurnitureAvailabilityDecisionService();
|
|
|
|
var request = service.BuildCatalogRequest(new FurnitureAvailabilityDecisionRequest("FUR-001", "corr-001"));
|
|
|
|
Assert.Equal("FUR-001", request.ProductId);
|
|
Assert.Equal("corr-001", request.Envelope.CorrelationId);
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildInventoryRequest_WhenCorrelationMissing_GeneratesCorrelation()
|
|
{
|
|
var service = new FurnitureAvailabilityDecisionService();
|
|
|
|
var request = service.BuildInventoryRequest(new FurnitureAvailabilityDecisionRequest("FUR-001", string.Empty));
|
|
|
|
Assert.Equal("FUR-001", request.ItemCode);
|
|
Assert.NotEmpty(request.Envelope.CorrelationId);
|
|
}
|
|
|
|
[Fact]
|
|
public void ComposeResponse_WhenCalled_UsesCatalogAndInventoryValues()
|
|
{
|
|
var service = new FurnitureAvailabilityDecisionService();
|
|
var request = new FurnitureAvailabilityDecisionRequest("FUR-001", "corr-001");
|
|
var catalog = new ProductContractResponse(
|
|
new CatalogContractEnvelope("1.0.0", "corr-001"),
|
|
"FUR-001",
|
|
"Chair");
|
|
var inventory = new InventoryItemLookupResponse(
|
|
new InventoryContractEnvelope("1.0.0", "corr-001"),
|
|
"FUR-001",
|
|
12);
|
|
|
|
var response = service.ComposeResponse(request, catalog, inventory);
|
|
|
|
Assert.Equal("FUR-001", response.FurnitureId);
|
|
Assert.Equal("Chair", response.DisplayName);
|
|
Assert.Equal(12, response.QuantityAvailable);
|
|
}
|
|
|
|
[Fact]
|
|
public void ComposeResponse_WhenCatalogDisplayNameMissing_UsesFallbackName()
|
|
{
|
|
var service = new FurnitureAvailabilityDecisionService();
|
|
var request = new FurnitureAvailabilityDecisionRequest("FUR-004", "corr-004");
|
|
var catalog = new ProductContractResponse(
|
|
new CatalogContractEnvelope("1.0.0", "corr-004"),
|
|
"FUR-004",
|
|
string.Empty);
|
|
var inventory = new InventoryItemLookupResponse(
|
|
new InventoryContractEnvelope("1.0.0", "corr-004"),
|
|
"FUR-004",
|
|
5);
|
|
|
|
var response = service.ComposeResponse(request, catalog, inventory);
|
|
|
|
Assert.Equal("Unknown Furniture", response.DisplayName);
|
|
}
|
|
|
|
[Fact]
|
|
public void ComposeResponse_WhenInventoryNegative_ClampsQuantityToZero()
|
|
{
|
|
var service = new FurnitureAvailabilityDecisionService();
|
|
var request = new FurnitureAvailabilityDecisionRequest("FUR-005", "corr-005");
|
|
var catalog = new ProductContractResponse(
|
|
new CatalogContractEnvelope("1.0.0", "corr-005"),
|
|
"FUR-005",
|
|
"Shelf");
|
|
var inventory = new InventoryItemLookupResponse(
|
|
new InventoryContractEnvelope("1.0.0", "corr-005"),
|
|
"FUR-005",
|
|
-3);
|
|
|
|
var response = service.ComposeResponse(request, catalog, inventory);
|
|
|
|
Assert.Equal(0, response.QuantityAvailable);
|
|
}
|
|
}
|