package com.tourguide.modules.user.service;
|
|
import com.tourguide.modules.operation.entity.OperationCity;
|
import com.tourguide.modules.operation.mapper.OperationCityMapper;
|
import com.tourguide.modules.user.dto.GuideRegistrationResponse;
|
import com.tourguide.modules.user.dto.GuideRegistrationSubmitRequest;
|
import com.tourguide.modules.user.entity.GuideApplication;
|
import com.tourguide.modules.user.mapper.GuideApplicationMapper;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.ValueOperations;
|
|
import java.time.LocalDate;
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
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 GuideRegistrationServiceTest {
|
private StringRedisTemplate redisTemplate;
|
private ValueOperations<String, String> valueOperations;
|
private GuideApplicationMapper applicationMapper;
|
private GuideRegistrationService service;
|
|
@SuppressWarnings("unchecked")
|
@BeforeEach
|
void setUp() {
|
redisTemplate = mock(StringRedisTemplate.class);
|
valueOperations = mock(ValueOperations.class);
|
applicationMapper = mock(GuideApplicationMapper.class);
|
when(redisTemplate.opsForValue()).thenReturn(valueOperations);
|
when(valueOperations.get("tourguide:guide-registration:token:registration-token"))
|
.thenReturn("13800138000");
|
when(applicationMapper.selectCount(any())).thenReturn(0L);
|
|
GuideUserService guideUserService = mock(GuideUserService.class);
|
when(guideUserService.findByPhone("13800138000")).thenReturn(null);
|
OperationCityMapper cityMapper = mock(OperationCityMapper.class);
|
OperationCity city = new OperationCity();
|
city.setId(1L);
|
city.setCityName("成都市");
|
city.setStatus(1);
|
when(cityMapper.selectById(1L)).thenReturn(city);
|
doAnswer(invocation -> {
|
GuideApplication application = invocation.getArgument(0);
|
application.setId(10L);
|
return 1;
|
}).when(applicationMapper).insert(any(GuideApplication.class));
|
|
service = new GuideRegistrationService(
|
mock(GuideVerificationCodeService.class), redisTemplate, applicationMapper,
|
guideUserService, cityMapper);
|
}
|
|
@Test
|
void shouldCreatePendingApplicationAndConsumeToken() {
|
GuideRegistrationSubmitRequest request = new GuideRegistrationSubmitRequest();
|
request.setRealName("张导游");
|
request.setGender(1);
|
request.setAgeRange("26-35岁");
|
request.setWorkYearRange("3-5年");
|
request.setGuideType("personal");
|
request.setIdCardNo("11010519491231002X");
|
request.setIdCardFrontUrl("/uploads/guide-applications/front.jpg");
|
request.setIdCardBackUrl("/uploads/guide-applications/back.jpg");
|
request.setGuideCertificateUrl("/uploads/guide-applications/guide.jpg");
|
request.setCertificateValidUntil(LocalDate.now().plusYears(1));
|
request.setBankCardNo("6222021234567890123");
|
request.setBankCityId(1L);
|
|
GuideRegistrationResponse response = service.submit("registration-token", request);
|
|
assertThat(response.getId()).isEqualTo(10L);
|
assertThat(response.getAuditStatus()).isEqualTo("pending");
|
verify(applicationMapper).insert(any(GuideApplication.class));
|
verify(redisTemplate).delete("tourguide:guide-registration:token:registration-token");
|
}
|
}
|