完善财务费用来源与柜级分摊
This commit is contained in:
+56
@@ -0,0 +1,56 @@
|
||||
package com.baiyue.lastleg.financefee.service;
|
||||
|
||||
import com.baiyue.common.event.BusinessFeeSourceChangedV1;
|
||||
import com.baiyue.common.event.EventEnvelope;
|
||||
import com.baiyue.lastleg.entity.LastlegEventOutbox;
|
||||
import com.baiyue.lastleg.financefee.entity.OverseasFeeSource;
|
||||
import com.baiyue.lastleg.mapper.LastlegEventOutboxMapper;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class OverseasFeeOutboxServiceTest {
|
||||
private final LastlegEventOutboxMapper mapper = mock(LastlegEventOutboxMapper.class);
|
||||
private final ObjectMapper json = new ObjectMapper().findAndRegisterModules();
|
||||
private final OverseasFeeOutboxService service = new OverseasFeeOutboxService();
|
||||
|
||||
@Test
|
||||
void publishesCompleteFeeSnapshotWithOptionalInboundReference() throws Exception {
|
||||
ReflectionTestUtils.setField(service, "mapper", mapper);
|
||||
ReflectionTestUtils.setField(service, "objectMapper", json);
|
||||
when(mapper.findByEventKey(anyString())).thenReturn(null);
|
||||
OverseasFeeSource source = new OverseasFeeSource();
|
||||
source.setSourceFeeId(701L); source.setSourceVersion(1); source.setCustomerId("10001");
|
||||
source.setCustomerName("客户A"); source.setSourceType("OVERSEAS_PROCUREMENT_FEE");
|
||||
source.setSourceNo("PO-US-001"); source.setBusinessType("OVERSEAS_PROCUREMENT");
|
||||
source.setBusinessId(801L); source.setBusinessNo("PO-US-001"); source.setWarehouseId(91L);
|
||||
source.setFeeItemCode("PROCUREMENT_SERVICE"); source.setFeeItemName("采购服务费");
|
||||
source.setDirection("RECEIVABLE"); source.setBusinessDate(LocalDate.of(2026, 9, 2));
|
||||
source.setCurrency("CNY"); source.setAmount(new BigDecimal("120.00"));
|
||||
source.setReviewStatus("APPROVED"); source.setPublicationStatus("PUBLISHED");
|
||||
source.setSourceStatus("ACTIVE"); source.setPaymentVoucherFileIds(List.of());
|
||||
|
||||
service.publish(source, "PUBLISHED");
|
||||
|
||||
ArgumentCaptor<LastlegEventOutbox> row = ArgumentCaptor.forClass(LastlegEventOutbox.class);
|
||||
verify(mapper).insert(row.capture());
|
||||
EventEnvelope envelope = json.readValue(row.getValue().getPayloadJson(), EventEnvelope.class).requireValid();
|
||||
BusinessFeeSourceChangedV1 payload = json.treeToValue(envelope.payload(), BusinessFeeSourceChangedV1.class);
|
||||
assertThat(payload.customerId()).isEqualTo("10001");
|
||||
assertThat(payload.businessNo()).isEqualTo("PO-US-001");
|
||||
assertThat(payload.inboundId()).isNull();
|
||||
assertThat(payload.inboundCode()).isNull();
|
||||
assertThat(payload.sourceHash()).startsWith("sha256:").hasSize(71);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user