完成上传下载连接,公告管理与详情页面,求种区页面,轮播图折扣显示,修改部分bug
Change-Id: I86fc294e32911cb3426a8b16f90aca371f975c11
diff --git a/src/api/announcement.test.js b/src/api/announcement.test.js
new file mode 100644
index 0000000..bae9482
--- /dev/null
+++ b/src/api/announcement.test.js
@@ -0,0 +1,139 @@
+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();
+ });
+ });
+});
\ No newline at end of file