blob: a3bccc63b41c86a1d28251b32122dfab14ad4f1b [file] [log] [blame]
import MockAdapter from 'axios-mock-adapter';
import { api } from './auth';
import {
createRequestPost,
getRequestPosts,
getRequestPostDetail,
likeRequestPost,
addRequestPostComment,
deleteRequestPost,
searchRequestPosts
} from './requestPost';
describe('求种帖API', () => {
let mockAxios;
beforeEach(() => {
mockAxios = new MockAdapter(api);
});
afterEach(() => {
mockAxios.restore();
});
describe('createRequestPost - 创建求种帖', () => {
it('应该正确发送无图片帖子数据', async () => {
const postData = {
title: '求种测试标题',
content: '求种测试内容',
authorId: 'user123'
};
mockAxios.onPost('/request/posts').reply(config => {
const data = config.data;
expect(data.get('title')).toBe(postData.title);
expect(data.get('content')).toBe(postData.content);
expect(data.get('authorId')).toBe(postData.authorId);
expect(data.has('image')).toBe(false);
return [201, { code: 201 }];
});
const response = await createRequestPost(
postData.title,
postData.content,
postData.authorId
);
expect(response.status).toBe(201);
});
it('应该正确处理带图片的帖子', async () => {
const postData = {
title: '求种测试标题',
content: '求种测试内容',
authorId: 'user123',
selectedImage: new File(['content'], 'request.jpg')
};
mockAxios.onPost('/request/posts').reply(config => {
const data = config.data;
expect(data.get('image')).toBeInstanceOf(File);
return [201, { code: 201 }];
});
const response = await createRequestPost(
postData.title,
postData.content,
postData.authorId,
postData.selectedImage
);
expect(response.status).toBe(201);
});
});
describe('getRequestPosts - 获取求种帖列表', () => {
it('应该支持分页参数', async () => {
const page = 2, size = 10;
mockAxios.onGet('/request/posts', { params: { page, size } })
.reply(200, {
code: 200,
data: {
records: [],
total: 0
}
});
const response = await getRequestPosts(page, size);
expect(response.status).toBe(200);
expect(response.data.data).toBeDefined();
});
});
describe('getRequestPostDetail - 获取求种帖详情', () => {
it('应该正确获取帖子详情', async () => {
const postId = 'req123';
mockAxios.onGet(`/request/posts/${postId}`)
.reply(200, {
code: 200,
data: {
post: {
id: postId,
title: '测试求种帖'
}
}
});
const response = await getRequestPostDetail(postId);
expect(response.status).toBe(200);
expect(response.data.data.post.id).toBe(postId);
});
});
describe('deleteRequestPost - 删除求种帖', () => {
it('应该正确发送删除请求', async () => {
const postId = 'req101';
const authorId = 'user1';
mockAxios.onDelete(`/request/posts/${postId}`, {
params: { authorId }
}).reply(200, { code: 200 });
const response = await deleteRequestPost(postId, authorId);
expect(response.status).toBe(200);
});
});
describe('searchRequestPosts - 搜索求种帖', () => {
it('应该正确发送搜索请求', async () => {
const keyword = '测试';
const page = 1, size = 5;
mockAxios.onGet('/request/posts/search', {
params: { keyword, page, size }
}).reply(200, {
code: 200,
data: {
records: [],
total: 0
}
});
const response = await searchRequestPosts(keyword, page, size);
expect(response.status).toBe(200);
expect(response.data.data).toBeDefined();
});
});
});