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