feat(procurement): implement sample fulfillment and settled fee workflow
This commit is contained in:
+40
@@ -0,0 +1,40 @@
|
||||
package com.baiyue.lastleg.procurement;
|
||||
|
||||
import com.baiyue.lastleg.procurement.dto.OverseasProcurementRequests;
|
||||
import com.baiyue.lastleg.procurement.dto.OverseasProcurementResponses.*;
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
|
||||
class ProcurementRequestBoundaryTest {
|
||||
@Test void missingCommandVersionCannotDefaultToZero() throws Exception {
|
||||
var json=new ObjectMapper().findAndRegisterModules();
|
||||
try(var factory=jakarta.validation.Validation.buildDefaultValidatorFactory()) {
|
||||
var validator=factory.getValidator();
|
||||
for(var type:List.of(com.baiyue.lastleg.procurement.dto.ProcurementLifecycleRequests.Command.class,
|
||||
com.baiyue.lastleg.procurement.dto.ProcurementLifecycleRequests.Purchase.class,
|
||||
com.baiyue.lastleg.procurement.dto.ProcurementLifecycleRequests.Budget.class,
|
||||
com.baiyue.lastleg.procurement.dto.ProcurementLifecycleRequests.Warehouse.class)) {
|
||||
assertThat(validator.validate(json.readValue("{}",type))).anyMatch(v->"version".equals(v.getPropertyPath().toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@Test void legacyGenericFieldsCannotSilentlyBypassDedicatedNodes() {
|
||||
var json=new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
|
||||
for(String field:List.of("inboundQuantity","outboundDetails","productName","purchaseWarehouseId","domesticTrackingNo")) {
|
||||
assertThatThrownBy(()->json.readValue("{\"version\":0,\""+field+"\":null}",OverseasProcurementRequests.Update.class))
|
||||
.hasMessageContaining("采购通用编辑仅支持备注");
|
||||
}
|
||||
}
|
||||
|
||||
@Test void customerProjectionExcludesInternalFilesAndFinancialDiagnostics() throws Exception {
|
||||
var fee=new com.baiyue.lastleg.procurement.entity.OverseasProcurementFee();
|
||||
fee.setFeeNo("PF-1");fee.setFeeItemName("关税");fee.setAmount(BigDecimal.TEN);fee.setCurrency("CNY");fee.setWalletStatus("FREEZE_FAILED");
|
||||
fee.setVoucherFileId(2L);fee.setVoucherFileName("private.pdf");fee.setWalletErrorMessage("database error");fee.setRemark("internal note");fee.setCreatedBy("operator");fee.setWalletLedgerId("private-ledger");
|
||||
var output=new ObjectMapper().writeValueAsString(com.baiyue.lastleg.procurement.service.ProcurementQueryService.CustomerFee.from(fee,null,false));
|
||||
assertThat(output).contains("PF-1","FREEZE_FAILED").doesNotContain("private.pdf","voucherFileId","internal note","database error","operator","private-ledger");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user