Преглед на файлове

✅ test(file): add tests for getFileDownloadUrl method

- 实现getFileDownloadUrl方法的单元测试
- 测试正常获取下载URL的场景
- 测试文件不存在时的错误处理
- 完善MinioService的模拟实现
yourname преди 2 месеца
родител
ревизия
5c4798b634
променени са 1 файла, в които са добавени 35 реда и са изтрити 27 реда
  1. 35 27
      src/server/modules/files/__tests__/file.service.test.ts

+ 35 - 27
src/server/modules/files/__tests__/file.service.test.ts

@@ -192,39 +192,47 @@ describe('FileService', () => {
     });
   });
 
-  // describe('getFileDownloadUrl', () => {
-  //   it('should return download URL with filename', async () => {
-  //     const mockFile = {
-  //       id: 1,
-  //       path: '1/test-file.txt',
-  //       name: '测试文件.txt'
-  //     } as File;
+  describe('getFileDownloadUrl', () => {
+    it('should return download URL with filename', async () => {
+      const mockFile = {
+        id: 1,
+        path: '1/test-file.txt',
+        name: '测试文件.txt'
+      } as File;
 
-  //     const mockPresignedUrl = 'https://minio.example.com/download-url';
+      const mockPresignedUrl = 'https://minio.example.com/download-url';
 
-  //     vi.spyOn(fileService, 'getById').mockResolvedValue(mockFile);
-  //     vi.mocked(mockMinioService.getPresignedFileDownloadUrl).mockResolvedValue(mockPresignedUrl);
+      const mockGetPresignedFileDownloadUrl = vi.fn().mockResolvedValue(mockPresignedUrl);
 
-  //     const result = await fileService.getFileDownloadUrl(1);
+      vi.mocked(MinioService).mockImplementation(() => ({
+        getPresignedFileDownloadUrl: mockGetPresignedFileDownloadUrl,
+        bucketName: 'd8dai'
+      } as unknown as MinioService));
 
-  //     expect(fileService.getById).toHaveBeenCalledWith(1);
-  //     expect(mockMinioService.getPresignedFileDownloadUrl).toHaveBeenCalledWith(
-  //       'd8dai',
-  //       '1/test-file.txt',
-  //       '测试文件.txt'
-  //     );
-  //     expect(result).toEqual({
-  //       url: mockPresignedUrl,
-  //       filename: '测试文件.txt'
-  //     });
-  //   });
+      const fileService = new FileService(mockDataSource);
+      vi.spyOn(fileService, 'getById').mockResolvedValue(mockFile);
 
-  //   it('should throw error when file not found', async () => {
-  //     vi.spyOn(fileService, 'getById').mockResolvedValue(null);
+      const result = await fileService.getFileDownloadUrl(1);
 
-  //     await expect(fileService.getFileDownloadUrl(999)).rejects.toThrow('文件不存在');
-  //   });
-  // });
+      expect(fileService.getById).toHaveBeenCalledWith(1);
+      expect(mockGetPresignedFileDownloadUrl).toHaveBeenCalledWith(
+        'd8dai',
+        '1/test-file.txt',
+        '测试文件.txt'
+      );
+      expect(result).toEqual({
+        url: mockPresignedUrl,
+        filename: '测试文件.txt'
+      });
+    });
+
+    it('should throw error when file not found', async () => {
+      const fileService = new FileService(mockDataSource);
+      vi.spyOn(fileService, 'getById').mockResolvedValue(null);
+
+      await expect(fileService.getFileDownloadUrl(999)).rejects.toThrow('文件不存在');
+    });
+  });
 
   // describe('createMultipartUploadPolicy', () => {
   //   it('should create multipart upload policy successfully', async () => {