Revert "注册登录,用户等级,社交,动态,新手任务"

This reverts commit 1c359108ca33d46271920ee0cd57dddcb7012937.

Reason for revert: <冲突>

Change-Id: Ie586267169acac99130b1fadf4a5f433441c4b8c
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());
     }
 }