Test #1

Merged
admin merged 1726 commits from test into main 2026-09-17 11:52:45 +08:00
3 changed files with 17 additions and 4 deletions
Showing only changes of commit d786b88030 - Show all commits
@@ -41,7 +41,7 @@ public interface OrderDeclarationSyncMapper {
WHERE inbound.tenant_id=#{tenantId} AND inbound.order_id=#{orderId} AND inbound.deleted=0
ORDER BY inbound.created_at DESC,inbound.id DESC LIMIT 1 FOR UPDATE
""")
GateRow lockInbound(@Param("tenantId") long tenantId, @Param("orderId") long orderId);
InboundRow lockInbound(@Param("tenantId") long tenantId, @Param("orderId") long orderId);
@Select("SELECT tenant_id tenantId,order_id orderId,event_id eventId,order_version orderVersion,request_hash requestHash "
+ "FROM fl_order_declaration_snapshot WHERE tenant_id=#{tenantId} AND order_id=#{orderId} FOR UPDATE")
@@ -110,5 +110,7 @@ public interface OrderDeclarationSyncMapper {
record GateRow(Long inboundId, Long orderId, String orderNo, String inboundCode, String processStatus,
String channelCode, Integer incompatibleGroupCount, Integer splitCount,
Integer preloadCount, Integer pdaCount) {}
record InboundRow(Long inboundId, Long orderId, String orderNo, String inboundCode,
String processStatus, String channelCode) {}
record SnapshotRow(Long tenantId, Long orderId, String eventId, Integer orderVersion, String requestHash) {}
}
@@ -13,6 +13,12 @@ class OrderDeclarationSyncMapperContractTest {
@Test
void mapperIsExplicitAndProjectionUpdateCannotOverwriteOperationalFacts() throws Exception {
assertThat(OrderDeclarationSyncMapper.class).hasAnnotation(Mapper.class);
assertThat(OrderDeclarationSyncMapper.class
.getDeclaredMethod("lockInbound", long.class, long.class).getReturnType())
.isEqualTo(OrderDeclarationSyncMapper.InboundRow.class);
assertThat(OrderDeclarationSyncMapper.InboundRow.class.getRecordComponents())
.extracting(java.lang.reflect.RecordComponent::getName)
.containsExactly("inboundId", "orderId", "orderNo", "inboundCode", "processStatus", "channelCode");
String sql = String.join(" ", OrderDeclarationSyncMapper.class
.getDeclaredMethod("updateAllowedSnapshot", long.class, long.class, long.class, String.class,
String.class, String.class, java.time.LocalDateTime.class, String.class, String.class, long.class)
@@ -66,7 +66,7 @@ class OrderDeclarationSyncServiceTest {
@Test
void persistsVersionedDeclarationAndUpdatesOnlyAllowedInboundProjection() {
var event = event(4, "event-4");
when(mapper.lockInbound(10001L, 77L)).thenReturn(row("WAIT_MEASURE", null, null, null, null));
when(mapper.lockInbound(10001L, 77L)).thenReturn(inboundRow("WAIT_MEASURE"));
when(mapper.insertSnapshot(anyLong(), anyLong(), anyString(), anyInt(), anyString(), any(), any(),
anyString(), anyString(), anyString(), anyString(), any())).thenReturn(1);
when(mapper.insertConsumedEvent(anyLong(), anyString(), anyLong(), anyInt(), anyString())).thenReturn(1);
@@ -82,7 +82,7 @@ class OrderDeclarationSyncServiceTest {
@Test
void ignoresOlderVersionWithoutOverwritingCurrentProjection() {
var event = event(4, "event-4");
when(mapper.lockInbound(10001L, 77L)).thenReturn(row("WAIT_MEASURE", null, null, null, null));
when(mapper.lockInbound(10001L, 77L)).thenReturn(inboundRow("WAIT_MEASURE"));
when(mapper.lockSnapshot(10001L, 77L)).thenReturn(
new OrderDeclarationSyncMapper.SnapshotRow(10001L, 77L, "event-5", 5, "hash"));
when(mapper.insertConsumedEvent(anyLong(), anyString(), anyLong(), anyInt(), anyString())).thenReturn(1);
@@ -101,7 +101,7 @@ class OrderDeclarationSyncServiceTest {
var event = event(4, "event-4");
String hash = HexFormat.of().formatHex(MessageDigest.getInstance("SHA-256")
.digest(json.writeValueAsBytes(event)));
when(mapper.lockInbound(10001L, 77L)).thenReturn(row("WAIT_MEASURE", null, null, null, null));
when(mapper.lockInbound(10001L, 77L)).thenReturn(inboundRow("WAIT_MEASURE"));
when(mapper.byEvent(10001L, "event-4")).thenReturn(
new OrderDeclarationSyncMapper.SnapshotRow(10001L, 77L, "event-4", 4, hash));
@@ -118,6 +118,11 @@ class OrderDeclarationSyncServiceTest {
"MATSON_OLD", group, split, preload, pda);
}
private static OrderDeclarationSyncMapper.InboundRow inboundRow(String status) {
return new OrderDeclarationSyncMapper.InboundRow(
88L, 77L, "FL-77", "RK-77", status, "MATSON_OLD");
}
private static OrderDeclarationSync.UpdatedEvent event(int version, String eventId) {
var cargo = new OrderDeclarationSync.Cargo(1, "衣服", "clothes", "SKU-1", null, 2, 20,
new BigDecimal("10"), new BigDecimal("20"), new BigDecimal("30"), new BigDecimal("37"),