|
|
@@ -0,0 +1,573 @@
|
|
|
+package com.etotem.cfc.controller;
|
|
|
+
|
|
|
+import com.etotem.cfc.common.Result;
|
|
|
+import com.etotem.cfc.controller.auth.AuthController;
|
|
|
+import com.etotem.cfc.dto.*;
|
|
|
+import com.etotem.cfc.entity.User;
|
|
|
+import com.etotem.cfc.service.UserService;
|
|
|
+import com.etotem.cfc.service.VerificationCodeService;
|
|
|
+import org.junit.jupiter.api.Test;
|
|
|
+import org.springframework.boot.test.context.SpringBootTest;
|
|
|
+import org.springframework.boot.test.mock.mockito.MockBean;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+
|
|
|
+import static org.junit.jupiter.api.Assertions.*;
|
|
|
+import static org.mockito.ArgumentMatchers.*;
|
|
|
+import static org.mockito.Mockito.*;
|
|
|
+
|
|
|
+@SpringBootTest
|
|
|
+public class AuthControllerTest {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private AuthController controller;
|
|
|
+
|
|
|
+ @MockBean
|
|
|
+ private UserService userService;
|
|
|
+
|
|
|
+ @MockBean
|
|
|
+ private VerificationCodeService verificationCodeService;
|
|
|
+
|
|
|
+ // ==================== sendCode ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void sendCode_Success() {
|
|
|
+ SendCodeDTO dto = new SendCodeDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setType("login");
|
|
|
+
|
|
|
+ Result<Boolean> result = controller.sendCode(dto);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertTrue(result.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void sendCode_EmptyPhone() {
|
|
|
+ SendCodeDTO dto = new SendCodeDTO();
|
|
|
+ dto.setPhone("");
|
|
|
+ dto.setType("login");
|
|
|
+
|
|
|
+ Result<Boolean> result = controller.sendCode(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("手机号不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void sendCode_InvalidPhone() {
|
|
|
+ SendCodeDTO dto = new SendCodeDTO();
|
|
|
+ dto.setPhone("12345");
|
|
|
+ dto.setType("login");
|
|
|
+
|
|
|
+ Result<Boolean> result = controller.sendCode(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("手机号格式不正确", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== phoneLogin ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void phoneLogin_Success() {
|
|
|
+ PhoneLoginDTO dto = new PhoneLoginDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setCode("123456");
|
|
|
+ dto.setNickname("测试用户");
|
|
|
+
|
|
|
+ when(verificationCodeService.verifyCode("13800138000", "123456", "login")).thenReturn(true);
|
|
|
+ LoginResultDTO loginResult = new LoginResultDTO();
|
|
|
+ loginResult.setToken("mock-token");
|
|
|
+ loginResult.setUserId(1L);
|
|
|
+ loginResult.setRole("parent");
|
|
|
+ when(userService.phoneLogin(dto)).thenReturn(loginResult);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.phoneLogin(dto);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertNotNull(result.getData());
|
|
|
+ assertEquals("mock-token", result.getData().getToken());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void phoneLogin_EmptyParams() {
|
|
|
+ PhoneLoginDTO dto = new PhoneLoginDTO();
|
|
|
+ dto.setPhone(null);
|
|
|
+ dto.setCode(null);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.phoneLogin(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("手机号和验证码不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void phoneLogin_WrongCode() {
|
|
|
+ PhoneLoginDTO dto = new PhoneLoginDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setCode("000000");
|
|
|
+
|
|
|
+ when(verificationCodeService.verifyCode("13800138000", "000000", "login")).thenReturn(false);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.phoneLogin(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("验证码错误或已过期", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void phoneLogin_UserServiceException() {
|
|
|
+ PhoneLoginDTO dto = new PhoneLoginDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setCode("123456");
|
|
|
+
|
|
|
+ when(verificationCodeService.verifyCode("13800138000", "123456", "login")).thenReturn(true);
|
|
|
+ when(userService.phoneLogin(dto)).thenThrow(new RuntimeException("该账号不允许登录小程序"));
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.phoneLogin(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("该账号不允许登录小程序", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== wechatPhoneLogin ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void wechatPhoneLogin_Success() {
|
|
|
+ WechatPhoneLoginDTO dto = new WechatPhoneLoginDTO();
|
|
|
+ dto.setCode("wx-code");
|
|
|
+ dto.setPhoneCode("phone-code");
|
|
|
+
|
|
|
+ LoginResultDTO loginResult = new LoginResultDTO();
|
|
|
+ loginResult.setToken("wechat-token");
|
|
|
+ loginResult.setUserId(2L);
|
|
|
+ when(userService.wechatPhoneLogin(dto)).thenReturn(loginResult);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.wechatPhoneLogin(dto);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertEquals("wechat-token", result.getData().getToken());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void wechatPhoneLogin_EmptyParams() {
|
|
|
+ WechatPhoneLoginDTO dto = new WechatPhoneLoginDTO();
|
|
|
+ dto.setCode(null);
|
|
|
+ dto.setPhoneCode(null);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.wechatPhoneLogin(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("登录code和手机号code不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== silentLogin ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void silentLogin_Success() {
|
|
|
+ WechatLoginDTO dto = new WechatLoginDTO();
|
|
|
+ dto.setCode("silent-code");
|
|
|
+
|
|
|
+ LoginResultDTO loginResult = new LoginResultDTO();
|
|
|
+ loginResult.setToken("silent-token");
|
|
|
+ when(userService.silentLogin("silent-code")).thenReturn(loginResult);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.silentLogin(dto);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertEquals("silent-token", result.getData().getToken());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void silentLogin_NoCode() {
|
|
|
+ WechatLoginDTO dto = new WechatLoginDTO();
|
|
|
+ dto.setCode(null);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.silentLogin(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("登录code不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== autoLogin ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void autoLogin_Success() {
|
|
|
+ WechatLoginDTO dto = new WechatLoginDTO();
|
|
|
+ dto.setOpenid("mock-openid");
|
|
|
+
|
|
|
+ LoginResultDTO loginResult = new LoginResultDTO();
|
|
|
+ loginResult.setToken("auto-token");
|
|
|
+ when(userService.autoLoginByOpenid("mock-openid")).thenReturn(loginResult);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.autoLogin(dto);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertEquals("auto-token", result.getData().getToken());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void autoLogin_UserNotFound() {
|
|
|
+ WechatLoginDTO dto = new WechatLoginDTO();
|
|
|
+ dto.setOpenid("unknown-openid");
|
|
|
+
|
|
|
+ when(userService.autoLoginByOpenid("unknown-openid")).thenReturn(null);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.autoLogin(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("用户不存在,请先登录", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void autoLogin_NoOpenid() {
|
|
|
+ WechatLoginDTO dto = new WechatLoginDTO();
|
|
|
+ dto.setOpenid(null);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.autoLogin(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("openid不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== registerWithIdCard ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void registerWithIdCard_Success() {
|
|
|
+ RegisterWithIdCardDTO dto = new RegisterWithIdCardDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setCode("123456");
|
|
|
+ dto.setIdCard("110101199001011234");
|
|
|
+ dto.setRealName("张三");
|
|
|
+
|
|
|
+ LoginResultDTO loginResult = new LoginResultDTO();
|
|
|
+ loginResult.setToken("idcard-token");
|
|
|
+ when(userService.registerWithIdCard(dto)).thenReturn(loginResult);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.registerWithIdCard(dto);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void registerWithIdCard_EmptyPhone() {
|
|
|
+ RegisterWithIdCardDTO dto = new RegisterWithIdCardDTO();
|
|
|
+ dto.setPhone(null);
|
|
|
+ dto.setCode("123456");
|
|
|
+ dto.setIdCard("110101199001011234");
|
|
|
+ dto.setRealName("张三");
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.registerWithIdCard(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("手机号和验证码不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void registerWithIdCard_InvalidIdCard() {
|
|
|
+ RegisterWithIdCardDTO dto = new RegisterWithIdCardDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setCode("123456");
|
|
|
+ dto.setIdCard("12345");
|
|
|
+ dto.setRealName("张三");
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.registerWithIdCard(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("身份证号格式不正确", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void registerWithIdCard_EmptyRealName() {
|
|
|
+ RegisterWithIdCardDTO dto = new RegisterWithIdCardDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setCode("123456");
|
|
|
+ dto.setIdCard("110101199001011234");
|
|
|
+ dto.setRealName("");
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.registerWithIdCard(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("真实姓名不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== wechatLogin ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void wechatLogin_Success() {
|
|
|
+ WechatLoginDTO dto = new WechatLoginDTO();
|
|
|
+ dto.setCode("wx-code");
|
|
|
+
|
|
|
+ LoginResultDTO loginResult = new LoginResultDTO();
|
|
|
+ loginResult.setToken("wx-token");
|
|
|
+ when(userService.wechatLogin(dto)).thenReturn(loginResult);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.wechatLogin(dto);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertEquals("wx-token", result.getData().getToken());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void wechatLogin_Exception() {
|
|
|
+ WechatLoginDTO dto = new WechatLoginDTO();
|
|
|
+ dto.setCode("bad-code");
|
|
|
+
|
|
|
+ when(userService.wechatLogin(dto)).thenThrow(new RuntimeException("微信登录失败"));
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.wechatLogin(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("微信登录失败", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== getInfo ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void getInfo_Success() {
|
|
|
+ HttpServletRequest request = mock(HttpServletRequest.class);
|
|
|
+ when(request.getAttribute("userId")).thenReturn(1L);
|
|
|
+
|
|
|
+ User mockUser = new User();
|
|
|
+ mockUser.setId(1L);
|
|
|
+ mockUser.setNickname("测试用户");
|
|
|
+ when(userService.getUserInfo(1L)).thenReturn(mockUser);
|
|
|
+
|
|
|
+ Result<User> result = controller.getInfo(request);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertNotNull(result.getData());
|
|
|
+ // Password should be cleared
|
|
|
+ assertNull(result.getData().getPassword());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void getInfo_NotLoggedIn() {
|
|
|
+ HttpServletRequest request = mock(HttpServletRequest.class);
|
|
|
+ when(request.getAttribute("userId")).thenReturn(null);
|
|
|
+ when(request.getHeader("X-User-Id")).thenReturn(null);
|
|
|
+
|
|
|
+ Result<User> result = controller.getInfo(request);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("未登录", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== setPassword ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void setPassword_Success() {
|
|
|
+ HttpServletRequest request = mock(HttpServletRequest.class);
|
|
|
+ when(request.getAttribute("userId")).thenReturn(1L);
|
|
|
+
|
|
|
+ SetPasswordDTO dto = new SetPasswordDTO();
|
|
|
+ dto.setPassword("newPass123");
|
|
|
+
|
|
|
+ when(userService.setPassword(1L, "newPass123")).thenReturn(true);
|
|
|
+
|
|
|
+ Result<Boolean> result = controller.setPassword(request, dto);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertTrue(result.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== verifyPassword ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void verifyPassword_Correct() {
|
|
|
+ HttpServletRequest request = mock(HttpServletRequest.class);
|
|
|
+ when(request.getAttribute("userId")).thenReturn(1L);
|
|
|
+
|
|
|
+ VerifyPasswordDTO dto = new VerifyPasswordDTO();
|
|
|
+ dto.setPassword("correctPass");
|
|
|
+
|
|
|
+ when(userService.verifyPassword(1L, "correctPass")).thenReturn(true);
|
|
|
+
|
|
|
+ Result<Boolean> result = controller.verifyPassword(request, dto);
|
|
|
+ assertTrue(result.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void verifyPassword_Wrong() {
|
|
|
+ HttpServletRequest request = mock(HttpServletRequest.class);
|
|
|
+ when(request.getAttribute("userId")).thenReturn(1L);
|
|
|
+
|
|
|
+ VerifyPasswordDTO dto = new VerifyPasswordDTO();
|
|
|
+ dto.setPassword("wrongPass");
|
|
|
+
|
|
|
+ when(userService.verifyPassword(1L, "wrongPass")).thenReturn(false);
|
|
|
+
|
|
|
+ Result<Boolean> result = controller.verifyPassword(request, dto);
|
|
|
+ assertFalse(result.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== checkPhone ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void checkPhone_Registered() {
|
|
|
+ CheckPhoneDTO dto = new CheckPhoneDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ when(userService.isPhoneRegistered("13800138000")).thenReturn(true);
|
|
|
+
|
|
|
+ Result<Boolean> result = controller.checkPhone(dto);
|
|
|
+ assertTrue(result.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void checkPhone_NotRegistered() {
|
|
|
+ CheckPhoneDTO dto = new CheckPhoneDTO();
|
|
|
+ dto.setPhone("13900139000");
|
|
|
+ when(userService.isPhoneRegistered("13900139000")).thenReturn(false);
|
|
|
+
|
|
|
+ Result<Boolean> result = controller.checkPhone(dto);
|
|
|
+ assertFalse(result.getData());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void checkPhone_Invalid() {
|
|
|
+ CheckPhoneDTO dto = new CheckPhoneDTO();
|
|
|
+ dto.setPhone("123");
|
|
|
+
|
|
|
+ Result<Boolean> result = controller.checkPhone(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("手机号格式不正确", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void checkPhone_Empty() {
|
|
|
+ CheckPhoneDTO dto = new CheckPhoneDTO();
|
|
|
+ dto.setPhone("");
|
|
|
+
|
|
|
+ Result<Boolean> result = controller.checkPhone(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("手机号不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== directRegister ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void directRegister_Success() {
|
|
|
+ DirectRegisterDTO dto = new DirectRegisterDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setNickname("新用户");
|
|
|
+ dto.setRole("parent");
|
|
|
+
|
|
|
+ when(userService.isPhoneRegistered("13800138000")).thenReturn(false);
|
|
|
+ LoginResultDTO loginResult = new LoginResultDTO();
|
|
|
+ loginResult.setToken("reg-token");
|
|
|
+ loginResult.setUserId(3L);
|
|
|
+ when(userService.directRegister(dto)).thenReturn(loginResult);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.directRegister(dto);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertEquals("reg-token", result.getData().getToken());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void directRegister_AlreadyRegistered() {
|
|
|
+ DirectRegisterDTO dto = new DirectRegisterDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ when(userService.isPhoneRegistered("13800138000")).thenReturn(true);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.directRegister(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("该手机号已注册,请使用验证码登录", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void directRegister_InvalidPhone() {
|
|
|
+ DirectRegisterDTO dto = new DirectRegisterDTO();
|
|
|
+ dto.setPhone("12345");
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.directRegister(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== registerWithInvite ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void registerWithInvite_Success() {
|
|
|
+ RegisterWithInviteCodeDTO dto = new RegisterWithInviteCodeDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setCode("123456");
|
|
|
+ dto.setInviteCode("INVITE123");
|
|
|
+ dto.setCodeId("code-id-1");
|
|
|
+
|
|
|
+ when(verificationCodeService.verifyCode("13800138000", "123456", "code-id-1")).thenReturn(true);
|
|
|
+ when(userService.isPhoneRegistered("13800138000")).thenReturn(false);
|
|
|
+ LoginResultDTO loginResult = new LoginResultDTO();
|
|
|
+ loginResult.setToken("invite-token");
|
|
|
+ when(userService.registerWithInviteCode(dto)).thenReturn(loginResult);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.registerWithInvite(dto);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertEquals("invite-token", result.getData().getToken());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void registerWithInvite_EmptyPhone() {
|
|
|
+ RegisterWithInviteCodeDTO dto = new RegisterWithInviteCodeDTO();
|
|
|
+ dto.setPhone("");
|
|
|
+ dto.setInviteCode("INVITE123");
|
|
|
+ dto.setCode("123456");
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.registerWithInvite(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("手机号不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void registerWithInvite_EmptyInviteCode() {
|
|
|
+ RegisterWithInviteCodeDTO dto = new RegisterWithInviteCodeDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setInviteCode("");
|
|
|
+ dto.setCode("123456");
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.registerWithInvite(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("邀请码不能为空", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void registerWithInvite_WrongCode() {
|
|
|
+ RegisterWithInviteCodeDTO dto = new RegisterWithInviteCodeDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setCode("000000");
|
|
|
+ dto.setInviteCode("INVITE123");
|
|
|
+ dto.setCodeId("code-id-1");
|
|
|
+
|
|
|
+ when(verificationCodeService.verifyCode("13800138000", "000000", "code-id-1")).thenReturn(false);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.registerWithInvite(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("验证码错误或已过期", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void registerWithInvite_AlreadyRegistered() {
|
|
|
+ RegisterWithInviteCodeDTO dto = new RegisterWithInviteCodeDTO();
|
|
|
+ dto.setPhone("13800138000");
|
|
|
+ dto.setCode("123456");
|
|
|
+ dto.setInviteCode("INVITE123");
|
|
|
+ dto.setCodeId("code-id-1");
|
|
|
+
|
|
|
+ when(verificationCodeService.verifyCode("13800138000", "123456", "code-id-1")).thenReturn(true);
|
|
|
+ when(userService.isPhoneRegistered("13800138000")).thenReturn(true);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.registerWithInvite(dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("该手机号已注册,请使用验证码登录", result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== switchRole ====================
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void switchRole_Success() {
|
|
|
+ HttpServletRequest request = mock(HttpServletRequest.class);
|
|
|
+ when(request.getAttribute("userId")).thenReturn(1L);
|
|
|
+
|
|
|
+ SwitchRoleDTO dto = new SwitchRoleDTO();
|
|
|
+ dto.setRole("teacher");
|
|
|
+
|
|
|
+ LoginResultDTO loginResult = new LoginResultDTO();
|
|
|
+ loginResult.setToken("switched-token");
|
|
|
+ loginResult.setRole("teacher");
|
|
|
+ when(userService.switchRoleForLogin(1L, "teacher")).thenReturn(loginResult);
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.switchRole(request, dto);
|
|
|
+ assertEquals(200, result.getCode());
|
|
|
+ assertEquals("teacher", result.getData().getRole());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void switchRole_NotLoggedIn() {
|
|
|
+ HttpServletRequest request = mock(HttpServletRequest.class);
|
|
|
+ when(request.getAttribute("userId")).thenReturn(null);
|
|
|
+ when(request.getHeader("X-User-Id")).thenReturn(null);
|
|
|
+
|
|
|
+ SwitchRoleDTO dto = new SwitchRoleDTO();
|
|
|
+ dto.setRole("teacher");
|
|
|
+
|
|
|
+ Result<LoginResultDTO> result = controller.switchRole(request, dto);
|
|
|
+ assertEquals(500, result.getCode());
|
|
|
+ assertEquals("未登录", result.getMessage());
|
|
|
+ }
|
|
|
+}
|