Passed
Pull Request — master (#105)
by Mathieu
02:00 queued 25s
created

server/src/Application/File/Command/DownloadFileCommandHandler.spec.ts   A

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 74
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 1
eloc 57
mnd 1
bc 1
fnc 0
dl 0
loc 74
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import {mock, instance, when, verify, anything} from 'ts-mockito';
2
import {FileRepository} from 'src/Infrastructure/File/Repository/FileRepository';
3
import {LocalFileStorageAdapter} from 'src/Infrastructure/Adapter/LocalFileStorageAdapter';
4
import {File} from 'src/Domain/File/File.entity';
5
import {DownloadFileQueryHandler} from './DownloadFileQueryHandler';
6
import {DownloadFileQuery} from './DownloadFileQuery';
7
import {DownloadedFileView} from '../View/DownloadedFileView';
8
import {FileNotFoundException} from 'src/Domain/File/Exception/FileNotFoundException';
9
10
describe('DownloadFileCommandHandler', () => {
11
  let handler: DownloadFileQueryHandler;
12
  let localFileStorageAdapter: LocalFileStorageAdapter;
13
  let fileRepository: FileRepository;
14
15
  beforeEach(() => {
16
    localFileStorageAdapter = mock(LocalFileStorageAdapter);
17
    fileRepository = mock(FileRepository);
18
19
    handler = new DownloadFileQueryHandler(
20
      instance(fileRepository),
21
      instance(localFileStorageAdapter)
22
    );
23
  });
24
25
  it('testDownloadFile', async () => {
26
    const buffer = mock(Buffer);
27
    const file = mock(File);
28
    when(file.getOriginalName()).thenReturn('file_mathieu_marchois.pdf');
29
    when(file.getMimeType()).thenReturn('application/pdf');
30
31
    when(
32
      fileRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
33
    ).thenResolve(instance(file));
34
    when(localFileStorageAdapter.download(instance(file))).thenResolve(
35
      instance(buffer)
36
    );
37
    expect(
38
      await handler.execute(
39
        new DownloadFileQuery('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
40
      )
41
    ).toMatchObject(
42
      new DownloadedFileView(
43
        'file_mathieu_marchois.pdf',
44
        'application/pdf',
45
        instance(buffer)
46
      )
47
    );
48
49
    verify(
50
      fileRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
51
    ).once();
52
    verify(localFileStorageAdapter.download(instance(file))).once();
53
  });
54
55
  it('testFileNotFound', async () => {
56
    when(
57
      fileRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
58
    ).thenResolve(null);
59
60
    try {
61
      await handler.execute(
62
        new DownloadFileQuery('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
63
      );
64
    } catch (e) {
65
      expect(e).toBeInstanceOf(FileNotFoundException);
66
      expect(e.message).toBe('file.errors.not_found');
67
      verify(
68
        fileRepository.findOneById('cfdd06eb-cd71-44b9-82c6-46110b30ce05')
69
      ).once();
70
      verify(localFileStorageAdapter.download(anything())).never();
71
    }
72
  });
73
});
74