feat(procurement): implement sample fulfillment and settled fee workflow
This commit is contained in:
+48
@@ -0,0 +1,48 @@
|
||||
package com.baiyue.lastleg.financefee.service;
|
||||
|
||||
import com.baiyue.common.event.WalletSettlementReference;
|
||||
import com.baiyue.lastleg.financefee.dto.OverseasFeeSourceDtos.SaveRequest;
|
||||
import com.baiyue.lastleg.financefee.entity.OverseasFeeSource;
|
||||
import com.baiyue.lastleg.financefee.mapper.OverseasFeeCommandMapper;
|
||||
import com.baiyue.lastleg.financefee.mapper.OverseasFeeSourceMapper;
|
||||
import com.baiyue.lastleg.financefee.state.OverseasFeeCancellation;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
class ProcurementSettledFeeSourceTest {
|
||||
@Test
|
||||
void publishesActualFeeUsingConfirmedFxAndConsumptionReference() {
|
||||
var mapper = mock(OverseasFeeSourceMapper.class);
|
||||
var outbox = mock(OverseasFeeOutboxService.class);
|
||||
var converter = mock(OverseasFeeCurrencyConverter.class);
|
||||
var service = new OverseasFeeSourceService(mapper, mock(OverseasFeeCommandMapper.class),
|
||||
mock(OverseasFeeBusinessGuard.class), outbox, converter, new ObjectMapper().findAndRegisterModules(),
|
||||
mock(OverseasFeeCancellation.class));
|
||||
SaveRequest fee = new SaveRequest("9", "customer", "OVERSEAS_PROCUREMENT_FEE", "PROCUREMENT_FEE", 11L,
|
||||
"PF-1", 12L, null, null, null, null, null, null, "SAMPLE_PAYMENT", "样品货款", "RECEIVABLE",
|
||||
null, null, null, null, null, null, null, List.of(), LocalDate.of(2026, 10, 9), "USD",
|
||||
new BigDecimal("10.00"), BigDecimal.ONE, "ITEM", new BigDecimal("10.00"), null, null);
|
||||
assertThatThrownBy(() -> service.create("7", "manual-source", fee)).hasMessageContaining("采购费用必须通过");
|
||||
assertThatThrownBy(() -> service.publishApproved("7", "manual-approved", fee)).hasMessageContaining("采购费用必须通过");
|
||||
verifyNoInteractions(mapper,outbox,converter);
|
||||
var conversion = new OverseasFeeCurrencyConverter.Conversion("USD", new BigDecimal("10.00"),
|
||||
new BigDecimal("7.200000"), "2026-10", new BigDecimal("72.00"));
|
||||
var reference = new WalletSettlementReference("command-1", "1", "2");
|
||||
OverseasFeeSource result = service.publishSettled("7", "source-1", fee, conversion, reference);
|
||||
assertThat(result.getAmount()).isEqualByComparingTo("72");
|
||||
assertThat(result.getWalletSettlement()).isEqualTo(reference);
|
||||
assertThat(result.getReviewStatus()).isEqualTo("APPROVED");
|
||||
assertThat(result.getPublicationStatus()).isEqualTo("PUBLISHED");
|
||||
verify(outbox).publish(result, "PUBLISHED");
|
||||
verify(mapper).insert(result);
|
||||
verifyNoInteractions(converter);
|
||||
assertThatThrownBy(() -> service.publishSettled("7", "source-2", fee, conversion, null))
|
||||
.hasMessageContaining("快照不完整");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user