Revert "用户"
This reverts commit f6824511ca617c9421633c44830c938b862e75df.
Reason for revert: <撤销>
Change-Id: Ie4ee5bc5d3fa26981f61c52408ecf2d0a8e45243
diff --git a/src/test/java/com/example/myproject/controller/UserControllerTest.java b/src/test/java/com/example/myproject/controller/UserControllerTest.java
index a97e169..d332f31 100644
--- a/src/test/java/com/example/myproject/controller/UserControllerTest.java
+++ b/src/test/java/com/example/myproject/controller/UserControllerTest.java
@@ -1,234 +1,162 @@
package com.example.myproject.controller;
-import com.example.myproject.entity.Users;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.example.myproject.entity.User;
+import com.example.myproject.service.EmailService;
import com.example.myproject.service.UserService;
-import com.example.myproject.repository.UserRepository;
+import com.example.myproject.mapper.UserMapper;
+import com.example.myproject.mapper.VerificationTokenMapper;
+import com.example.myproject.common.base.Result;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.*;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-
-import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
class UserControllerTest {
- @Mock
- private UserService userService;
-
- @Mock
- private UserRepository userRepository;
-
@InjectMocks
private UserController userController;
+ @Mock
+ private UserService userService;
+ @Mock
+ private UserMapper userMapper;
+ @Mock
+ private EmailService emailService;
+ @Mock
+ private AuthenticationManager authenticationManager;
+ @Mock
+ private VerificationTokenMapper verificationTokenMapper;
+
@BeforeEach
- void setUp() {
- // 初始化模拟对象
+ void setup() {
MockitoAnnotations.openMocks(this);
}
- // 测试生成邀请码接口
@Test
- void testGenerateInviteCode() {
- // 设置输入数据
- Map<String, Object> request = new HashMap<>();
- request.put("user_id", 1L);
+ void loginController_success() {
+ String username = "testuser";
+ String password = "testpass";
+ User mockUser = new User();
+ mockUser.setUsername(username);
- // 模拟服务层的返回
- Map<String, Object> responseMap = new HashMap<>();
- responseMap.put("status", "success");
- responseMap.put("message", "邀请码生成成功");
- responseMap.put("invite_code", "ABC123XYZ");
+ Authentication mockAuth = mock(Authentication.class);
+ when(authenticationManager.authenticate(any())).thenReturn(mockAuth);
+ when(userMapper.selectOne(any(QueryWrapper.class))).thenReturn(mockUser);
- when(userService.generateInviteCode(1L)).thenReturn(responseMap);
+ Result result = userController.loginController(username, password);
- // 调用控制器方法
- Map<String, Object> resultMap = userController.generateInviteCode(request);
-
- // 验证返回结果
- assertEquals("success", resultMap.get("status"));
- assertEquals("邀请码生成成功", resultMap.get("message"));
- assertEquals("ABC123XYZ", resultMap.get("invite_code"));
-
- // 验证服务层方法是否被调用
- verify(userService, times(1)).generateInviteCode(1L);
+ assertEquals("200", result.getCode());
+ assertEquals(mockUser, result.getData());
}
- // 测试用户修改密码接口
+
@Test
- void testChangePassword() {
- Long userId = 1L;
- Map<String, Object> request = new HashMap<>();
- request.put("user_id", userId);
- request.put("old_password", "oldPassword");
- request.put("new_password", "newPassword");
- request.put("confirm_password", "newPassword");
+ void loginController_failure() {
+ String username = "user";
+ String password = "wrongpass";
- // 模拟服务层的返回
- String resultMessage = "密码修改成功";
- when(userService.changePassword(userId, "oldPassword", "newPassword", "newPassword"))
- .thenReturn(resultMessage);
+ // 模拟认证失败,抛出 Bad credentials 异常
+ when(authenticationManager.authenticate(any()))
+ .thenThrow(new AuthenticationException("Bad credentials") {});
- // 调用控制器方法
- Map<String, Object> resultMap = userController.changePassword(request);
- // 验证返回结果
- assertEquals("密码修改成功", resultMap.get("message"));
- assertEquals("success", resultMap.get("status"));
+ // 调用登录接口
+ Result result = userController.loginController(username, password);
- // 验证服务层方法是否被调用
- verify(userService, times(1)).changePassword(userId, "oldPassword", "newPassword", "newPassword");
- }
-
- // 测试用户注册接口
- @Test
- void testRegister() {
- // 设置输入数据
- Map<String, Object> request = new HashMap<>();
- request.put("username", "testUser");
- request.put("email", "test@example.com");
- request.put("password", "password");
- request.put("role", "USER");
- request.put("inviteCode", "12345");
-
- // 模拟服务层的返回
- String resultMessage = "用户注册成功";
- when(userService.registerUser("testUser", "test@example.com", "password", "USER", "12345"))
- .thenReturn(resultMessage);
-
- // 调用控制器方法
- Map<String, Object> resultMap = userController.register(request);
-
- // 验证返回结果
- assertEquals("用户注册成功", resultMap.get("msg"));
-
- // 验证服务层方法是否被调用
- verify(userService, times(1)).registerUser("testUser", "test@example.com", "password", "USER", "12345");
+ // 断言返回的状态码和消息
+ assertEquals("401", result.getCode());
+ assertTrue(result.getMsg().contains("登录失败"));
}
@Test
- void testLogin() {
- String username = "testUser";
- String password = "password";
-
- // 模拟服务层的返回
- String loginMessage = "登录成功";
- when(userService.loginUser("testUser", "password")).thenReturn(loginMessage);
-
- // 模拟用户查询
- Users user = new Users();
- user.setUserId(1L);
- user.setUsername("testUser");
+ void registerController_emailExists() {
+ User user = new User();
user.setEmail("test@example.com");
- when(userRepository.findByUsername("testUser")).thenReturn(Optional.of(user));
- // 设置请求数据
- Map<String, Object> request = new HashMap<>();
- request.put("username", username);
- request.put("password", password);
+ when(userService.checkEmailExists(user.getEmail())).thenReturn(true);
- // 调用控制器方法
- Map<String, Object> resultMap = userController.login(request);
+ Result result = userController.registerController(user);
- // 验证返回结果
- assertEquals("登录成功", resultMap.get("msg"));
-
- // 验证 user 不是 Map 类型,而是 Users 对象
- Users loggedInUser = (Users) resultMap.get("user");
- assertNotNull(loggedInUser);
- assertEquals("testUser", loggedInUser.getUsername());
- assertEquals("test@example.com", loggedInUser.getEmail());
-
- // 验证服务层方法是否被调用
- verify(userService, times(1)).loginUser("testUser", "password");
+ assertEquals("邮箱冲突", result.getCode());
}
-
- // 测试获取用户个人资料接口
@Test
- void testGetProfile() {
- Long userId = 1L;
-
- // Mock 用户数据
- Users user = new Users();
- user.setUserId(userId);
- user.setUsername("testUser");
+ void registerController_success() {
+ User user = new User();
user.setEmail("test@example.com");
- user.setAvatarUrl("https://example.com/avatar.jpg");
- // 模拟服务层返回
- Map<String, Object> profileData = new HashMap<>();
- profileData.put("avatarUrl", user.getAvatarUrl());
- profileData.put("username", user.getUsername());
- profileData.put("email", user.getEmail());
- when(userService.getProfile(userId)).thenReturn(profileData);
+ when(userService.checkEmailExists(user.getEmail())).thenReturn(false);
+ when(userService.preRegisterUser(user)).thenReturn(true);
- // 调用控制器方法
- Map<String, Object> resultMap = userController.getProfile(userId);
+ Result result = userController.registerController(user);
- // 验证返回结果
- assertEquals("testUser", resultMap.get("username"));
- assertEquals("test@example.com", resultMap.get("email"));
- assertEquals("https://example.com/avatar.jpg", resultMap.get("avatarUrl"));
-
- // 验证服务层方法是否被调用
- verify(userService, times(1)).getProfile(userId);
- }
-
- // 测试修改用户个人资料接口
- @Test
- void testEditProfile() {
- Long userId = 1L;
- Map<String, Object> profileData = new HashMap<>();
- profileData.put("avatarUrl", "https://example.com/avatar.jpg");
- profileData.put("nickname", "newNickname");
- profileData.put("gender", "Male");
- profileData.put("description", "Updated description");
- profileData.put("hobbies", "Reading, Hiking");
-
- // 模拟服务层的返回
- when(userService.editProfile(userId, "https://example.com/avatar.jpg", "newNickname", "Male", "Updated description", "Reading, Hiking"))
- .thenReturn(true);
-
- // 调用控制器方法
- Map<String, String> resultMap = userController.editProfile(userId, profileData);
-
- // 验证返回结果
- assertEquals("用户资料更新成功", resultMap.get("message"));
-
- // 验证服务层方法是否被调用
- verify(userService, times(1)).editProfile(userId, "https://example.com/avatar.jpg", "newNickname", "Male", "Updated description", "Reading, Hiking");
+ assertEquals("200", result.getCode());
+ assertEquals(user.getEmail(), ((User) result.getData()).getEmail());
}
@Test
- public void testCalculateShareRate() {
- Long userId = 1L;
+ void verifyEmailCode_success() {
+ when(userService.verifyEmail("test@example.com", "123456")).thenReturn(true);
- // 模拟 UserService 返回的结果
- Map<String, Object> expectedResponse = Map.of(
- "status", "success",
- "message", "分享率计算成功",
- "shareRate", 0.5f
- );
+ UserController.VerificationRequest request = new UserController.VerificationRequest();
+ request.setEmail("test@example.com");
+ request.setCode("123456");
- // 设置用户数据
- Users user = new Users();
- user.setUserId(userId);
- user.setUploadCount(50f); // 上传量为50
- user.setDownloadCount(100f); // 下载量为100
- when(userService.calculateShareRate(userId)).thenReturn(expectedResponse);
+ Result result = userController.verifyEmailCode(request);
- // 调用接口
- Map<String, Object> result = userController.calculateShareRate(userId);
+ assertEquals("200", result.getCode());
+ }
- // 验证结果
- assertEquals(expectedResponse, result);
- verify(userService, times(1)).calculateShareRate(userId); // 验证服务方法是否被调用
+ @Test
+ void verifyEmailCode_failure() {
+ when(userService.verifyEmail("test@example.com", "000000")).thenReturn(false);
+
+ UserController.VerificationRequest request = new UserController.VerificationRequest();
+ request.setEmail("test@example.com");
+ request.setCode("000000");
+
+ Result result = userController.verifyEmailCode(request);
+
+ assertEquals("验证失败", result.getCode());
+ }
+
+ @Test
+ void checkPassword_success() {
+ when(userService.checkPassword(1L, "abc123")).thenReturn(true);
+
+ Result<String> result = userController.checkPassword(1L, "abc123");
+
+ assertEquals("200", result.getCode());
+ assertEquals("原始密码输入正确", result.getMsg());
+ }
+
+ @Test
+ void checkPassword_failure() {
+ when(userService.checkPassword(1L, "wrong")).thenReturn(false);
+
+ Result<String> result = userController.checkPassword(1L, "wrong");
+
+ assertEquals("305", result.getCode());
+ assertEquals("原始密码输入错误", result.getMsg());
+ }
+
+ @Test
+ void sendVerificationEmail_userNotFound() {
+ UserController.EmailRequest request = new UserController.EmailRequest();
+ request.setEmail("notfound@example.com");
+
+ when(userMapper.selectOne(any())).thenReturn(null);
+
+ ResponseEntity<Result> response = userController.sendVerificationEmail(request);
+
+ assertEquals(400, response.getStatusCodeValue());
+ assertEquals("1", response.getBody().getCode());
}
}