|
@@ -0,0 +1,683 @@
|
|
|
+package com.hfln.portal.application.controller.wap;
|
|
|
+
|
|
|
+import cn.hfln.framework.dto.ApiResult;
|
|
|
+import cn.hfln.framework.extension.BizException;
|
|
|
+import com.hfln.portal.common.dto.data.user.UserDto;
|
|
|
+import com.hfln.portal.common.request.user.*;
|
|
|
+import com.hfln.portal.common.response.user.UserInfoWxRes;
|
|
|
+import com.hfln.portal.domain.exception.ErrorEnum;
|
|
|
+import com.hfln.portal.domain.gateway.UserGateway;
|
|
|
+import com.hfln.portal.domain.gateway.sms.SmsGateway;
|
|
|
+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 org.springframework.test.util.ReflectionTestUtils;
|
|
|
+
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import static org.junit.jupiter.api.Assertions.*;
|
|
|
+import static org.mockito.ArgumentMatchers.any;
|
|
|
+import static org.mockito.ArgumentMatchers.anyString;
|
|
|
+import static org.mockito.Mockito.*;
|
|
|
+
|
|
|
+@ExtendWith(MockitoExtension.class)
|
|
|
+class UserControllerTest {
|
|
|
+
|
|
|
+ // 常量定义
|
|
|
+ private static final String SUCCESS_CODE = "200";
|
|
|
+ private static final String TEST_PHONE = "13800138000";
|
|
|
+ private static final String TEST_OPENID = "test_open_id";
|
|
|
+ private static final String TEST_UNIONID = "test_union_id";
|
|
|
+ private static final String TEST_PASSWORD = "password123";
|
|
|
+ private static final String TEST_SMS_CODE = "123456";
|
|
|
+ private static final String EXPECTED_OPENID_FAIL_MSG = "获取openId失败!";
|
|
|
+ private static final String EXPECTED_LOGIN_FAIL_MSG = "登录失败";
|
|
|
+ private static final String EXPECTED_SMS_SUCCESS_MSG = "发送短信验证码成功!";
|
|
|
+ private static final String EXPECTED_SMS_FAIL_MSG = "发送短信验证码失败!";
|
|
|
+ private static final String EXPECTED_SIGNUP_SUCCESS_MSG = "注册成功!";
|
|
|
+ private static final String EXPECTED_SIGNUP_FAIL_MSG = "注册失败!";
|
|
|
+ private static final String EXPECTED_WX_LOGIN_FAIL_MSG = "微信登录失败!";
|
|
|
+ private static final String EXPECTED_LOGIN_SUCCESS_MSG = "登录成功";
|
|
|
+
|
|
|
+ @Mock
|
|
|
+ private UserGateway userGateway;
|
|
|
+
|
|
|
+ @Mock
|
|
|
+ private SmsGateway smsGateway;
|
|
|
+
|
|
|
+ @InjectMocks
|
|
|
+ private UserController userController;
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void queryForOpenId_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ String testCode = "testCode";
|
|
|
+ String expectedOpenId = TEST_OPENID;
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.getOpenId(testCode)).thenReturn(expectedOpenId);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<String> result = userController.queryForOpenId(testCode);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).getOpenId(testCode);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(expectedOpenId, ReflectionTestUtils.getField(result, "data"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void queryForOpenId_Failed() {
|
|
|
+ // 准备测试数据
|
|
|
+ String testCode = "invalidCode";
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.getOpenId(testCode)).thenReturn("");
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<String> result = userController.queryForOpenId(testCode);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).getOpenId(testCode);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertNotEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(EXPECTED_OPENID_FAIL_MSG, ReflectionTestUtils.getField(result, "message"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void queryForOpenId_Exception() {
|
|
|
+ // 准备测试数据
|
|
|
+ String testCode = "exceptionCode";
|
|
|
+
|
|
|
+ // 模拟UserGateway抛出异常
|
|
|
+ when(userGateway.getOpenId(testCode)).thenThrow(new BizException(ErrorEnum.WECHAT_CODE_ISNULL.getErrorCode(), ErrorEnum.WECHAT_CODE_ISNULL.getErrorMessage()));
|
|
|
+
|
|
|
+ // 执行测试 - 验证异常被正确传播
|
|
|
+ assertThrows(BizException.class, () -> userController.queryForOpenId(testCode));
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).getOpenId(testCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void loginWx_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ String testCode = "validWxCode";
|
|
|
+ UserInfoWxRes expectedUserInfo = createTestUserInfoWxRes();
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.loginWx(testCode)).thenReturn(expectedUserInfo);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<UserInfoWxRes> result = userController.loginWx(testCode);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).loginWx(testCode);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+
|
|
|
+ UserInfoWxRes resultData = (UserInfoWxRes) ReflectionTestUtils.getField(result, "data");
|
|
|
+ assertNotNull(resultData);
|
|
|
+ assertEquals(expectedUserInfo.getOpenId(), resultData.getOpenId());
|
|
|
+ assertEquals(expectedUserInfo.getUnionId(), resultData.getUnionId());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void loginWx_Failed() {
|
|
|
+ // 准备测试数据
|
|
|
+ String testCode = "invalidWxCode";
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.loginWx(testCode)).thenReturn(null);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<UserInfoWxRes> result = userController.loginWx(testCode);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).loginWx(testCode);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertNotEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(EXPECTED_WX_LOGIN_FAIL_MSG, ReflectionTestUtils.getField(result, "message"));
|
|
|
+ assertNull(ReflectionTestUtils.getField(result, "data"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void loginWx_Exception() {
|
|
|
+ // 准备测试数据
|
|
|
+ String testCode = "exceptionCode";
|
|
|
+
|
|
|
+ // 模拟UserGateway抛出异常
|
|
|
+ when(userGateway.loginWx(testCode)).thenThrow(new BizException(ErrorEnum.WECHAT_INTERFACE_CALL_EXCEPTION.getErrorCode(), ErrorEnum.WECHAT_INTERFACE_CALL_EXCEPTION.getErrorMessage()));
|
|
|
+
|
|
|
+ // 执行测试 - 验证异常被正确传播
|
|
|
+ assertThrows(BizException.class, () -> userController.loginWx(testCode));
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).loginWx(testCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void loginByPhone_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ PhoneLoginParams params = createTestPhoneLoginParams(TEST_PHONE, TEST_OPENID, TEST_UNIONID);
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.loginByPhone(params)).thenReturn(true);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<String> result = userController.loginByPhone(params);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).loginByPhone(params);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(EXPECTED_LOGIN_SUCCESS_MSG, ReflectionTestUtils.getField(result, "data"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void loginByPhone_Failed() {
|
|
|
+ // 准备测试数据
|
|
|
+ PhoneLoginParams params = createTestPhoneLoginParams(TEST_PHONE, "invalid_open_id", TEST_UNIONID);
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.loginByPhone(params)).thenReturn(false);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<String> result = userController.loginByPhone(params);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).loginByPhone(params);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertNotEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(EXPECTED_LOGIN_FAIL_MSG, ReflectionTestUtils.getField(result, "message"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void loginByPhone_Exception() {
|
|
|
+ // 准备测试数据
|
|
|
+ PhoneLoginParams params = createTestPhoneLoginParams(TEST_PHONE, TEST_OPENID, TEST_UNIONID);
|
|
|
+
|
|
|
+ // 模拟UserGateway抛出异常
|
|
|
+ when(userGateway.loginByPhone(params)).thenThrow(new RuntimeException("数据库连接失败"));
|
|
|
+
|
|
|
+ // 执行测试 - 验证异常被正确传播
|
|
|
+ assertThrows(RuntimeException.class, () -> userController.loginByPhone(params));
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).loginByPhone(params);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void getLoginSmsCode_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ String phone = TEST_PHONE;
|
|
|
+
|
|
|
+ // 模拟SmsGateway的行为
|
|
|
+ when(smsGateway.sendLoginSmsCode(phone)).thenReturn(true);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<String> result = userController.getLoginSmsCode(phone);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(smsGateway, times(1)).sendLoginSmsCode(phone);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(EXPECTED_SMS_SUCCESS_MSG, ReflectionTestUtils.getField(result, "data"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void getLoginSmsCode_Failed() {
|
|
|
+ // 准备测试数据
|
|
|
+ String phone = "invalid_phone";
|
|
|
+
|
|
|
+ // 模拟SmsGateway的行为
|
|
|
+ when(smsGateway.sendLoginSmsCode(phone)).thenReturn(false);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<String> result = userController.getLoginSmsCode(phone);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(smsGateway, times(1)).sendLoginSmsCode(phone);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertNotEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(EXPECTED_SMS_FAIL_MSG, ReflectionTestUtils.getField(result, "message"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void loginByPassword_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ UserLoginParams request = createTestUserLoginParams();
|
|
|
+ UserDto expectedUserDto = createTestUserDto();
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.loginByPassword(request)).thenReturn(expectedUserDto);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<UserDto> result = userController.loginByPassword(request);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).loginByPassword(request);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+
|
|
|
+ UserDto resultData = (UserDto) ReflectionTestUtils.getField(result, "data");
|
|
|
+ assertNotNull(resultData);
|
|
|
+ assertEquals(expectedUserDto.getUserId(), resultData.getUserId());
|
|
|
+ assertEquals(expectedUserDto.getPhone(), resultData.getPhone());
|
|
|
+ assertEquals(expectedUserDto.getOpenid(), resultData.getOpenid());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void loginByPassword_Exception() {
|
|
|
+ // 准备测试数据
|
|
|
+ UserLoginParams request = createTestUserLoginParams();
|
|
|
+
|
|
|
+ // 模拟UserGateway抛出异常
|
|
|
+ when(userGateway.loginByPassword(request)).thenThrow(new BizException(ErrorEnum.USERNAME_OR_PASSWORD_ERROR.getErrorCode(), ErrorEnum.USERNAME_OR_PASSWORD_ERROR.getErrorMessage()));
|
|
|
+
|
|
|
+ // 执行测试 - 验证异常被正确传播
|
|
|
+ assertThrows(BizException.class, () -> userController.loginByPassword(request));
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).loginByPassword(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void getSignupSmsCode_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ String phone = TEST_PHONE;
|
|
|
+
|
|
|
+ // 模拟SmsGateway的行为
|
|
|
+ when(smsGateway.sendSignupSmsCode(phone)).thenReturn(true);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<String> result = userController.getSignupSmsCode(phone);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(smsGateway, times(1)).sendSignupSmsCode(phone);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(EXPECTED_SMS_SUCCESS_MSG, ReflectionTestUtils.getField(result, "data"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void getSignupSmsCode_Failed() {
|
|
|
+ // 准备测试数据
|
|
|
+ String phone = "invalid_phone";
|
|
|
+
|
|
|
+ // 模拟SmsGateway的行为
|
|
|
+ when(smsGateway.sendSignupSmsCode(phone)).thenReturn(false);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<String> result = userController.getSignupSmsCode(phone);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(smsGateway, times(1)).sendSignupSmsCode(phone);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertNotEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(EXPECTED_SMS_FAIL_MSG, ReflectionTestUtils.getField(result, "message"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void signup_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ UserSignupParams request = createTestSignupParams();
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.signup(request)).thenReturn(true);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<String> result = userController.signup(request);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).signup(request);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(EXPECTED_SIGNUP_SUCCESS_MSG, ReflectionTestUtils.getField(result, "data"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void signup_Failed() {
|
|
|
+ // 准备测试数据
|
|
|
+ UserSignupParams request = createTestSignupParams();
|
|
|
+ request.setPassword("invalid_password");
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.signup(request)).thenReturn(false);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<String> result = userController.signup(request);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).signup(request);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertNotEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(EXPECTED_SIGNUP_FAIL_MSG, ReflectionTestUtils.getField(result, "message"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void signup_Exception() {
|
|
|
+ // 准备测试数据
|
|
|
+ UserSignupParams request = createTestSignupParams();
|
|
|
+
|
|
|
+ // 模拟UserGateway抛出异常
|
|
|
+ when(userGateway.signup(request)).thenThrow(new BizException(ErrorEnum.SMS_CODE_ERROR.getErrorCode(), ErrorEnum.SMS_CODE_ERROR.getErrorMessage()));
|
|
|
+
|
|
|
+ // 执行测试 - 验证异常被正确传播
|
|
|
+ assertThrows(BizException.class, () -> userController.signup(request));
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).signup(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void checkOpenid_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ String openid = "valid_openid";
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.checkOpenId(openid)).thenReturn(true);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<Boolean> result = userController.checkOpenid(openid);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).checkOpenId(openid);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(true, ReflectionTestUtils.getField(result, "data"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void checkOpenid_NotExist() {
|
|
|
+ // 准备测试数据
|
|
|
+ String openid = "non_existent_openid";
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.checkOpenId(openid)).thenReturn(false);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<Boolean> result = userController.checkOpenid(openid);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).checkOpenId(openid);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ assertEquals(false, ReflectionTestUtils.getField(result, "data"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void loginBySmsCode_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ LoginBySmsCodeParams request = createTestLoginBySmsCodeParams();
|
|
|
+ UserDto expectedUserDto = createTestUserDto();
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.loginBySmsCode(request)).thenReturn(expectedUserDto);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<UserDto> result = userController.loginBySmsCode(request);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).loginBySmsCode(request);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+
|
|
|
+ UserDto resultData = (UserDto) ReflectionTestUtils.getField(result, "data");
|
|
|
+ assertNotNull(resultData);
|
|
|
+ assertEquals(expectedUserDto.getUserId(), resultData.getUserId());
|
|
|
+ assertEquals(expectedUserDto.getPhone(), resultData.getPhone());
|
|
|
+ assertEquals(expectedUserDto.getOpenid(), resultData.getOpenid());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void loginBySmsCode_Failed() {
|
|
|
+ // 准备测试数据
|
|
|
+ LoginBySmsCodeParams request = createTestLoginBySmsCodeParams();
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为 - 抛出异常表示登录失败
|
|
|
+ when(userGateway.loginBySmsCode(request))
|
|
|
+ .thenThrow((new BizException(
|
|
|
+ ErrorEnum.SMS_CODE_ERROR.getErrorCode(),
|
|
|
+ ErrorEnum.SMS_CODE_ERROR.getErrorMessage())));
|
|
|
+
|
|
|
+ // 执行测试并验证应抛出异常
|
|
|
+ BizException exception = assertThrows(BizException.class, () -> userController.loginBySmsCode(request));
|
|
|
+
|
|
|
+ // 验证异常内容
|
|
|
+ assertEquals(ErrorEnum.SMS_CODE_ERROR.getErrorCode(), exception.getErrCode());
|
|
|
+ assertEquals(ErrorEnum.SMS_CODE_ERROR.getErrorMessage(), exception.getMessage());
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).loginBySmsCode(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void loginBySmsCode_Exception() {
|
|
|
+ // 准备测试数据
|
|
|
+ LoginBySmsCodeParams request = createTestLoginBySmsCodeParams();
|
|
|
+
|
|
|
+ // 模拟UserGateway抛出异常
|
|
|
+ when(userGateway.loginBySmsCode(request)).thenThrow(new BizException(ErrorEnum.SMS_CODE_EXPIRED.getErrorCode(), ErrorEnum.SMS_CODE_EXPIRED.getErrorMessage()));
|
|
|
+
|
|
|
+ // 执行测试 - 验证异常被正确传播
|
|
|
+ assertThrows(BizException.class, () -> userController.loginBySmsCode(request));
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).loginBySmsCode(request);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void getUserPhone_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ String code = "valid_code";
|
|
|
+ String expectedPhone = TEST_PHONE;
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ when(userGateway.getUserPhone(code)).thenReturn(expectedPhone);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<Map<String, String>> result = userController.getUserPhone(code);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).getUserPhone(code);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ Map<String, String> resultData = (Map<String, String>) ReflectionTestUtils.getField(result, "data");
|
|
|
+ assertNotNull(resultData);
|
|
|
+ assertEquals(expectedPhone, resultData.get("phone"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void getUserPhone_Failed() {
|
|
|
+ // 准备测试数据
|
|
|
+ String invalidCode = "invalid_code";
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为 - 返回空字符串表示获取失败
|
|
|
+ when(userGateway.getUserPhone(invalidCode))
|
|
|
+ .thenThrow((new BizException(
|
|
|
+ ErrorEnum.WECHAT_CODE_ISNULL.getErrorCode(),
|
|
|
+ ErrorEnum.WECHAT_CODE_ISNULL.getErrorMessage())));
|
|
|
+
|
|
|
+ // 执行测试并验证应抛出异常
|
|
|
+ BizException exception = assertThrows(BizException.class, () -> userController.getUserPhone(invalidCode));
|
|
|
+
|
|
|
+ // 验证异常内容
|
|
|
+ assertEquals(ErrorEnum.WECHAT_CODE_ISNULL.getErrorCode(), exception.getErrCode());
|
|
|
+ assertEquals(ErrorEnum.WECHAT_CODE_ISNULL.getErrorMessage(), exception.getMessage());
|
|
|
+
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).getUserPhone(invalidCode);
|
|
|
+ }
|
|
|
+ @Test
|
|
|
+ void getUserPhone_Exception() {
|
|
|
+ // 准备测试数据
|
|
|
+ String code = "invalid_code";
|
|
|
+
|
|
|
+ // 模拟UserGateway抛出异常
|
|
|
+ when(userGateway.getUserPhone(code)).thenThrow(new BizException(ErrorEnum.WECHAT_CODE_ISNULL.getErrorCode(), ErrorEnum.WECHAT_CODE_ISNULL.getErrorMessage()));
|
|
|
+
|
|
|
+ // 执行测试 - 验证异常被正确传播
|
|
|
+ assertThrows(BizException.class, () -> userController.getUserPhone(code));
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).getUserPhone(code);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void updatePassword_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ UserUpdatePasswordParams request = createTestUpdatePasswordParams();
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ doNothing().when(userGateway).updatePassword(request);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<?> result = userController.updatePassword(request);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).updatePassword(request);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void updatePassword_Exception() {
|
|
|
+ // 准备测试数据
|
|
|
+ UserUpdatePasswordParams request = createTestUpdatePasswordParams();
|
|
|
+
|
|
|
+ // 模拟UserGateway抛出异常
|
|
|
+ doThrow(new BizException(ErrorEnum.USERNAME_OR_PASSWORD_ERROR.getErrorCode(), ErrorEnum.USERNAME_OR_PASSWORD_ERROR.getErrorMessage()))
|
|
|
+ .when(userGateway).updatePassword(request);
|
|
|
+
|
|
|
+ // 执行测试 - 验证异常被正确传播
|
|
|
+ assertThrows(BizException.class, () -> userController.updatePassword(request));
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).updatePassword(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void logout_Success() {
|
|
|
+ // 准备测试数据
|
|
|
+ UserLogoutParams request = createTestLogoutParams();
|
|
|
+
|
|
|
+ // 模拟UserGateway的行为
|
|
|
+ doNothing().when(userGateway).logout(request);
|
|
|
+
|
|
|
+ // 执行测试
|
|
|
+ ApiResult<?> result = userController.logout(request);
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).logout(request);
|
|
|
+
|
|
|
+ // 验证结果
|
|
|
+ assertEquals(SUCCESS_CODE, ReflectionTestUtils.getField(result, "code"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void logout_Exception() {
|
|
|
+ // 准备测试数据
|
|
|
+ UserLogoutParams request = createTestLogoutParams();
|
|
|
+
|
|
|
+ // 模拟UserGateway抛出异常
|
|
|
+ doThrow(new RuntimeException("用户注销失败")).when(userGateway).logout(request);
|
|
|
+
|
|
|
+ // 执行测试 - 验证异常被正确传播
|
|
|
+ assertThrows(RuntimeException.class, () -> userController.logout(request));
|
|
|
+
|
|
|
+ // 验证交互
|
|
|
+ verify(userGateway, times(1)).logout(request);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // 辅助方法
|
|
|
+ private PhoneLoginParams createTestPhoneLoginParams(String phone, String openId, String unionId) {
|
|
|
+ PhoneLoginParams params = new PhoneLoginParams();
|
|
|
+ params.setPhone(phone);
|
|
|
+ params.setOpenId(openId);
|
|
|
+ params.setUnionId(unionId);
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+
|
|
|
+ private UserInfoWxRes createTestUserInfoWxRes() {
|
|
|
+ UserInfoWxRes userInfo = new UserInfoWxRes();
|
|
|
+ userInfo.setOpenId(TEST_OPENID);
|
|
|
+ userInfo.setUnionId(TEST_UNIONID);
|
|
|
+ return userInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ private UserSignupParams createTestSignupParams() {
|
|
|
+ UserSignupParams params = new UserSignupParams();
|
|
|
+ params.setPhone(TEST_PHONE);
|
|
|
+ params.setPassword(TEST_PASSWORD);
|
|
|
+ params.setCode(TEST_SMS_CODE);
|
|
|
+ params.setOpenId(TEST_OPENID);
|
|
|
+ params.setUnionId(TEST_UNIONID);
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+
|
|
|
+ private LoginBySmsCodeParams createTestLoginBySmsCodeParams() {
|
|
|
+ LoginBySmsCodeParams params = new LoginBySmsCodeParams();
|
|
|
+ params.setUserName(TEST_PHONE);
|
|
|
+ params.setSmsCode(TEST_SMS_CODE);
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+
|
|
|
+ private UserLoginParams createTestUserLoginParams() {
|
|
|
+ UserLoginParams params = new UserLoginParams();
|
|
|
+ params.setUserName(TEST_PHONE);
|
|
|
+ params.setPassword(TEST_PASSWORD);
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+
|
|
|
+ private UserDto createTestUserDto() {
|
|
|
+ UserDto userDto = new UserDto();
|
|
|
+ userDto.setUserId(1L);
|
|
|
+ userDto.setPhone(TEST_PHONE);
|
|
|
+ userDto.setOpenid(TEST_OPENID);
|
|
|
+ return userDto;
|
|
|
+ }
|
|
|
+
|
|
|
+ private UserUpdatePasswordParams createTestUpdatePasswordParams() {
|
|
|
+ UserUpdatePasswordParams params = new UserUpdatePasswordParams();
|
|
|
+ params.setUserId(1L);
|
|
|
+ params.setOldPassword("old_password");
|
|
|
+ params.setNewPassword("new_password");
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+
|
|
|
+ private UserLogoutParams createTestLogoutParams() {
|
|
|
+ UserLogoutParams params = new UserLogoutParams();
|
|
|
+ params.setUserId(1L);
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+}
|