用户
Change-Id: I33150cf6ffdea3bf582023bf540394075d081af9
diff --git a/src/test/java/com/example/myproject/controller/UserControllerTest.java b/src/test/java/com/example/myproject/controller/UserControllerTest.java
index d332f31..a97e169 100644
--- a/src/test/java/com/example/myproject/controller/UserControllerTest.java
+++ b/src/test/java/com/example/myproject/controller/UserControllerTest.java
@@ -1,162 +1,234 @@
package com.example.myproject.controller;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.example.myproject.entity.User;
-import com.example.myproject.service.EmailService;
+import com.example.myproject.entity.Users;
import com.example.myproject.service.UserService;
-import com.example.myproject.mapper.UserMapper;
-import com.example.myproject.mapper.VerificationTokenMapper;
-import com.example.myproject.common.base.Result;
+import com.example.myproject.repository.UserRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-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 org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
-import static org.junit.jupiter.api.Assertions.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
import static org.mockito.Mockito.*;
+import static org.junit.jupiter.api.Assertions.*;
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 loginController_success() {
- String username = "testuser";
- String password = "testpass";
- User mockUser = new User();
- mockUser.setUsername(username);
+ void testGenerateInviteCode() {
+ // 设置输入数据
+ Map<String, Object> request = new HashMap<>();
+ request.put("user_id", 1L);
- Authentication mockAuth = mock(Authentication.class);
- when(authenticationManager.authenticate(any())).thenReturn(mockAuth);
- when(userMapper.selectOne(any(QueryWrapper.class))).thenReturn(mockUser);
+ // 模拟服务层的返回
+ Map<String, Object> responseMap = new HashMap<>();
+ responseMap.put("status", "success");
+ responseMap.put("message", "邀请码生成成功");
+ responseMap.put("invite_code", "ABC123XYZ");
- Result result = userController.loginController(username, password);
+ when(userService.generateInviteCode(1L)).thenReturn(responseMap);
- assertEquals("200", result.getCode());
- assertEquals(mockUser, result.getData());
+ // 调用控制器方法
+ 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);
}
-
+ // 测试用户修改密码接口
@Test
- void loginController_failure() {
- String username = "user";
- String password = "wrongpass";
+ 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");
- // 模拟认证失败,抛出 Bad credentials 异常
- when(authenticationManager.authenticate(any()))
- .thenThrow(new AuthenticationException("Bad credentials") {});
+ // 模拟服务层的返回
+ String resultMessage = "密码修改成功";
+ when(userService.changePassword(userId, "oldPassword", "newPassword", "newPassword"))
+ .thenReturn(resultMessage);
+ // 调用控制器方法
+ Map<String, Object> resultMap = userController.changePassword(request);
- // 调用登录接口
- Result result = userController.loginController(username, password);
+ // 验证返回结果
+ assertEquals("密码修改成功", resultMap.get("message"));
+ assertEquals("success", resultMap.get("status"));
- // 断言返回的状态码和消息
- assertEquals("401", result.getCode());
- assertTrue(result.getMsg().contains("登录失败"));
+ // 验证服务层方法是否被调用
+ 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");
}
@Test
- void registerController_emailExists() {
- User user = new User();
+ 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");
user.setEmail("test@example.com");
+ when(userRepository.findByUsername("testUser")).thenReturn(Optional.of(user));
- when(userService.checkEmailExists(user.getEmail())).thenReturn(true);
+ // 设置请求数据
+ Map<String, Object> request = new HashMap<>();
+ request.put("username", username);
+ request.put("password", password);
- Result result = userController.registerController(user);
+ // 调用控制器方法
+ Map<String, Object> resultMap = userController.login(request);
- assertEquals("邮箱冲突", result.getCode());
+ // 验证返回结果
+ 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");
}
+
+ // 测试获取用户个人资料接口
@Test
- void registerController_success() {
- User user = new User();
+ void testGetProfile() {
+ Long userId = 1L;
+
+ // Mock 用户数据
+ Users user = new Users();
+ user.setUserId(userId);
+ user.setUsername("testUser");
user.setEmail("test@example.com");
+ user.setAvatarUrl("https://example.com/avatar.jpg");
- when(userService.checkEmailExists(user.getEmail())).thenReturn(false);
- when(userService.preRegisterUser(user)).thenReturn(true);
+ // 模拟服务层返回
+ 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);
- Result result = userController.registerController(user);
+ // 调用控制器方法
+ Map<String, Object> resultMap = userController.getProfile(userId);
- assertEquals("200", result.getCode());
- assertEquals(user.getEmail(), ((User) result.getData()).getEmail());
+ // 验证返回结果
+ 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");
}
@Test
- void verifyEmailCode_success() {
- when(userService.verifyEmail("test@example.com", "123456")).thenReturn(true);
+ public void testCalculateShareRate() {
+ Long userId = 1L;
- UserController.VerificationRequest request = new UserController.VerificationRequest();
- request.setEmail("test@example.com");
- request.setCode("123456");
+ // 模拟 UserService 返回的结果
+ Map<String, Object> expectedResponse = Map.of(
+ "status", "success",
+ "message", "分享率计算成功",
+ "shareRate", 0.5f
+ );
- Result result = userController.verifyEmailCode(request);
+ // 设置用户数据
+ Users user = new Users();
+ user.setUserId(userId);
+ user.setUploadCount(50f); // 上传量为50
+ user.setDownloadCount(100f); // 下载量为100
+ when(userService.calculateShareRate(userId)).thenReturn(expectedResponse);
- assertEquals("200", result.getCode());
- }
+ // 调用接口
+ Map<String, Object> result = userController.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());
+ // 验证结果
+ assertEquals(expectedResponse, result);
+ verify(userService, times(1)).calculateShareRate(userId); // 验证服务方法是否被调用
}
}