我是人,我做了悬赏中心,可以进行悬赏哦11111111

Change-Id: I5911ca3986d0755fb99e66757644190372aef7a7
diff --git a/tests/bounty/bounty.test.ts b/tests/bounty/bounty.test.ts
new file mode 100644
index 0000000..730b0f0
--- /dev/null
+++ b/tests/bounty/bounty.test.ts
@@ -0,0 +1,151 @@
+import * as bountyService from '../../src/services/bounty/bounty';
+
+// Mock request module
+jest.mock('@umijs/max', () => ({
+  request: jest.fn(),
+}));
+
+const { request } = require('@umijs/max');
+
+describe('Bounty Service', () => {
+  beforeEach(() => {
+    jest.clearAllMocks();
+  });
+
+  // ✅ 悬赏列表相关测试
+  describe('getBountyList', () => {
+    it('应该成功获取悬赏列表', async () => {
+      const mockResponse = {
+        code: 200,
+        data: {
+          records: [
+            {
+              id: 1,
+              title: '测试悬赏',
+              creator_id: 1,
+              reward: 100,
+              deadline: '2023-12-31',
+              status: 0,
+              submissionsCount: 0
+            }
+          ],
+          total: 1
+        }
+      };
+
+      (request as jest.Mock).mockResolvedValue(mockResponse);
+
+      const result = await bountyService.getBountyList({ pageNum: 1, pageSize: 10 });
+
+      expect(result).toEqual(mockResponse);
+      expect(request).toHaveBeenCalledWith('/api/bounties', {
+        method: 'GET',
+        headers: {
+          'Content-Type': 'application/json;charset=UTF-8',
+        },
+        params: { pageNum: 1, pageSize: 10 },
+      });
+    });
+  });
+
+
+  // ✅ 发布悬赏测试
+  describe('publishBounty', () => {
+    it('应该成功发布悬赏', async () => {
+      const mockResponse = {
+        code: 200,
+        msg: '发布成功'
+      };
+
+      (request as jest.Mock).mockResolvedValue(mockResponse);
+
+      const postData = {
+        title: '新悬赏标题',
+        description: '新悬赏描述',
+        reward: 100,
+        deadline: '2023-12-31T23:59:59'
+      };
+
+      const result = await bountyService.publishBounty(postData);
+
+      expect(result).toEqual(mockResponse);
+      expect(request).toHaveBeenCalledWith('/api/bounties/publish', {
+        method: 'POST',
+        headers: {
+          'Content-Type': 'application/json;charset=UTF-8',
+        },
+        data: {
+          ...postData,
+          status: 0
+        },
+      });
+    });
+  });
+
+  // ✅ 提交回复测试
+  describe('submitBountyReply', () => {
+    it('应该成功提交回复', async () => {
+      const mockResponse = {
+        code: 200,
+        data: {
+          id: 1
+        },
+        msg: '操作成功'
+      };
+
+      (request as jest.Mock).mockResolvedValue(mockResponse);
+
+      const params = {
+        bountyId: 1,
+        content: '这是一条回复内容',
+        file: new File(['test'], 'test.txt') as File
+      };
+
+      const result = await bountyService.submitBountyReply(params);
+
+      expect(result).toEqual(mockResponse);
+      expect(request).toHaveBeenCalledWith('/api/bounty-submissions', {
+        method: 'POST',
+        data: expect.any(FormData)
+      });
+    });
+
+    it('应该处理空回复内容', async () => {
+      const mockResponse = {
+        code: 400,
+        data: {
+          msg: '内容不能为空'
+        },
+        msg: '操作成功'
+      };
+
+      (request as jest.Mock).mockResolvedValue(mockResponse);
+
+      const result = await bountyService.submitBountyReply({
+        bountyId: 1,
+        content: ''
+      });
+
+      expect(result).toEqual(mockResponse);
+    });
+  });
+
+  // ✅ 错误处理测试
+  describe('error handling', () => {
+    it('应该处理网络错误', async () => {
+      const error = new Error('Network Error');
+      (request as jest.Mock).mockRejectedValue(error);
+
+      await expect(bountyService.getBountyList()).rejects.toThrow('Network Error');
+    });
+
+    it('应该处理服务器错误响应', async () => {
+      const mockResponse = { code: 500, msg: '服务器内部错误' };
+      (request as jest.Mock).mockResolvedValue(mockResponse);
+
+      const result = await bountyService.getBountyList();
+
+      expect(result).toEqual(mockResponse);
+    });
+  });
+});