StreamDownloadFile.spec.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import 'reflect-metadata'
  2. import { Readable } from 'stream'
  3. import { Logger } from 'winston'
  4. import { FileDownloaderInterface } from '../../Services/FileDownloaderInterface'
  5. import { StreamDownloadFile } from './StreamDownloadFile'
  6. describe('StreamDownloadFile', () => {
  7. let fileDownloader: FileDownloaderInterface
  8. let logger: Logger
  9. const createUseCase = () => new StreamDownloadFile(fileDownloader, logger)
  10. beforeEach(() => {
  11. fileDownloader = {} as jest.Mocked<FileDownloaderInterface>
  12. fileDownloader.createDownloadStream = jest.fn().mockReturnValue(new Readable())
  13. logger = {} as jest.Mocked<Logger>
  14. logger.error = jest.fn()
  15. })
  16. it('should stream download file contents from S3', async () => {
  17. const result = await createUseCase().execute({
  18. ownerUuid: '2-3-4',
  19. resourceRemoteIdentifier: '1-2-3',
  20. startRange: 0,
  21. endRange: 200,
  22. })
  23. expect(result.success).toBeTruthy()
  24. })
  25. it('should not stream download file contents from S3 if it fails', async () => {
  26. fileDownloader.createDownloadStream = jest.fn().mockImplementation(() => {
  27. throw new Error('oops')
  28. })
  29. const result = await createUseCase().execute({
  30. ownerUuid: '2-3-4',
  31. resourceRemoteIdentifier: '1-2-3',
  32. startRange: 0,
  33. endRange: 200,
  34. })
  35. expect(result.success).toBeFalsy()
  36. })
  37. })