package com.baiyue.lastleg.service; import com.baiyue.lastleg.entity.LastlegEventOutbox; import com.baiyue.lastleg.entity.LastlegOrder; import com.baiyue.lastleg.mapper.LastlegEventOutboxMapper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.test.util.ReflectionTestUtils; import java.time.Instant; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) class InboundOrderDetainedOutboxServiceTest { @Mock private LastlegEventOutboxMapper mapper; private final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules(); private InboundOrderDetainedOutboxService service; @BeforeEach void setUp() { service = new InboundOrderDetainedOutboxService(); ReflectionTestUtils.setField(service, "mapper", mapper); ReflectionTestUtils.setField(service, "objectMapper", objectMapper); } @Test void localSyntheticSourceReferenceIsNotWrittenAsEventCausationId() throws Exception { LastlegOrder order = new LastlegOrder(); order.setId(101L); order.setCustomerId("201"); order.setOrderNo("WT-WH-20260907-972865"); order.setSourceInboundId("WAREHOUSE_TRANSFER:WT-WH-20260907-778561"); order.setInboundCode("NYEXX2609070253"); order.setSourceEventId("WAREHOUSE_TRANSFER:WT-WH-20260907-778561"); service.publish(order, true, "等待质检", "301", "operator", Instant.parse("2026-09-07T16:00:00Z"), 1L); ArgumentCaptor captor = ArgumentCaptor.forClass(LastlegEventOutbox.class); verify(mapper).insert(captor.capture()); JsonNode envelope = objectMapper.readTree(captor.getValue().getPayloadJson()); assertThat(envelope.path("causationId").isNull()).isTrue(); assertThat(envelope.path("aggregateId").asText()).isEqualTo(order.getSourceInboundId()); } }