Passed
Push — master ( fa5b81...8559eb )
by Mathieu
01:32
created

api/src/Application/Order/Command/ShippingCost/UpdateShippingCostCommandHandler.spec.ts   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 99
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 78
mnd 2
bc 2
fnc 0
dl 0
loc 99
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 { ShippingCostRepository } from 'src/Infrastructure/Order/Repository/ShippingCostRepository';
3
import { IsShippingCostAlreadyExist } from 'src/Domain/Order/Specification/IsShippingCostAlreadyExist';
4
import { ShippingCost } from 'src/Domain/Order/ShippingCost.entity';
5
import { ShippingCostNotFoundException } from 'src/Domain/Order/Exception/ShippingCostNotFoundException';
6
import { ShippingCostAlreadyExistException } from 'src/Domain/Order/Exception/ShippingCostAlreadyExistException';
7
import { UpdateShippingCostCommandHandler } from './UpdateShippingCostCommandHandler';
8
import { UpdateShippingCostCommand } from './UpdateShippingCostCommand';
9
10
describe('UpdateShippingCostCommandHandler', () => {
11
  let shippingcostRepository: ShippingCostRepository;
12
  let isShippingCostAlreadyExist: IsShippingCostAlreadyExist;
13
14
  let handler: UpdateShippingCostCommandHandler;
15
16
  const shippingcost = mock(ShippingCost);
17
  const command = new UpdateShippingCostCommand(
18
    '8a9df044-94a7-4e6c-abd1-ecdd69d788d5',
19
    1000,
20
    9.99
21
  );
22
23
  beforeEach(() => {
24
    shippingcostRepository = mock(ShippingCostRepository);
25
    isShippingCostAlreadyExist = mock(IsShippingCostAlreadyExist);
26
    handler = new UpdateShippingCostCommandHandler(
27
      instance(shippingcostRepository),
28
      instance(isShippingCostAlreadyExist)
29
    );
30
  });
31
32
  it('testShippingCostNotFound', async () => {
33
    when(
34
      shippingcostRepository.findOneById('8a9df044-94a7-4e6c-abd1-ecdd69d788d5')
35
    ).thenResolve(null);
36
37
    try {
38
      expect(await handler.execute(command)).toBeUndefined();
39
    } catch (e) {
40
      expect(e).toBeInstanceOf(ShippingCostNotFoundException);
41
      expect(e.message).toBe('shipping_costs.errors.not_found');
42
      verify(
43
        shippingcostRepository.findOneById('8a9df044-94a7-4e6c-abd1-ecdd69d788d5')
44
      ).once();
45
      verify(isShippingCostAlreadyExist.isSatisfiedBy(anything())).never();
46
      verify(shippingcostRepository.save(anything())).never();
47
      verify(
48
        shippingcost.update(anything(), anything())
49
      ).never();
50
    }
51
  });
52
53
  it('testShippingCostAlreadyExist', async () => {
54
    when(shippingcost.getGrams()).thenReturn(100);
55
    when(
56
      shippingcostRepository.findOneById('8a9df044-94a7-4e6c-abd1-ecdd69d788d5')
57
    ).thenResolve(instance(shippingcost));
58
    when(isShippingCostAlreadyExist.isSatisfiedBy(1000)).thenResolve(true);
59
60
    try {
61
      expect(await handler.execute(command)).toBeUndefined();
62
    } catch (e) {
63
      expect(e).toBeInstanceOf(ShippingCostAlreadyExistException);
64
      expect(e.message).toBe('shipping_costs.errors.already_exist');
65
      verify(
66
        shippingcostRepository.findOneById('8a9df044-94a7-4e6c-abd1-ecdd69d788d5')
67
      ).once();
68
      verify(
69
        isShippingCostAlreadyExist.isSatisfiedBy(1000)
70
      ).once();
71
      verify(
72
        shippingcost.update(anything(), anything())
73
      ).never();
74
      verify(shippingcostRepository.save(anything())).never();
75
    }
76
  });
77
78
  it('testSuccessfullyUpdated', async () => {
79
    when(shippingcost.getId()).thenReturn('8a9df044-94a7-4e6c-abd1-ecdd69d788d5');
80
    when(shippingcost.getGrams()).thenReturn(1000);
81
    when(
82
      shippingcostRepository.findOneById('8a9df044-94a7-4e6c-abd1-ecdd69d788d5')
83
    ).thenResolve(instance(shippingcost));
84
85
    expect(await handler.execute(command)).toBe(
86
      '8a9df044-94a7-4e6c-abd1-ecdd69d788d5'
87
    );
88
89
    verify(isShippingCostAlreadyExist.isSatisfiedBy(anything())).never();
90
    verify(
91
      shippingcost.update(
92
        1000,
93
        999
94
      )
95
    ).calledBefore(shippingcostRepository.save(instance(shippingcost)));
96
    verify(shippingcostRepository.save(instance(shippingcost))).once();
97
  });
98
});
99