blob: 8a09e5356d6fce82a21e0ee55c54852ad059afd3 [file] [log] [blame]
22301115cf6dba22025-03-25 19:06:21 +08001package com.example.myproject.controller;
2
3import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4import com.example.myproject.entity.User;
5import com.example.myproject.service.EmailService;
6import com.example.myproject.service.UserService;
7import com.example.myproject.mapper.UserMapper;
8import com.example.myproject.mapper.VerificationTokenMapper;
9import com.example.myproject.utils.Result;
10import org.junit.jupiter.api.BeforeEach;
11import org.junit.jupiter.api.Test;
12import org.mockito.*;
13import org.springframework.http.ResponseEntity;
14import org.springframework.security.authentication.AuthenticationManager;
15import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
16import org.springframework.security.core.Authentication;
17import org.springframework.security.core.AuthenticationException;
18
19import static org.junit.jupiter.api.Assertions.*;
20import static org.mockito.Mockito.*;
21
22class UserControllerTest {
23
24 @InjectMocks
25 private UserController userController;
26
27 @Mock
28 private UserService userService;
29 @Mock
30 private UserMapper userMapper;
31 @Mock
32 private EmailService emailService;
33 @Mock
34 private AuthenticationManager authenticationManager;
35 @Mock
36 private VerificationTokenMapper verificationTokenMapper;
37
38 @BeforeEach
39 void setup() {
40 MockitoAnnotations.openMocks(this);
41 }
42
43 @Test
44 void loginController_success() {
45 String username = "testuser";
46 String password = "testpass";
47 User mockUser = new User();
48 mockUser.setUsername(username);
49
50 Authentication mockAuth = mock(Authentication.class);
51 when(authenticationManager.authenticate(any())).thenReturn(mockAuth);
52 when(userMapper.selectOne(any(QueryWrapper.class))).thenReturn(mockUser);
53
54 Result result = userController.loginController(username, password);
55
56 assertEquals("200", result.getCode());
57 assertEquals(mockUser, result.getData());
58 }
59
60
61 @Test
62 void loginController_failure() {
63 String username = "user";
64 String password = "wrongpass";
65
66 // 模拟认证失败,抛出 Bad credentials 异常
67 when(authenticationManager.authenticate(any()))
68 .thenThrow(new AuthenticationException("Bad credentials") {});
69
70
71 // 调用登录接口
72 Result result = userController.loginController(username, password);
73
74 // 断言返回的状态码和消息
75 assertEquals("401", result.getCode());
76 assertTrue(result.getMsg().contains("登录失败"));
77 }
78
79 @Test
80 void registerController_emailExists() {
81 User user = new User();
82 user.setEmail("test@example.com");
83
84 when(userService.checkEmailExists(user.getEmail())).thenReturn(true);
85
86 Result result = userController.registerController(user);
87
88 assertEquals("邮箱冲突", result.getCode());
89 }
90
91 @Test
92 void registerController_success() {
93 User user = new User();
94 user.setEmail("test@example.com");
95
96 when(userService.checkEmailExists(user.getEmail())).thenReturn(false);
97 when(userService.preRegisterUser(user)).thenReturn(true);
98
99 Result result = userController.registerController(user);
100
101 assertEquals("200", result.getCode());
102 assertEquals(user.getEmail(), ((User) result.getData()).getEmail());
103 }
104
105 @Test
106 void verifyEmailCode_success() {
107 when(userService.verifyEmail("test@example.com", "123456")).thenReturn(true);
108
109 UserController.VerificationRequest request = new UserController.VerificationRequest();
110 request.setEmail("test@example.com");
111 request.setCode("123456");
112
113 Result result = userController.verifyEmailCode(request);
114
115 assertEquals("200", result.getCode());
116 }
117
118 @Test
119 void verifyEmailCode_failure() {
120 when(userService.verifyEmail("test@example.com", "000000")).thenReturn(false);
121
122 UserController.VerificationRequest request = new UserController.VerificationRequest();
123 request.setEmail("test@example.com");
124 request.setCode("000000");
125
126 Result result = userController.verifyEmailCode(request);
127
128 assertEquals("验证失败", result.getCode());
129 }
130
131 @Test
132 void checkPassword_success() {
133 when(userService.checkPassword(1L, "abc123")).thenReturn(true);
134
135 Result<String> result = userController.checkPassword(1L, "abc123");
136
137 assertEquals("200", result.getCode());
138 assertEquals("原始密码输入正确", result.getMsg());
139 }
140
141 @Test
142 void checkPassword_failure() {
143 when(userService.checkPassword(1L, "wrong")).thenReturn(false);
144
145 Result<String> result = userController.checkPassword(1L, "wrong");
146
147 assertEquals("305", result.getCode());
148 assertEquals("原始密码输入错误", result.getMsg());
149 }
150
151 @Test
152 void sendVerificationEmail_userNotFound() {
153 UserController.EmailRequest request = new UserController.EmailRequest();
154 request.setEmail("notfound@example.com");
155
156 when(userMapper.selectOne(any())).thenReturn(null);
157
158 ResponseEntity<Result> response = userController.sendVerificationEmail(request);
159
160 assertEquals(400, response.getStatusCodeValue());
161 assertEquals("1", response.getBody().getCode());
162 }
163}