blob: d332f31e07ebd926be3f79f388af3edf8338cc8a [file] [log] [blame]
22301115cf6dba22025-03-25 19:06:21 +08001package com.example.myproject.controller;
2
22301126e1131602025-06-04 11:30:10 +08003import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4import com.example.myproject.entity.User;
5import com.example.myproject.service.EmailService;
22301115cf6dba22025-03-25 19:06:21 +08006import com.example.myproject.service.UserService;
22301126e1131602025-06-04 11:30:10 +08007import com.example.myproject.mapper.UserMapper;
8import com.example.myproject.mapper.VerificationTokenMapper;
9import com.example.myproject.common.base.Result;
22301115cf6dba22025-03-25 19:06:21 +080010import org.junit.jupiter.api.BeforeEach;
11import org.junit.jupiter.api.Test;
22301126e1131602025-06-04 11:30:10 +080012import org.mockito.*;
13import org.springframework.http.ResponseEntity;
14import org.springframework.security.authentication.AuthenticationManager;
15import org.springframework.security.core.Authentication;
16import org.springframework.security.core.AuthenticationException;
22301115cf6dba22025-03-25 19:06:21 +080017
22301138f6824512025-06-04 02:03:13 +080018import static org.junit.jupiter.api.Assertions.*;
22301126e1131602025-06-04 11:30:10 +080019import static org.mockito.Mockito.*;
22301115cf6dba22025-03-25 19:06:21 +080020
21class UserControllerTest {
22
23 @InjectMocks
24 private UserController userController;
25
22301126e1131602025-06-04 11:30:10 +080026 @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
22301115cf6dba22025-03-25 19:06:21 +080037 @BeforeEach
22301126e1131602025-06-04 11:30:10 +080038 void setup() {
22301115cf6dba22025-03-25 19:06:21 +080039 MockitoAnnotations.openMocks(this);
40 }
41
42 @Test
22301126e1131602025-06-04 11:30:10 +080043 void loginController_success() {
44 String username = "testuser";
45 String password = "testpass";
46 User mockUser = new User();
47 mockUser.setUsername(username);
22301115cf6dba22025-03-25 19:06:21 +080048
22301126e1131602025-06-04 11:30:10 +080049 Authentication mockAuth = mock(Authentication.class);
50 when(authenticationManager.authenticate(any())).thenReturn(mockAuth);
51 when(userMapper.selectOne(any(QueryWrapper.class))).thenReturn(mockUser);
22301115cf6dba22025-03-25 19:06:21 +080052
22301126e1131602025-06-04 11:30:10 +080053 Result result = userController.loginController(username, password);
22301115cf6dba22025-03-25 19:06:21 +080054
22301126e1131602025-06-04 11:30:10 +080055 assertEquals("200", result.getCode());
56 assertEquals(mockUser, result.getData());
22301115cf6dba22025-03-25 19:06:21 +080057 }
58
22301126e1131602025-06-04 11:30:10 +080059
22301115cf6dba22025-03-25 19:06:21 +080060 @Test
22301126e1131602025-06-04 11:30:10 +080061 void loginController_failure() {
62 String username = "user";
63 String password = "wrongpass";
22301115cf6dba22025-03-25 19:06:21 +080064
22301126e1131602025-06-04 11:30:10 +080065 // 模拟认证失败,抛出 Bad credentials 异常
66 when(authenticationManager.authenticate(any()))
67 .thenThrow(new AuthenticationException("Bad credentials") {});
22301115cf6dba22025-03-25 19:06:21 +080068
69
22301126e1131602025-06-04 11:30:10 +080070 // 调用登录接口
71 Result result = userController.loginController(username, password);
22301115cf6dba22025-03-25 19:06:21 +080072
22301126e1131602025-06-04 11:30:10 +080073 // 断言返回的状态码和消息
74 assertEquals("401", result.getCode());
75 assertTrue(result.getMsg().contains("登录失败"));
22301115cf6dba22025-03-25 19:06:21 +080076 }
77
78 @Test
22301126e1131602025-06-04 11:30:10 +080079 void registerController_emailExists() {
80 User user = new User();
22301115cf6dba22025-03-25 19:06:21 +080081 user.setEmail("test@example.com");
82
22301126e1131602025-06-04 11:30:10 +080083 when(userService.checkEmailExists(user.getEmail())).thenReturn(true);
22301115cf6dba22025-03-25 19:06:21 +080084
22301126e1131602025-06-04 11:30:10 +080085 Result result = userController.registerController(user);
22301115cf6dba22025-03-25 19:06:21 +080086
22301126e1131602025-06-04 11:30:10 +080087 assertEquals("邮箱冲突", result.getCode());
22301115cf6dba22025-03-25 19:06:21 +080088 }
89
90 @Test
22301126e1131602025-06-04 11:30:10 +080091 void registerController_success() {
92 User user = new User();
22301115cf6dba22025-03-25 19:06:21 +080093 user.setEmail("test@example.com");
94
22301126e1131602025-06-04 11:30:10 +080095 when(userService.checkEmailExists(user.getEmail())).thenReturn(false);
96 when(userService.preRegisterUser(user)).thenReturn(true);
22301115cf6dba22025-03-25 19:06:21 +080097
22301126e1131602025-06-04 11:30:10 +080098 Result result = userController.registerController(user);
22301115cf6dba22025-03-25 19:06:21 +080099
22301126e1131602025-06-04 11:30:10 +0800100 assertEquals("200", result.getCode());
101 assertEquals(user.getEmail(), ((User) result.getData()).getEmail());
22301115cf6dba22025-03-25 19:06:21 +0800102 }
103
104 @Test
22301126e1131602025-06-04 11:30:10 +0800105 void verifyEmailCode_success() {
106 when(userService.verifyEmail("test@example.com", "123456")).thenReturn(true);
22301115cf6dba22025-03-25 19:06:21 +0800107
22301126e1131602025-06-04 11:30:10 +0800108 UserController.VerificationRequest request = new UserController.VerificationRequest();
109 request.setEmail("test@example.com");
110 request.setCode("123456");
22301115cf6dba22025-03-25 19:06:21 +0800111
22301126e1131602025-06-04 11:30:10 +0800112 Result result = userController.verifyEmailCode(request);
22301115cf6dba22025-03-25 19:06:21 +0800113
22301126e1131602025-06-04 11:30:10 +0800114 assertEquals("200", result.getCode());
115 }
22301115cf6dba22025-03-25 19:06:21 +0800116
22301126e1131602025-06-04 11:30:10 +0800117 @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());
22301115cf6dba22025-03-25 19:06:21 +0800161 }
162}