Bladeren bron

✅ test(file): 实现createMultipartUploadPolicy方法的单元测试

- 移除测试代码的注释标记,启用createMultipartUploadPolicy测试套件
- 添加成功创建多部分上传策略的测试用例
- 添加处理多部分上传创建错误的测试用例
- 改进MinioService模拟实现方式,增强测试隔离性
yourname 2 maanden geleden
bovenliggende
commit
81b930e3a2
1 gewijzigde bestanden met toevoegingen van 61 en 46 verwijderingen
  1. 61 46
      src/server/modules/files/__tests__/file.service.test.ts

+ 61 - 46
src/server/modules/files/__tests__/file.service.test.ts

@@ -234,59 +234,74 @@ describe('FileService', () => {
     });
   });
 
-  // describe('createMultipartUploadPolicy', () => {
-  //   it('should create multipart upload policy successfully', async () => {
-  //     const mockFileData = {
-  //       name: 'large-file.zip',
-  //       type: 'application/zip',
-  //       uploadUserId: 1
-  //     };
+  describe('createMultipartUploadPolicy', () => {
+    it('should create multipart upload policy successfully', async () => {
+      const mockFileData = {
+        name: 'large-file.zip',
+        type: 'application/zip',
+        uploadUserId: 1
+      };
 
-  //     const mockUploadId = 'upload-123';
-  //     const mockUploadUrls = ['url1', 'url2', 'url3'];
-  //     const mockSavedFile = {
-  //       id: 1,
-  //       ...mockFileData,
-  //       path: '1/test-uuid-123-large-file.zip',
-  //       uploadTime: new Date(),
-  //       createdAt: new Date(),
-  //       updatedAt: new Date()
-  //     } as File;
+      const mockUploadId = 'upload-123';
+      const mockUploadUrls = ['url1', 'url2', 'url3'];
+      const mockSavedFile = {
+        id: 1,
+        ...mockFileData,
+        path: '1/test-uuid-123-large-file.zip',
+        uploadTime: new Date(),
+        createdAt: new Date(),
+        updatedAt: new Date()
+      } as File;
 
-  //     vi.mocked(mockMinioService.createMultipartUpload).mockResolvedValue(mockUploadId);
-  //     vi.mocked(mockMinioService.generateMultipartUploadUrls).mockResolvedValue(mockUploadUrls);
-  //     vi.spyOn(fileService, 'create').mockResolvedValue(mockSavedFile);
+      const mockCreateMultipartUpload = vi.fn().mockResolvedValue(mockUploadId);
+      const mockGenerateMultipartUploadUrls = vi.fn().mockResolvedValue(mockUploadUrls);
 
-  //     const result = await fileService.createMultipartUploadPolicy(mockFileData, 3);
+      vi.mocked(MinioService).mockImplementation(() => ({
+        createMultipartUpload: mockCreateMultipartUpload,
+        generateMultipartUploadUrls: mockGenerateMultipartUploadUrls,
+        bucketName: 'd8dai'
+      } as unknown as MinioService));
 
-  //     expect(mockMinioService.createMultipartUpload).toHaveBeenCalledWith('d8dai', '1/test-uuid-123-large-file.zip');
-  //     expect(mockMinioService.generateMultipartUploadUrls).toHaveBeenCalledWith(
-  //       'd8dai',
-  //       '1/test-uuid-123-large-file.zip',
-  //       mockUploadId,
-  //       3
-  //     );
-  //     expect(result).toEqual({
-  //       file: mockSavedFile,
-  //       uploadId: mockUploadId,
-  //       uploadUrls: mockUploadUrls,
-  //       bucket: 'd8dai',
-  //       key: '1/test-uuid-123-large-file.zip'
-  //     });
-  //   });
+      const fileService = new FileService(mockDataSource);
+      vi.spyOn(fileService, 'create').mockResolvedValue(mockSavedFile);
 
-  //   it('should handle errors during multipart upload creation', async () => {
-  //     const mockFileData = {
-  //       name: 'large-file.zip',
-  //       uploadUserId: 1
-  //     };
+      const result = await fileService.createMultipartUploadPolicy(mockFileData, 3);
 
-  //     vi.mocked(mockMinioService.createMultipartUpload).mockRejectedValue(new Error('MinIO error'));
+      expect(mockCreateMultipartUpload).toHaveBeenCalledWith('d8dai', '1/test-uuid-123-large-file.zip');
+      expect(mockGenerateMultipartUploadUrls).toHaveBeenCalledWith(
+        'd8dai',
+        '1/test-uuid-123-large-file.zip',
+        mockUploadId,
+        3
+      );
+      expect(result).toEqual({
+        file: mockSavedFile,
+        uploadId: mockUploadId,
+        uploadUrls: mockUploadUrls,
+        bucket: 'd8dai',
+        key: '1/test-uuid-123-large-file.zip'
+      });
+    });
 
-  //     await expect(fileService.createMultipartUploadPolicy(mockFileData, 3)).rejects.toThrow('创建多部分上传策略失败');
-  //     expect(logger.error).toHaveBeenCalled();
-  //   });
-  // });
+    it('should handle errors during multipart upload creation', async () => {
+      const mockFileData = {
+        name: 'large-file.zip',
+        uploadUserId: 1
+      };
+
+      const mockCreateMultipartUpload = vi.fn().mockRejectedValue(new Error('MinIO error'));
+
+      vi.mocked(MinioService).mockImplementation(() => ({
+        createMultipartUpload: mockCreateMultipartUpload,
+        bucketName: 'd8dai'
+      } as unknown as MinioService));
+
+      const fileService = new FileService(mockDataSource);
+
+      await expect(fileService.createMultipartUploadPolicy(mockFileData, 3)).rejects.toThrow('创建多部分上传策略失败');
+      expect(logger.error).toHaveBeenCalled();
+    });
+  });
 
   // describe('completeMultipartUpload', () => {
   //   it('should complete multipart upload successfully', async () => {