Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / applications / calendar / src / app / helpers / attendees.test.ts
blob8459d979310a1f7387e993c7ad823b3eb8b5d254
1 import type { SimpleMap } from '@proton/shared/lib/interfaces';
2 import type { ContactEmail } from '@proton/shared/lib/interfaces/contacts';
4 import type { DisplayNameEmail } from '../containers/calendar/interface';
5 import { getOrganizerDisplayData } from './attendees';
7 const generateDummyContactEmail = ({
8     email,
9     name,
10     contactEmailID,
11     contactID,
12 }: {
13     email: string;
14     name: string;
15     contactEmailID: string;
16     contactID: string;
17 }) => {
18     const result: ContactEmail = {
19         ID: contactEmailID,
20         Email: email,
21         Name: name,
22         Type: [],
23         Defaults: 0,
24         Order: 0,
25         ContactID: contactID,
26         LabelIDs: [],
27         LastUsedTime: 0,
28     };
30     return result;
33 describe('getOrganizerDisplayData()', () => {
34     const testEmail = 'te_st.E-mail@proton.me';
35     const organizer = { email: testEmail, cn: 'The organizer' };
36     const isOrganizer = false;
38     const contacts = [
39         { name: 'Unexpected match', email: testEmail, contactEmailID: '2', contactID: 'unexpected' },
40         {
41             name: 'Canonicalized match',
42             email: 'testemail@proton.me',
43             contactEmailID: '3',
44             contactID: 'internal',
45         },
46         { name: 'A gmail match', email: 'te_ste-mail@proton,me', contactEmailID: '4', contactID: 'gmail' },
47         { name: 'A lonely contact', email: 'lonely@proton.me', contactEmailID: '5', contactID: 'other' },
48         { name: 'Expected match', email: 'te_st.e-mail@proton.me', contactEmailID: '1', contactID: 'expected' },
49     ];
51     // keys in contactsEmailMap are emails canonicalized with the generic scheme
52     const contactsEmailMap = contacts.reduce<SimpleMap<ContactEmail>>((acc, contact) => {
53         acc[contact.email] = generateDummyContactEmail(contact);
54         return acc;
55     }, {});
57     // keys in displayNameEmailMap are emails canonicalized by guess. In particular all Proton ones are canonicalized internally
58     const displayNameEmailMap: SimpleMap<DisplayNameEmail> = {
59         'testemail@proton.me': { displayName: "It's me", displayEmail: 'test.email@proton.me' },
60         'lonely@proton.me': { displayName: 'Lone star', displayEmail: 'Lonely@proton.me' },
61     };
63     test('Distinguishes dots, hyphens and underscores, but not capitalization, to return correct contactId', () => {
64         const { contactID } = getOrganizerDisplayData(organizer, isOrganizer, contactsEmailMap, displayNameEmailMap);
65         expect(contactID).toEqual('expected');
66     });
68     test('Neither distinguishes dots, hyphens, underscores or capitalization, to return correct display name', () => {
69         const { title, name } = getOrganizerDisplayData(organizer, isOrganizer, contactsEmailMap, displayNameEmailMap);
70         expect(name).toEqual("It's me");
71         expect(title).toEqual("It's me <te_st.E-mail@proton.me>");
72     });
74     test('Neither distinguishes dots, hyphens, underscores or capitalization, to return correct initials', () => {
75         const { initials } = getOrganizerDisplayData(organizer, isOrganizer, contactsEmailMap, displayNameEmailMap);
76         expect(initials).toEqual('IM');
77     });
79     describe('when user is organiser', () => {
80         const isOrganizer = true;
82         test('Neither distinguish dots, hyphens, underscores nor capitalization, to return correct display name', () => {
83             expect(getOrganizerDisplayData(organizer, isOrganizer, contactsEmailMap, displayNameEmailMap)).toEqual({
84                 name: 'You',
85                 title: testEmail,
86                 contactID: 'expected',
87                 initials: 'IM',
88             });
89         });
90     });
91 });