package com.tourguide.modules.finance.service;
|
|
import com.tourguide.common.exception.BusinessException;
|
import com.tourguide.common.huifu.biz.DouGongBasicDataBiz;
|
import com.tourguide.modules.finance.dto.GuideElectronicLedgerRequest;
|
import com.tourguide.modules.finance.dto.GuideElectronicLedgerResponse;
|
import com.tourguide.modules.finance.dto.GuideElectronicLedgerStatusResponse;
|
import com.tourguide.modules.finance.entity.GuideWithdrawalAccount;
|
import com.tourguide.modules.finance.mapper.GuideWithdrawalAccountMapper;
|
import com.tourguide.modules.user.entity.GuideUser;
|
import com.tourguide.modules.user.service.GuideUserService;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.Mockito.doAnswer;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class GuideElectronicLedgerServiceTest {
|
private GuideWithdrawalAccountMapper accountMapper;
|
private GuideUserService guideUserService;
|
private DouGongBasicDataBiz douGongBasicDataBiz;
|
private GuideElectronicLedgerService service;
|
|
@BeforeEach
|
void setUp() {
|
accountMapper = mock(GuideWithdrawalAccountMapper.class);
|
guideUserService = mock(GuideUserService.class);
|
douGongBasicDataBiz = mock(DouGongBasicDataBiz.class);
|
service = new GuideElectronicLedgerService(accountMapper, guideUserService, douGongBasicDataBiz);
|
}
|
|
@Test
|
void createShouldPersistSuccessfulDouGongOnboarding() throws Exception {
|
GuideUser guide = new GuideUser();
|
guide.setId(8L);
|
guide.setMobile("13800138000");
|
when(guideUserService.findEnabledById(8L)).thenReturn(guide);
|
when(accountMapper.selectOne(any())).thenReturn(null);
|
doAnswer(invocation -> {
|
GuideWithdrawalAccount account = invocation.getArgument(0);
|
account.setId(10);
|
return 1;
|
}).when(accountMapper).insert(any(GuideWithdrawalAccount.class));
|
when(douGongBasicDataBiz.userBasicDataIndv(any())).thenReturn(success("huifu_id", "HF100"));
|
when(douGongBasicDataBiz.userBusinessOpen(any())).thenReturn(success("token_no", "TOKEN100"));
|
|
GuideElectronicLedgerResponse response = service.create(8L, request());
|
|
assertThat(response.getHuifuId()).isEqualTo("HF100");
|
assertThat(response.getApplicationStatus()).isEqualTo("submitted");
|
verify(accountMapper).insert(any(GuideWithdrawalAccount.class));
|
verify(accountMapper, org.mockito.Mockito.atLeastOnce()).updateById(any(GuideWithdrawalAccount.class));
|
}
|
|
@Test
|
void statusShouldRequireOnboardingWhenAccountDoesNotExist() {
|
GuideUser guide = new GuideUser();
|
guide.setId(8L);
|
when(guideUserService.findEnabledById(8L)).thenReturn(guide);
|
when(accountMapper.selectOne(any())).thenReturn(null);
|
|
GuideElectronicLedgerStatusResponse response = service.status(8L);
|
|
assertThat(response.isExists()).isFalse();
|
assertThat(response.isRequiresOnboarding()).isTrue();
|
}
|
|
@Test
|
void createShouldPersistFailureReasonWhenDouGongRejectsRequest() throws Exception {
|
GuideUser guide = new GuideUser();
|
guide.setId(8L);
|
when(guideUserService.findEnabledById(8L)).thenReturn(guide);
|
when(accountMapper.selectOne(any())).thenReturn(null);
|
doAnswer(invocation -> {
|
GuideWithdrawalAccount account = invocation.getArgument(0);
|
account.setId(10);
|
return 1;
|
}).when(accountMapper).insert(any(GuideWithdrawalAccount.class));
|
Map<String, Object> rejected = new HashMap<String, Object>();
|
rejected.put("resp_code", "10000001");
|
rejected.put("resp_desc", "银行卡信息不正确");
|
when(douGongBasicDataBiz.userBasicDataIndv(any())).thenReturn(rejected);
|
|
assertThatThrownBy(() -> service.create(8L, request()))
|
.isInstanceOf(BusinessException.class)
|
.hasMessage("银行卡信息不正确");
|
verify(accountMapper, org.mockito.Mockito.atLeastOnce()).updateById(any(GuideWithdrawalAccount.class));
|
}
|
|
private GuideElectronicLedgerRequest request() {
|
GuideElectronicLedgerRequest request = new GuideElectronicLedgerRequest();
|
request.setCertificateName("张三");
|
request.setCertificateCode("510000199001010000");
|
request.setCertificateExpireTime("2020-01-01,长期");
|
request.setBankName("中国银行");
|
request.setBankCardCode("6217000000000000000");
|
request.setOpenAccountName("张三");
|
request.setPhone("13800138000");
|
request.setIdCardFrontPicture("front-media-id");
|
request.setIdCardReversePicture("back-media-id");
|
request.setBankCardProvinceCode("320000");
|
request.setBankCardCityCode("320100");
|
return request;
|
}
|
|
private Map<String, Object> success(String key, String value) {
|
Map<String, Object> result = new HashMap<String, Object>();
|
result.put("resp_code", "00000000");
|
result.put(key, value);
|
return result;
|
}
|
}
|