blob: 53e9e019d6b3e9fb53b6c9b6c47a068ad3ef806e [file] [log] [blame]
Akane121765b61a72025-05-17 13:52:25 +08001import MockAdapter from 'axios-mock-adapter';
2import { api } from './auth'; // 添加api导入
DREWae420b22025-06-02 14:07:20 +08003import { createHelpPost, getHelpPosts, getHelpPostDetail, likeHelpPost, addHelpPostComment,deleteHelpPost,searchHelpPosts } from './helpPost';
Akane121765b61a72025-05-17 13:52:25 +08004
5describe('求助帖API', () => {
6 let mockAxios;
7
8 beforeEach(() => {
9 mockAxios = new MockAdapter(api);
10 });
11
12 afterEach(() => {
13 mockAxios.restore();
14 });
15
DREWae420b22025-06-02 14:07:20 +080016 describe('createHelpPost - 创建求助帖', () => {
Akane1217d1e9f712025-05-29 14:36:56 +080017 it('应该正确发送无图片帖子数据', async () => {
Akane121765b61a72025-05-17 13:52:25 +080018 const postData = {
19 title: '测试标题',
20 content: '测试内容',
21 authorId: 'user123'
22 };
Akane1217d1e9f712025-05-29 14:36:56 +080023 // 使用函数匹配器来验证FormData内容
24 mockAxios.onPost('/help/posts').reply(config => {
25 const data = config.data;
26 expect(data.get('title')).toBe(postData.title);
27 expect(data.get('content')).toBe(postData.content);
28 expect(data.get('authorId')).toBe(postData.authorId);
29 expect(data.has('image')).toBe(false);
30 return [201, { code: 201 }];
31 });
Akane121765b61a72025-05-17 13:52:25 +080032
DREWae420b22025-06-02 14:07:20 +080033 const response = await createHelpPost(postData.title, postData.content, postData.authorId);
Akane121765b61a72025-05-17 13:52:25 +080034 expect(response.status).toBe(201);
35 });
36 });
Akane1217d1e9f712025-05-29 14:36:56 +080037 it('应该正确处理带图片的帖子', async () => {
38 const postData = {
39 title: '测试标题',
40 content: '测试内容',
41 authorId: 'user123',
42 selectedImage: new File(['content'], 'test.jpg')
43 };
44
45 mockAxios.onPost('/help/posts').reply(config => {
46 const data = config.data;
47 expect(data.get('image')).toBeInstanceOf(File);
48 return [201, { code: 201 }];
49 });
50
DREWae420b22025-06-02 14:07:20 +080051 const response = await createHelpPost(
Akane1217d1e9f712025-05-29 14:36:56 +080052 postData.title,
53 postData.content,
54 postData.authorId,
55 postData.selectedImage
56 );
57 expect(response.status).toBe(201);
58 });
59
Akane121765b61a72025-05-17 13:52:25 +080060
DREWae420b22025-06-02 14:07:20 +080061 describe('getHelpPosts - 获取求助帖列表', () => {
Akane121765b61a72025-05-17 13:52:25 +080062 it('应该支持分页参数', async () => {
63 const page = 2, size = 10;
64 mockAxios.onGet('/help/posts', { params: { page, size } }).reply(200, {
65 code: 200,
66 data: []
67 });
68
DREWae420b22025-06-02 14:07:20 +080069 const response = await getHelpPosts(page, size);
Akane121765b61a72025-05-17 13:52:25 +080070 expect(response.status).toBe(200);
71 });
72 });
73
DREWae420b22025-06-02 14:07:20 +080074 describe('likeHelpPost - 点赞求助帖', () => {
Akane121765b61a72025-05-17 13:52:25 +080075 it('应该正确发送点赞请求', async () => {
76 mockAxios.onPost('/help/posts/post123/like').reply(200, { code: 200 });
DREWae420b22025-06-02 14:07:20 +080077 const response = await likeHelpPost('post123');
Akane121765b61a72025-05-17 13:52:25 +080078 expect(response.status).toBe(200);
79 });
80 });
81
DREWae420b22025-06-02 14:07:20 +080082
83 describe('deleteHelpPost - 删除帖子', () => {
Akane1217d1e9f712025-05-29 14:36:56 +080084 it('应该正确发送删除请求', async () => {
85 const postId = 'post789';
86 const authorId = 'user1';
87
88 mockAxios.onDelete(`/help/posts/${postId}`).reply(config => {
89 expect(config.params).toEqual({ authorId });
90 return [200, { code: 200 }];
91 });
92
DREWae420b22025-06-02 14:07:20 +080093 const response = await deleteHelpPost(postId, authorId);
Akane121765b61a72025-05-17 13:52:25 +080094 expect(response.status).toBe(200);
95 });
96 });
DREWae420b22025-06-02 14:07:20 +080097 describe('searchHelpPosts - 搜索求助帖', () => {
98 it('应该正确发送搜索请求', async () => {
99 const keyword = '测试';
100 const page = 1, size = 5;
101
102 mockAxios.onGet('/help/posts/search', {
103 params: { keyword, page, size }
104 }).reply(200, {
105 code: 200,
106 data: {
107 records: [],
108 total: 0
109 }
110 });
111
112 const response = await searchHelpPosts(keyword, page, size);
113 expect(response.status).toBe(200);
114 expect(response.data.data).toBeDefined();
115 });
116 });
Akane121765b61a72025-05-17 13:52:25 +0800117});