Passed
Pull Request — master (#287)
by
unknown
03:50 queued 01:52
created

server/src/Application/HumanResource/Leave/Query/GetLeavesCalendarQueryHandler.spec.ts   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 75
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 64
mnd 2
bc 2
fnc 0
dl 0
loc 75
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import { LeaveRequest } from 'src/Domain/HumanResource/Leave/LeaveRequest.entity';
2
import { User } from 'src/Domain/HumanResource/User/User.entity';
3
import { DateUtilsAdapter } from 'src/Infrastructure/Adapter/DateUtilsAdapter';
4
import { LeaveRequestRepository } from 'src/Infrastructure/HumanResource/Leave/Repository/LeaveRequestRepository';
5
import { instance, mock, verify, when } from 'ts-mockito';
6
import { GetLeavesCalendarQuery } from './GetLeavesCalendarQuery';
7
import { GetLeavesCalendarQueryHandler } from './GetLeavesCalendarQueryHandler';
8
9
describe('GetLeavesCalendarQueryHandler', () => {
10
  let dateUtilsAdapter: DateUtilsAdapter;
11
  let leaveRequestRepository: LeaveRequestRepository;
12
  let queryHandler: GetLeavesCalendarQueryHandler;
13
14
  beforeEach(() => {
15
    dateUtilsAdapter = mock(DateUtilsAdapter);
16
    leaveRequestRepository = mock(LeaveRequestRepository);
17
18
    queryHandler = new GetLeavesCalendarQueryHandler(
19
      instance(dateUtilsAdapter),
20
      instance(leaveRequestRepository)
21
    );
22
  });
23
24
  it('testGetLeavesCalendar', async () => {
25
    const user = mock(User);
26
    when(user.getFullName()).thenReturn('Jane Dean');
27
28
    const leaveRequest = mock(LeaveRequest);
29
    when(leaveRequest.getStartDate()).thenReturn(
30
      'Thu Nov 03 2022 12:00:00 GMT+0100 (Central European Standard Time)'
31
    );
32
    when(leaveRequest.getEndDate()).thenReturn(
33
      'Sat Nov 05 2022 12:00:00 GMT+0100 (Central European Standard Time)'
34
    );
35
    when(leaveRequest.getUser()).thenReturn(instance(user));
36
37
    when(leaveRequestRepository.findAcceptedLeaveRequests()).thenResolve([
38
      instance(leaveRequest)
39
    ]);
40
41
    const result = await queryHandler.execute(new GetLeavesCalendarQuery());
42
43
    const lines = result.split('\r\n');
44
45
    const findNext = (pattern: string): string | null => {
46
      while (lines.length > 0) {
47
        const line = lines.shift();
48
        if (line.startsWith(pattern)) {
49
          return line;
50
        }
51
      }
52
      return null;
53
    };
54
55
    expect(findNext('BEGIN:VCALENDAR')).not.toBeNull();
56
    expect(findNext('VERSION:2.0')).not.toBeNull();
57
    expect(findNext('PRODID:-//Fairness//Permacoop//FR')).not.toBeNull();
58
    expect(findNext('CALSCALE:GREGORIAN')).not.toBeNull();
59
    expect(findNext('X-WR-CALNAME:Congés Fairness')).not.toBeNull();
60
    expect(findNext('X-APPLE-CALENDAR-COLOR:#00CA9E')).not.toBeNull();
61
62
    expect(findNext('BEGIN:VEVENT')).not.toBeNull();
63
    expect(findNext('DTSTART;VALUE=DATE:20221103')).not.toBeNull();
64
    expect(findNext('DTEND;VALUE=DATE:20221105')).not.toBeNull();
65
    expect(findNext('SUMMARY:Congés Jane Dean')).not.toBeNull();
66
    expect(findNext('END:VEVENT')).not.toBeNull();
67
68
    expect(findNext('END:VCALENDAR')).not.toBeNull();
69
70
    expect(lines).toHaveLength(0);
71
72
    verify(leaveRequestRepository.findAcceptedLeaveRequests()).once();
73
  });
74
});
75