修改提交

This commit is contained in:
2026-08-22 09:51:41 +08:00
parent 76b41c0812
commit 15636a1600
5 changed files with 84 additions and 10 deletions
@@ -77,6 +77,34 @@ class InventoryCommandServiceTest {
verify(operations).updateById(any(InventoryOperation.class));
}
@Test
void registersInTransitWithoutCreatingAPalletPosition() {
when(balances.lockDimension("100", "WH-1", "ONT8", 101L, "IN-CODE-1", "SKU-1")).thenReturn(null);
InventoryCommandResponse result = service.registerInTransit("100", "SYSTEM", inTransit("transit-1", 12));
assertEquals(0, result.availablePackages());
assertEquals(null, result.positionId());
ArgumentCaptor<InventoryBalance> balance = ArgumentCaptor.forClass(InventoryBalance.class);
verify(balances).updateById(balance.capture());
assertEquals(12L, balance.getValue().getInTransitPackages());
verify(positions, never()).insert(any(InventoryPosition.class));
verify(ledgers).insert(any(InventoryLedger.class));
}
@Test
void stockInTransfersPackagesFromInTransitToAvailable() {
InventoryBalance balance = balance(200L, 0);
balance.setInTransitPackages(12L);
when(balances.lockDimension("100", "WH-1", "ONT8", 101L, "IN-CODE-1", "SKU-1")).thenReturn(balance);
InventoryCommandResponse result = service.stockIn("100", "7", stockIn("IN-1", "stock-in-transit", 12, 24));
assertEquals(12, result.availablePackages());
assertEquals(0L, balance.getInTransitPackages());
assertEquals(12L, balance.getAvailablePackages());
}
@Test
void stockInAllowsPalletPositionWithZeroOptionalPackages() {
when(balances.lockDimension("100", "WH-1", "ONT8", 101L, "IN-CODE-1", "SKU-1")).thenReturn(null);
@@ -161,6 +189,12 @@ class InventoryCommandServiceTest {
packages, "ORD-1", "EVT-1", key, null);
}
private InventoryCommandRequests.InTransit inTransit(String key, long packages) {
return new InventoryCommandRequests.InTransit("Customer 100", "WH-1", "WH1", "Warehouse 1",
"DEST-1", "ONT8", "ONT8", 101L, "IN-1", "IN-CODE-1", "SKU-1", "Product 1", null,
packages, "ORD-1", "EVT-1", key, null);
}
private InventoryBalance balance(Long id, long available) {
InventoryBalance value = new InventoryBalance();
value.setId(id); value.setCustomerId("100"); value.setOverseasWarehouseId("WH-1");
@@ -50,6 +50,25 @@ class InventoryQueryServiceTest {
assertEquals(12, result.totalPackages());
}
@Test
void dashboardExcludesTransitAndProcurementFromOnHandAndDerivesAvailableFromHold() {
InventoryQueryRequests.BalanceQuery query = balanceQuery(null);
InventoryAggregateProjection aggregate = new InventoryAggregateProjection();
aggregate.setAvailablePackages(8L);
aggregate.setHoldPackages(2L);
aggregate.setAllocatedPackages(3L);
aggregate.setInTransitPackages(7L);
aggregate.setProcurementPackages(5L);
when(mapper.aggregate("100", query)).thenReturn(aggregate);
InventoryDashboardResponse result = service.dashboard("100", query);
assertEquals(13L, result.totalPackages());
assertEquals(11L, result.availablePackages());
assertEquals(7L, result.inTransitPackages());
assertEquals(5L, result.procurementPackages());
}
@Test
void balancePageIsBoundToRequestedTenant() {
InventoryQueryRequests.BalanceQuery query = balanceQuery(null);
@@ -65,6 +84,27 @@ class InventoryQueryServiceTest {
verify(mapper).balances("100", query, 0, 20);
}
@Test
void balanceViewUsesTheSameOnHandAndAvailableFormulaAsDashboard() {
InventoryQueryRequests.BalanceQuery query = balanceQuery(null);
InventoryBalance balance = new InventoryBalance();
balance.setId(1L);
balance.setCustomerId("100");
balance.setAvailablePackages(8L);
balance.setHoldPackages(2L);
balance.setAllocatedPackages(3L);
balance.setInTransitPackages(7L);
balance.setProcurementPackages(5L);
when(mapper.countBalances("100", query)).thenReturn(1L);
when(mapper.balances("100", query, 0, 20)).thenReturn(List.of(balance));
var result = service.balances("100", query).records().get(0);
assertEquals(13L, result.totalPackages());
assertEquals(11L, result.availablePackages());
assertEquals(7L, result.inTransitPackages());
}
@Test
void platformBalancePagePassesNoCustomerFilter() {
InventoryQueryRequests.BalanceQuery query = balanceQuery(null);