blob: 65860869fd1f0f1dcbf66cc6f2a94a6d217d0191 [file] [log] [blame]
package com.example.myproject.controller;
import com.example.myproject.entity.Collections;
import com.example.myproject.entity.Post;
import com.example.myproject.entity.Users;
import com.example.myproject.repository.CollectionsRepository;
import com.example.myproject.repository.PostRepository;
import com.example.myproject.repository.UserRepository;
import com.example.myproject.service.PostService;
import com.example.myproject.utils.Result;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
class PostControllerTest {
@InjectMocks
private PostController postController;
@Mock
private PostService postService;
@Mock
private CollectionsRepository collectionsRepository;
@Mock
private PostRepository postRepository;
@Mock
private UserRepository userRepository;
@InjectMocks
private UserController userController;
@BeforeEach
void setup() {
MockitoAnnotations.openMocks(this);
}
// 测试创建帖子
void createPostTest() {
Long userId = 1L;
String postContent = "Test Post Content";
String title = "Test Post Title";
MultipartFile[] imageFiles = new MultipartFile[0]; // Empty array for simplicity
// 模拟服务层的返回值
Map<String, Object> responseMap = new HashMap<>();
responseMap.put("postNo", 123L);
responseMap.put("message", "帖子创建成功");
when(postService.createPost(userId, postContent, title, imageFiles)).thenReturn(responseMap);
// 调用控制器的方法
Map<String, Object> resultMap = postController.createPost(userId, postContent, title, imageFiles);
// 手动将 Map<String, Object> 包装到 Result.success()
Result<Map<String, Object>> result = Result.success(resultMap, "帖子创建成功");
// 验证返回的结果
assertEquals("200", result.getCode());
assertEquals("帖子创建成功", result.getMsg());
assertEquals(123L, result.getData().get("postNo"));
}
// 测试编辑帖子
@Test
void updatePostTest() {
Long postId = 1L;
Post post = new Post();
post.setPostNo(postId);
post.setTitle("Updated Title");
post.setPostContent("Updated Content");
// 模拟服务层的行为
doNothing().when(postService).updatePost(postId, post);
// 调用控制器的方法
String result = postController.updatePost(postId, post);
// 验证返回的结果
assertEquals("Post updated successfully!", result);
}
// 测试删除帖子
@Test
void deletePostTest() {
Long postId = 1L;
// 模拟服务层的行为
doNothing().when(postService).deletePost(postId);
// 调用控制器的方法
String result = postController.deletePost(postId);
// 验证返回的结果
assertEquals("Post deleted successfully!", result);
}
// 测试点赞帖子
@Test
void likePostTest() {
Long postId = 1L;
Long userId = 1L;
// 模拟服务层的行为
doNothing().when(postService).likePost(postId, userId);
// 创建请求体
Map<String, Long> requestBody = new HashMap<>();
requestBody.put("user_id", userId);
// 调用控制器的方法
String result = postController.likePost(postId, requestBody);
// 验证返回的结果
assertEquals("Post liked successfully!", result);
}
// 测试取消点赞帖子
@Test
void unlikePostTest() {
Long postId = 1L;
Long userId = 1L;
// 模拟服务层的行为
doNothing().when(postService).unlikePost(postId, userId);
// 创建请求体
Map<String, Long> requestBody = new HashMap<>();
requestBody.put("user_id", userId);
// 调用控制器的方法
String result = postController.unlikePost(postId, requestBody);
// 验证返回的结果
assertEquals("Post unliked successfully!", result);
}
// 测试收藏帖子
@Test
void collectPostTest() {
Long postId = 1L;
Long userId = 1L;
// 模拟服务层的行为
doNothing().when(postService).collectPost(postId, userId);
// 创建请求体
Map<String, Long> requestBody = new HashMap<>();
requestBody.put("user_id", userId);
// 调用控制器的方法
String result = postController.collectPost(postId, requestBody);
// 验证返回的结果
assertEquals("Post collected successfully!", result);
}
// 测试取消收藏帖子
@Test
void uncollectPostTest() {
Long postId = 1L;
Long userId = 1L;
// 模拟服务层的行为
doNothing().when(postService).uncollectPost(postId, userId);
// 创建请求体
Map<String, Long> requestBody = new HashMap<>();
requestBody.put("user_id", userId);
// 调用控制器的方法
String result = postController.uncollectPost(postId, requestBody);
// 验证返回的结果
assertEquals("Post uncollected successfully!", result);
}
// 测试获取所有帖子
@Test
void getAllPostsTest() {
// 模拟服务层的行为
Map<String, Object> responseMap = new HashMap<>();
responseMap.put("total", 5);
responseMap.put("posts", new ArrayList<>());
when(postService.getAllPosts()).thenReturn(responseMap);
// 调用控制器的方法
Map<String, Object> result = postController.getAllPosts();
// 验证返回的结果
assertEquals(5, result.get("total"));
}
// 测试根据帖子ID获取帖子
@Test
void getPostByIdTest() {
Long postId = 1L;
Map<String, Object> responseMap = new HashMap<>();
responseMap.put("postNo", 123L);
responseMap.put("message", "Post details");
// 模拟服务层的行为
when(postService.getPostById(postId)).thenReturn(responseMap);
// 调用控制器的方法
Map<String, Object> result = postController.getPostById(postId);
// 验证返回的结果
assertEquals("Post details", result.get("message"));
assertEquals(123L, result.get("postNo"));
}
// 测试获取用户收藏的所有帖子接口
@Test
void testGetAllCollections() {
Long userId = 1L;
// 模拟用户收藏的数据
Collections collection = new Collections();
collection.setCollectionId(1L);
collection.setUserId(userId);
collection.setPostNo(101L);
List<Collections> collections = new ArrayList<>();
collections.add(collection);
// 模拟帖子数据
Post post = new Post();
post.setPostNo(101L);
post.setTitle("Test Post Title");
post.setPostContent("Test Post Content");
post.setImageUrl("https://example.com/image.jpg");
post.setUser_id(2L); // 作者用户ID
Users user = new Users();
user.setUserId(2L);
user.setUsername("testUser");
user.setAvatarUrl("https://example.com/avatar.jpg");
// 设置模拟服务层的返回
when(postService.getAllCollections(userId)).thenReturn(Arrays.asList(
Map.of(
"postNo", post.getPostNo(),
"title", post.getTitle(),
"postContent", post.getPostContent(),
"imageUrl", post.getImageUrl(),
"userId", post.getUser_id(),
"username", user.getUsername(),
"avatarUrl", user.getAvatarUrl()
)
));
// 调用控制器方法
List<Map<String, Object>> result = postController.getAllCollections(userId);
// 验证返回的结果
assertNotNull(result);
assertEquals(1, result.size()); // 验证返回数据的数量
// 验证返回的数据结构
Map<String, Object> postInfo = result.get(0);
assertEquals(101L, postInfo.get("postNo"));
assertEquals("Test Post Title", postInfo.get("title"));
assertEquals("Test Post Content", postInfo.get("postContent"));
assertEquals("https://example.com/image.jpg", postInfo.get("imageUrl"));
assertEquals(2L, postInfo.get("userId"));
assertEquals("testUser", postInfo.get("username"));
assertEquals("https://example.com/avatar.jpg", postInfo.get("avatarUrl"));
}
}