Passed
Pull Request — master (#287)
by
unknown
02:11
created

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

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 74
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

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