Passed
Pull Request — master (#235)
by Mathieu
01:39
created

server/src/Application/HumanResource/MealTicket/Query/GetMealTicketsPerMonthQueryHandler.spec.ts   A

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 135
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 1
eloc 106
mnd 1
bc 1
fnc 0
dl 0
loc 135
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 { GetMealTicketsPerMonthQueryHandler } from './GetMealTicketsPerMonthQueryHandler';
3
import { GetMealTicketsPerMonthQuery } from './GetMealTicketsPerMonthQuery';
4
import { MealTicketRemovalRepository } from 'src/Infrastructure/HumanResource/MealTicket/Repository/MealTicketRemovalRepository';
5
import { CooperativeRepository } from 'src/Infrastructure/Settings/Repository/CooperativeRepository';
6
import { EventRepository } from 'src/Infrastructure/FairCalendar/Repository/EventRepository';
7
import { UserRepository } from 'src/Infrastructure/HumanResource/User/Repository/UserRepository';
8
import { CooperativeNotFoundException } from 'src/Domain/Settings/Repository/CooperativeNotFoundException';
9
import { Cooperative } from 'src/Domain/Settings/Cooperative.entity';
10
import { User } from 'src/Domain/HumanResource/User/User.entity';
11
import { MealTicketsPerMonthView } from '../Views/MealTicketsPerMonthView';
12
13
describe('GetMealTicketsPerMonthQueryHandler', () => {
14
  let mealTicketRemovalRepository: MealTicketRemovalRepository;
15
  let userRepository: UserRepository;
16
  let eventRepository: EventRepository;
17
  let cooperativeRepository: CooperativeRepository;
18
  let queryHandler: GetMealTicketsPerMonthQueryHandler;
19
20
  const date = new Date();
21
  const query = new GetMealTicketsPerMonthQuery(date);
22
23
  beforeEach(() => {
24
    mealTicketRemovalRepository = mock(MealTicketRemovalRepository);
25
    userRepository = mock(UserRepository);
26
    eventRepository = mock(EventRepository);
27
    cooperativeRepository = mock(CooperativeRepository);
28
29
    queryHandler = new GetMealTicketsPerMonthQueryHandler(
30
      instance(mealTicketRemovalRepository),
31
      instance(userRepository),
32
      instance(eventRepository),
33
      instance(cooperativeRepository),
34
    );
35
  });
36
37
  it('testCooperativeNotFound', async () => {
38
    when(cooperativeRepository.find()).thenResolve(null);
39
40
    try {
41
      expect(await queryHandler.execute(query)).toBeUndefined();
42
    } catch (e) {
43
      expect(e).toBeInstanceOf(CooperativeNotFoundException);
44
      expect(e.message).toBe('settings.errors.cooperative_not_found');
45
      verify(
46
        userRepository.findUsers(anything())
47
      ).never();
48
      verify(
49
        mealTicketRemovalRepository.findByMonth(anything())
50
      ).never();
51
      verify(
52
        eventRepository.findAllEventsByMonth(anything())
53
      ).never();
54
    }
55
  });
56
57
  it('testGetMealTicketsPerMonth', async () => {
58
    const cooperative = mock(Cooperative);
59
    when(cooperative.getDayDuration()).thenReturn(420); // One day
60
61
    when(cooperativeRepository.find())
62
      .thenResolve(instance(cooperative));
63
64
    const user = mock(User);
65
    when(user.getId()).thenReturn('b1e67870-f2bd-4cdc-8467-e13568550eb8');
66
    when(user.getFirstName()).thenReturn('Mathieu');
67
    when(user.getLastName()).thenReturn('MARCHOIS');
68
69
    const user2 = mock(User);
70
    when(user2.getId()).thenReturn('86ca8576-3283-4702-84b1-ee0d8c5f5ca8');
71
    when(user2.getFirstName()).thenReturn('Hélène');
72
    when(user2.getLastName()).thenReturn('MARCHOIS');
73
74
    when(userRepository.findUsers(false))
75
      .thenResolve([instance(user), instance(user2)]);
76
77
    when(mealTicketRemovalRepository.findByMonth(date))
78
      .thenResolve([
79
        { id: 'b1e67870-f2bd-4cdc-8467-e13568550eb8', count: 1 },
80
      ]);
81
82
    when(eventRepository.findAllEventsByMonth(date))
83
      .thenResolve([
84
        {
85
          date: '2022-03-22',
86
          user: 'b1e67870-f2bd-4cdc-8467-e13568550eb8',
87
          duration: 420
88
        },
89
        {
90
          date: '2022-03-21',
91
          user: 'b1e67870-f2bd-4cdc-8467-e13568550eb8',
92
          duration: 420
93
        },
94
        {
95
96
          date: '2022-03-20',
97
          user: 'b1e67870-f2bd-4cdc-8467-e13568550eb8',
98
          duration: 120
99
        },
100
        {
101
          date: '2022-03-22',
102
          user: '86ca8576-3283-4702-84b1-ee0d8c5f5ca8',
103
          duration: 420
104
        },
105
      ]);
106
107
    expect(await queryHandler.execute(query)).toMatchObject(
108
      [
109
        new MealTicketsPerMonthView(
110
          'Mathieu',
111
          'MARCHOIS',
112
          1,
113
          1
114
        ),
115
        new MealTicketsPerMonthView(
116
          'Hélène',
117
          'MARCHOIS',
118
          1,
119
          0
120
        )
121
      ]
122
    );
123
    
124
    verify(
125
      userRepository.findUsers(false)
126
    ).once();
127
    verify(
128
      mealTicketRemovalRepository.findByMonth(date)
129
    ).once();
130
    verify(
131
      eventRepository.findAllEventsByMonth(date)
132
    ).once();
133
  });
134
});
135