fix: carry partial dropship measurements to outbound

This commit is contained in:
2026-09-18 15:23:36 +08:00
parent c8a99f9fff
commit 98d15c30bb
7 changed files with 127 additions and 11 deletions
@@ -203,6 +203,32 @@ class LoadingCompletedOutboxServiceTest {
.isEqualTo(second.payload().at("/orders/0/items/0/cartonMarks"));
}
@Test void publishesOnlyTheActuallyLoadedFragmentMeasurements() throws Exception {
Row loadedFragment = row(11, 100, 101);
loadedFragment.setPackageCount(4);
loadedFragment.setGrossWeightKg(new BigDecimal("40"));
loadedFragment.setNetWeightKg(new BigDecimal("36"));
loadedFragment.setDimensionalWeightKg(new BigDecimal("80"));
loadedFragment.setVolumeCbm(new BigDecimal("4"));
when(snapshots.rows(90L)).thenReturn(List.of(loadedFragment));
when(manifests.labelPool(11L, 100L)).thenReturn(List.of(
label(101, "BOX-001"), label(101, "BOX-002"),
label(101, "BOX-003"), label(101, "BOX-004")));
service.publish(90L);
ArgumentCaptor<InboundOutboxEntity> captor = ArgumentCaptor.forClass(InboundOutboxEntity.class);
verify(outbox).insert(captor.capture());
EventEnvelope event = mapper.readValue(captor.getValue().getPayloadJson(), EventEnvelope.class);
assertThat(event.payload().at("/orders/0/packageCount").asInt()).isEqualTo(4);
assertThat(event.payload().at("/orders/0/grossWeightKg").decimalValue()).isEqualByComparingTo("40");
assertThat(event.payload().at("/orders/0/volumeWeightKg").decimalValue()).isEqualByComparingTo("80");
assertThat(event.payload().at("/orders/0/volumeCbm").decimalValue()).isEqualByComparingTo("4");
assertThat(event.payload().at("/orders/0/items/0/packageCount").asInt()).isEqualTo(4);
assertThat(event.payload().at("/orders/0/items/0/grossWeightKg").decimalValue()).isEqualByComparingTo("40");
assertThat(event.payload().at("/orders/0/items/0/volumeCbm").decimalValue()).isEqualByComparingTo("4");
}
@Test void immutableCustomerNameParticipatesInPayloadHash() {
Row value = row(11, 100, 101);
when(snapshots.rows(90L)).thenReturn(List.of(value));