Files
loan-pricing/ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/LoanPricingModelServicePersonalParamsTest.java
2026-08-24 12:31:08 +08:00

124 lines
5.1 KiB
Java

package com.ruoyi.loanpricing.service;
import com.ruoyi.loanpricing.domain.dto.ModelInvokeDTO;
import com.ruoyi.loanpricing.domain.dto.PersonalLoanPricingCreateDTO;
import com.ruoyi.loanpricing.domain.entity.LoanPricingWorkflow;
import com.ruoyi.loanpricing.domain.entity.ModelRetailOutputFields;
import com.ruoyi.loanpricing.mapper.LoanPricingWorkflowMapper;
import com.ruoyi.loanpricing.mapper.ModelCorpOutputFieldsMapper;
import com.ruoyi.loanpricing.mapper.ModelRetailOutputFieldsMapper;
import com.ruoyi.loanpricing.util.LoanPricingConverter;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Objects;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class LoanPricingModelServicePersonalParamsTest {
@Mock
private ModelService modelService;
@Mock
private LoanPricingWorkflowMapper loanPricingWorkflowMapper;
@Mock
private ModelRetailOutputFieldsMapper modelRetailOutputFieldsMapper;
@Mock
private ModelCorpOutputFieldsMapper modelCorpOutputFieldsMapper;
@InjectMocks
private LoanPricingModelService loanPricingModelService;
@Test
void shouldRemoveLoanPurposeAndKeepPersonalModelFieldsInCreateDto() throws NoSuchFieldException {
assertThrows(NoSuchFieldException.class,
() -> PersonalLoanPricingCreateDTO.class.getDeclaredField("loanPurpose"));
assertNotNull(PersonalLoanPricingCreateDTO.class.getDeclaredField("bizProof"));
assertNotNull(PersonalLoanPricingCreateDTO.class.getDeclaredField("loanTerm"));
}
@Test
void shouldMapBizProofButNotLoanPurposeFromPersonalDto() {
PersonalLoanPricingCreateDTO dto = new PersonalLoanPricingCreateDTO();
dto.setCustIsn("CUST001");
dto.setCustName("张三");
dto.setGuarType("信用");
dto.setApplyAmt("100000");
dto.setBusinessType("新增");
dto.setLoanTerm("3");
dto.setBizProof("1");
LoanPricingWorkflow workflow = LoanPricingConverter.toEntity(dto);
assertNull(workflow.getLoanPurpose());
assertEquals("1", workflow.getBizProof());
assertEquals("3", workflow.getLoanTerm());
}
@Test
void shouldContainLoanTermAndLoanLoopInModelInvokeDto() throws NoSuchFieldException {
assertNotNull(ModelInvokeDTO.class.getDeclaredField("loanTerm"));
assertNotNull(ModelInvokeDTO.class.getDeclaredField("loanLoop"));
}
@Test
void shouldInvokePersonalModelWithExpectedParams() {
LoanPricingWorkflow workflow = new LoanPricingWorkflow();
workflow.setId(1L);
workflow.setSerialNum("202604090001");
workflow.setOrgCode("892000");
workflow.setRunType("1");
workflow.setCustIsn("CUST001");
workflow.setCustType("个人");
workflow.setCustName("张三");
workflow.setIdType("身份证");
workflow.setIdNum("110101199001011234");
workflow.setGuarType("信用");
workflow.setApplyAmt("100000");
workflow.setLoanTerm("3");
workflow.setBizProof("true");
workflow.setLoanLoop("false");
workflow.setCollThirdParty("true");
workflow.setCollType("一类");
ModelRetailOutputFields response = new ModelRetailOutputFields();
response.setCalculateRate("6.15");
when(loanPricingWorkflowMapper.selectById(1L)).thenReturn(workflow);
when(modelService.invokePersonalModel(any())).thenReturn(response);
loanPricingModelService.invokeModelAsync(1L);
verify(modelService).invokePersonalModel(argThat((ModelInvokeDTO dto) ->
Objects.equals("202604090001", dto.getSerialNum())
&& Objects.equals("892000", dto.getOrgCode())
&& Objects.equals("1", dto.getRunType())
&& Objects.equals("CUST001", dto.getCustIsn())
&& Objects.equals("个人", dto.getCustType())
&& Objects.equals("张三", dto.getCustName())
&& Objects.equals("身份证", dto.getIdType())
&& Objects.equals("110101199001011234", dto.getIdNum())
&& Objects.equals("信用", dto.getGuarType())
&& Objects.equals("100000", dto.getApplyAmt())
&& Objects.equals("3", dto.getLoanTerm())
&& Objects.equals("1", dto.getBizProof())
&& Objects.equals("0", dto.getLoanLoop())
&& Objects.equals("1", dto.getCollThirdParty())
&& Objects.equals("一类", dto.getCollType())));
}
}