用户

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);  // 验证服务方法是否被调用
     }
 }