优化
This commit is contained in:
+77
@@ -0,0 +1,77 @@
|
||||
package com.baiyue.firstleg.portschedule.service;
|
||||
|
||||
import com.baiyue.common.event.EventEnvelope;
|
||||
import com.baiyue.common.event.EventTypes;
|
||||
import com.baiyue.firstleg.entity.InboundOutboxEntity;
|
||||
import com.baiyue.firstleg.mapper.InboundOutboxMapper;
|
||||
import com.baiyue.firstleg.portschedule.entity.CarrierScheduleNodeFactEntity;
|
||||
import com.baiyue.firstleg.portschedule.entity.CarrierScheduleQueryEntity;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
class CarrierScheduleNodeOutboxServiceTest {
|
||||
private final InboundOutboxMapper mapper = mock(InboundOutboxMapper.class);
|
||||
private final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules();
|
||||
private final CarrierScheduleNodeOutboxService service = new CarrierScheduleNodeOutboxService();
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
ReflectionTestUtils.setField(service, "outbox", mapper);
|
||||
ReflectionTestUtils.setField(service, "objectMapper", objectMapper);
|
||||
ReflectionTestUtils.setField(service, "scheduleZone", "Asia/Shanghai");
|
||||
}
|
||||
|
||||
@Test
|
||||
void writesVersionedActualPickupReadyEnvelopeWithStringIds() throws Exception {
|
||||
CarrierScheduleQueryEntity query = query();
|
||||
CarrierScheduleNodeFactEntity fact = fact();
|
||||
|
||||
service.publish(query, fact, "ZCSU7881970");
|
||||
|
||||
ArgumentCaptor<InboundOutboxEntity> captor = ArgumentCaptor.forClass(InboundOutboxEntity.class);
|
||||
verify(mapper).insert(captor.capture());
|
||||
InboundOutboxEntity row = captor.getValue();
|
||||
EventEnvelope envelope = objectMapper.readValue(row.getPayloadJson(), EventEnvelope.class);
|
||||
assertThat(row.getEventType()).isEqualTo(EventTypes.FIRST_LEG_CONTAINER_SHIPPING_NODE_RECORDED);
|
||||
assertThat(envelope.eventVersion()).isEqualTo(1);
|
||||
assertThat(envelope.aggregateType()).isEqualTo("CONTAINER_BOOKING");
|
||||
assertThat(envelope.aggregateId()).isEqualTo("2088000000000000003");
|
||||
assertThat(envelope.aggregateVersion()).isEqualTo(7);
|
||||
assertThat(envelope.handoverVersion()).isEqualTo(8);
|
||||
assertThat(envelope.payload().path("standardNode").asText()).isEqualTo("PICKUP_READY");
|
||||
assertThat(envelope.payload().path("actualAt").asText()).isEqualTo("2026-08-25T01:00:00Z");
|
||||
}
|
||||
|
||||
@Test
|
||||
void estimatedOnlyFactNeverEntersCrossRegionOutbox() {
|
||||
CarrierScheduleNodeFactEntity fact = fact(); fact.setActualAt(null);
|
||||
service.publish(query(), fact, "ZCSU7881970");
|
||||
verify(mapper, never()).insert(org.mockito.ArgumentMatchers.any());
|
||||
}
|
||||
|
||||
private static CarrierScheduleQueryEntity query() {
|
||||
CarrierScheduleQueryEntity value = new CarrierScheduleQueryEntity();
|
||||
value.setId(2088000000000000001L); value.setCustomerId(2088000000000000002L);
|
||||
value.setContainerBookingId(2088000000000000003L); value.setOceanBookingId(2088000000000000004L);
|
||||
value.setVersion(7); return value;
|
||||
}
|
||||
|
||||
private static CarrierScheduleNodeFactEntity fact() {
|
||||
CarrierScheduleNodeFactEntity value = new CarrierScheduleNodeFactEntity();
|
||||
value.setId(2088000000000000005L); value.setStandardNode("PICKUP_READY"); value.setNodeSequence(80);
|
||||
value.setObservedAt(LocalDateTime.of(2026, 8, 25, 9, 2));
|
||||
value.setActualAt(LocalDateTime.of(2026, 8, 25, 9, 0)); value.setProviderCode("ZIM");
|
||||
value.setProviderEventId("evt-1"); value.setProviderNodeCode("AVAILABLE");
|
||||
value.setSourceReference("ZIM:evt-1"); value.setRawPayloadHash("a".repeat(64)); return value;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user