blob: e8439001c231c9d07df32df7ce467d741a876c6c [file] [log] [blame]
Sure2338188c5d2025-05-28 11:43:06 +08001package com.pt5.pthouduan.ControllerTest;
21301050e4db6a92025-06-08 23:42:43 +08002
Sure2338188c5d2025-05-28 11:43:06 +08003import com.pt5.pthouduan.controller.UserController;
4import com.pt5.pthouduan.entity.User;
5import com.pt5.pthouduan.service.UserService;
6import org.junit.jupiter.api.BeforeEach;
7import org.junit.jupiter.api.Test;
8import org.mockito.InjectMocks;
9import org.mockito.Mock;
10import org.mockito.MockitoAnnotations;
11import org.springframework.http.ResponseEntity;
21301050e4db6a92025-06-08 23:42:43 +080012import org.springframework.mock.web.MockMultipartFile;
13import org.springframework.web.multipart.MultipartFile;
Sure2338188c5d2025-05-28 11:43:06 +080014
21301050e4db6a92025-06-08 23:42:43 +080015import java.io.IOException;
16import java.nio.file.Path;
17import java.nio.file.Paths;
Sure2338188c5d2025-05-28 11:43:06 +080018import java.util.HashMap;
19import java.util.Map;
20
21import static org.junit.jupiter.api.Assertions.*;
21301050e4db6a92025-06-08 23:42:43 +080022import static org.mockito.ArgumentMatchers.*;
Sure2338188c5d2025-05-28 11:43:06 +080023import static org.mockito.Mockito.*;
24
25class UserControllerTest {
26
27 @Mock
28 private UserService userService;
29
30 @InjectMocks
31 private UserController userController;
32
33 @BeforeEach
34 void setUp() {
35 MockitoAnnotations.openMocks(this);
36 }
37
Sure2338188c5d2025-05-28 11:43:06 +080038 @Test
21301050e4db6a92025-06-08 23:42:43 +080039 void register_Success() {
40 // 准备测试数据
41 User user = new User(0L,"");
42 Map<String, Object> expectedResponse = new HashMap<>();
43 expectedResponse.put("success", true);
44 expectedResponse.put("message", "注册成功");
Sure2338188c5d2025-05-28 11:43:06 +080045
21301050e4db6a92025-06-08 23:42:43 +080046 // 模拟服务层行为
21301050c519f712025-06-04 17:03:04 +080047 when(userService.register(any(User.class), anyString(), anyString()))
21301050e4db6a92025-06-08 23:42:43 +080048 .thenReturn(expectedResponse);
Sure2338188c5d2025-05-28 11:43:06 +080049
21301050e4db6a92025-06-08 23:42:43 +080050 // 执行测试
51 Map<String, Object> actualResponse = userController.register(user, "invite123", "email123");
Sure2338188c5d2025-05-28 11:43:06 +080052
21301050e4db6a92025-06-08 23:42:43 +080053 // 验证结果
54 assertEquals(expectedResponse, actualResponse);
21301050c519f712025-06-04 17:03:04 +080055 verify(userService, times(1)).register(any(), anyString(), anyString());
Sure2338188c5d2025-05-28 11:43:06 +080056 }
57
Sure2338188c5d2025-05-28 11:43:06 +080058 @Test
21301050e4db6a92025-06-08 23:42:43 +080059 void login_Success() {
60 Map<String, Object> expectedResponse = new HashMap<>();
61 expectedResponse.put("success", true);
62 expectedResponse.put("token", "test-token");
Sure2338188c5d2025-05-28 11:43:06 +080063
21301050e4db6a92025-06-08 23:42:43 +080064 when(userService.login(anyString(), anyString()))
65 .thenReturn(expectedResponse);
Sure2338188c5d2025-05-28 11:43:06 +080066
21301050e4db6a92025-06-08 23:42:43 +080067 Map<String, Object> actualResponse = userController.login("testuser", "password123");
Sure2338188c5d2025-05-28 11:43:06 +080068
21301050e4db6a92025-06-08 23:42:43 +080069 assertEquals(expectedResponse, actualResponse);
Sure2338188c5d2025-05-28 11:43:06 +080070 }
71
Sure2338188c5d2025-05-28 11:43:06 +080072 @Test
21301050e4db6a92025-06-08 23:42:43 +080073 void uploadAvatar_Success() throws IOException {
74 // 准备测试文件
75 MultipartFile file = new MockMultipartFile(
76 "avatar",
77 "test.jpg",
78 "image/jpeg",
79 "test image content".getBytes()
80 );
Sure2338188c5d2025-05-28 11:43:06 +080081
21301050e4db6a92025-06-08 23:42:43 +080082 // 模拟服务层行为
83 //doNothing().when(userService).changeImage(anyString(), anyString());
Sure2338188c5d2025-05-28 11:43:06 +080084
21301050e4db6a92025-06-08 23:42:43 +080085 // 执行测试
86 ResponseEntity<Map<String, Object>> response = userController.uploadAvatar(file);
Sure2338188c5d2025-05-28 11:43:06 +080087
21301050e4db6a92025-06-08 23:42:43 +080088 // 验证结果
89 assertEquals(200, response.getStatusCodeValue());
90 assertTrue((Boolean) response.getBody().get("success"));
91 assertNotNull(response.getBody().get("url"));
92
93 // 验证文件是否保存到正确路径
94// Path expectedPath = Paths.get("../var/www/avatars/").resolve(anyString());
95 // 实际项目中需要添加文件存在性断言
Sure2338188c5d2025-05-28 11:43:06 +080096 }
97
Sure2338188c5d2025-05-28 11:43:06 +080098 @Test
21301050e4db6a92025-06-08 23:42:43 +080099 void uploadAvatar_InvalidFileType() {
100 MultipartFile file = new MockMultipartFile(
101 "avatar",
102 "test.txt",
103 "text/plain",
104 "invalid content".getBytes()
105 );
Sure2338188c5d2025-05-28 11:43:06 +0800106
21301050e4db6a92025-06-08 23:42:43 +0800107 ResponseEntity<Map<String, Object>> response = userController.uploadAvatar(file);
Sure2338188c5d2025-05-28 11:43:06 +0800108
21301050e4db6a92025-06-08 23:42:43 +0800109 assertEquals(400, response.getStatusCodeValue());
110 assertEquals("只支持JPG/PNG/GIF格式的图片", response.getBody().get("message"));
Sure2338188c5d2025-05-28 11:43:06 +0800111 }
112
Sure2338188c5d2025-05-28 11:43:06 +0800113 @Test
21301050e4db6a92025-06-08 23:42:43 +0800114 void changeImage_Success() {
115 Map<String, Object> expectedResponse = new HashMap<>();
116 expectedResponse.put("success", true);
117 expectedResponse.put("message", "头像更改成功");
Sure2338188c5d2025-05-28 11:43:06 +0800118
21301050e4db6a92025-06-08 23:42:43 +0800119 // 执行测试
120 Map<String, Object> actualResponse = userController.changeimage("testuser", "new-avatar.jpg");
121
122 // 验证结果
123 assertEquals(expectedResponse, actualResponse);
124 verify(userService, times(1)).changeImage("testuser", "new-avatar.jpg");
Sure2338188c5d2025-05-28 11:43:06 +0800125 }
126
Sure2338188c5d2025-05-28 11:43:06 +0800127 @Test
21301050e4db6a92025-06-08 23:42:43 +0800128 void changePassword_Success() {
129 Map<String, Object> expectedResponse = new HashMap<>();
130 expectedResponse.put("success", true);
Sure2338188c5d2025-05-28 11:43:06 +0800131
21301050e4db6a92025-06-08 23:42:43 +0800132 when(userService.changePassword(anyString(), anyString(), anyString()))
133 .thenReturn(expectedResponse);
Sure2338188c5d2025-05-28 11:43:06 +0800134
21301050e4db6a92025-06-08 23:42:43 +0800135 Map<String, Object> actualResponse = userController.changePassword(
136 "testuser", "oldPass", "newPass");
137
138 assertEquals(expectedResponse, actualResponse);
Sure2338188c5d2025-05-28 11:43:06 +0800139 }
140
21301050e4db6a92025-06-08 23:42:43 +0800141 // 其他方法测试示例
Sure2338188c5d2025-05-28 11:43:06 +0800142 @Test
21301050e4db6a92025-06-08 23:42:43 +0800143 void getUserInfo_Success() {
144 Map<String, Object> expectedResponse = new HashMap<>();
145 expectedResponse.put("username", "testuser");
Sure2338188c5d2025-05-28 11:43:06 +0800146
21301050e4db6a92025-06-08 23:42:43 +0800147 when(userService.UserInfo(anyString()))
148 .thenReturn(expectedResponse);
Sure2338188c5d2025-05-28 11:43:06 +0800149
21301050e4db6a92025-06-08 23:42:43 +0800150 Map<String, Object> actualResponse = userController.getuser("testuser");
Sure2338188c5d2025-05-28 11:43:06 +0800151
21301050e4db6a92025-06-08 23:42:43 +0800152 assertEquals(expectedResponse, actualResponse);
Sure2338188c5d2025-05-28 11:43:06 +0800153 }
21301050e4db6a92025-06-08 23:42:43 +0800154}