完成上传下载连接,公告管理与详情页面,求种区页面,轮播图折扣显示,修改部分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