Merge "add nginx origin"
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);
+ });
+ });
+});