Passed
Pull Request — master (#84)
by Mathieu
01:54
created

api/src/Application/Product/Command/RemoveProductCommandHandler.spec.ts   A

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 56
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 1
eloc 46
mnd 1
bc 1
fnc 0
dl 0
loc 56
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
rs 10
1
import { mock, instance, when, verify, anything } from 'ts-mockito';
2
import { ProductRepository } from 'src/Infrastructure/Product/Repository/ProductRepository';
3
import { Product } from 'src/Domain/Product/Product.entity';
4
import { RemoveProductCommandHandler } from './RemoveProductCommandHandler';
5
import { RemoveProductCommand } from './RemoveProductCommand';
6
import { ProductNotFoundException } from 'src/Domain/Product/Exception/ProductNotFoundException';
7
8
describe('RemoveProductCommandHandler', () => {
9
  let productRepository: ProductRepository;
10
  let removedProduct: Product;
11
  let handler: RemoveProductCommandHandler;
12
13
  const command = new RemoveProductCommand('17efcbee-bd2f-410e-9e99-51684b592bad');
14
15
  beforeEach(() => {
16
    productRepository = mock(ProductRepository);
17
    removedProduct = mock(Product);
18
19
    handler = new RemoveProductCommandHandler(
20
      instance(productRepository)
21
    );
22
  });
23
24
  it('testProductRemovedSuccessfully', async () => {
25
    when(productRepository.findOneById('17efcbee-bd2f-410e-9e99-51684b592bad'))
26
      .thenResolve(instance(removedProduct));
27
    when(removedProduct.getId()).thenReturn(
28
      '17efcbee-bd2f-410e-9e99-51684b592bad'
29
    );
30
    when(
31
      productRepository.save(instance(removedProduct))
32
    ).thenResolve(instance(removedProduct));
33
34
    await handler.execute(command);
35
36
    verify(
37
      productRepository.remove(instance(removedProduct))
38
    ).once();
39
    verify(productRepository.findOneById('17efcbee-bd2f-410e-9e99-51684b592bad')).once();
40
  });
41
42
  it('testProductNotFound', async () => {
43
    when(productRepository.findOneById('17efcbee-bd2f-410e-9e99-51684b592bad'))
44
      .thenResolve(null);
45
46
    try {
47
      expect(await handler.execute(command)).toBeUndefined();
48
    } catch (e) {
49
      expect(e).toBeInstanceOf(ProductNotFoundException);
50
      expect(e.message).toBe('products.errors.not_found');
51
      verify(productRepository.findOneById('17efcbee-bd2f-410e-9e99-51684b592bad')).once();
52
      verify(productRepository.remove(anything())).never();
53
    }
54
  });
55
});
56