blob: bae9482d1c8f810a3f34208293d4e5ab42a01d4a [file] [log] [blame]
import MockAdapter from 'axios-mock-adapter';
import { api } from './auth';
import { getAnnouncements, getLatestAnnouncements, getAnnouncementDetail,postAnnouncement } from './announcement';
describe('公告API', () => {
let mockAxios;
beforeEach(() => {
mockAxios = new MockAdapter(api);
});
afterEach(() => {
mockAxios.restore();
});
describe('postAnnouncement - 发布公告', () => {
it('应该成功发布公告', async () => {
const mockData = {
title: '测试公告',
content: '测试内容'
};
const mockResponse = {
code: 200,
message: '公告发布成功',
data: {
id: 123,
title: mockData.title,
content: mockData.content,
createTime: new Date().toISOString()
}
};
mockAxios.onPost('/announcement/create').reply(200, mockResponse);
const response = await postAnnouncement(mockData);
expect(response.data).toEqual(mockResponse);
expect(response.data.code).toBe(200);
expect(response.data.data.title).toBe(mockData.title);
expect(response.data.data.content).toBe(mockData.content);
});
});
describe('getAnnouncements - 获取所有公告', () => {
it('应该成功获取公告列表', async () => {
const mockResponse = {
code: 200,
data: {
announcements: [
{ id: 1, title: '公告1', content: '内容1', createTime: '2023-01-01T00:00:00Z' },
{ id: 2, title: '公告2', content: '内容2', createTime: '2023-01-01T00:00:00Z' }
]
}
};
mockAxios.onGet('/announcement/list').reply(200, mockResponse);
const response = await getAnnouncements();
expect(response.data).toEqual(mockResponse);
expect(response.data.data.announcements).toHaveLength(2);
});
});
describe('getLatestAnnouncements - 获取最新公告', () => {
it('应该成功获取最新公告', async () => {
const mockResponse = {
code: 200,
data: {
announcements: [
{ id: 1, title: '最新公告', content: '最新内容' }
]
}
};
mockAxios.onGet('/announcement/latest').reply(200, mockResponse);
const response = await getLatestAnnouncements();
expect(response.data).toEqual(mockResponse);
expect(response.data.data.announcements).toHaveLength(1);
});
it('应该正确处理服务器错误', async () => {
mockAxios.onGet('/announcement/latest').reply(500);
await expect(getLatestAnnouncements()).rejects.toThrow();
});
});
describe('getAnnouncementDetail - 获取公告详情', () => {
it('应该成功获取公告详情', async () => {
const announcementId = 123;
const mockResponse = {
code: 200,
data: {
announcement: {
id: announcementId,
title: '详细公告',
content: '详细内容',
createTime: '2023-01-01T00:00:00Z'
}
}
};
mockAxios.onGet(`/announcement/${announcementId}`).reply(200, mockResponse);
const response = await getAnnouncementDetail(announcementId);
expect(response.data).toEqual(mockResponse);
expect(response.data.data.announcement.id).toBe(announcementId);
});
it('应该处理公告不存在的情况', async () => {
const announcementId = 999;
const mockResponse = {
code: 404,
message: '公告不存在'
};
mockAxios.onGet(`/announcement/${announcementId}`).reply(404, mockResponse);
try {
await getAnnouncementDetail(announcementId);
} catch (error) {
expect(error.response.status).toBe(404);
expect(error.response.data.code).toBe(404);
expect(error.response.data.message).toBe('公告不存在');
}
});
it('应该正确处理网络错误', async () => {
const announcementId = 456;
mockAxios.onGet(`/announcement/${announcementId}`).networkError();
await expect(getAnnouncementDetail(announcementId)).rejects.toThrow();
});
});
});