Remove client-side isLoggedIn value
[ProtonMail-WebClient.git] / packages / shared / test / contacts / csv.spec.ts
blob0ac16bef85cafe55b9a50fc60ae8e7bfb65248e1
1 import { toVCardContacts } from '@proton/shared/lib/contacts/helpers/csv';
2 import { fromVCardProperties, getVCardProperties } from '@proton/shared/lib/contacts/properties';
3 import type { PreVcardProperty, PreVcardsContact } from '@proton/shared/lib/interfaces/contacts';
4 import type { VCardContact, VCardProperty } from '@proton/shared/lib/interfaces/contacts/VCard';
6 const excludeFieldsForVerification = (contacts: VCardContact[]) => {
7     return contacts.map((contact) => {
8         const properties = getVCardProperties(contact).map(({ uid, params, ...property }) => property);
9         return fromVCardProperties(properties as VCardProperty[]);
10     });
13 describe('csv', () => {
14     describe('toVCardContacts', () => {
15         it('should convert to a vCardContact', () => {
16             const contact1: PreVcardsContact = [
17                 [{ header: 'Given name', value: 'Contact Name', field: 'fn', checked: true } as PreVcardProperty],
18                 [{ header: 'Email', value: 'contactemail@pm.me', field: 'email', checked: true } as PreVcardProperty],
19             ];
21             const contact2: PreVcardsContact = [
22                 [{ header: 'Given name', value: 'Contact Name 2', field: 'fn', checked: true } as PreVcardProperty],
23                 [{ header: 'Email', value: 'contactemail2@pm.me', field: 'email', checked: true } as PreVcardProperty],
24             ];
26             const prevCardsContacts: PreVcardsContact[] = [contact1, contact2];
28             const expected: VCardContact[] = [
29                 {
30                     fn: [{ field: 'fn', value: 'Contact Name', uid: '' }],
31                     email: [{ field: 'email', value: 'contactemail@pm.me', group: 'item1', uid: '' }],
32                 },
33                 {
34                     fn: [{ field: 'fn', value: 'Contact Name 2', uid: '' }],
35                     email: [{ field: 'email', value: 'contactemail2@pm.me', group: 'item1', uid: '' }],
36                 },
37             ];
39             const res = excludeFieldsForVerification(toVCardContacts(prevCardsContacts).rest);
41             expect(res).toEqual(excludeFieldsForVerification(expected));
42         });
44         it('should convert to a vCardContact and add email as FN when no FN', () => {
45             const contact1: PreVcardsContact = [
46                 [{ header: 'Email', value: 'contactemail@pm.me', field: 'email', checked: true } as PreVcardProperty],
47             ];
49             const contact2: PreVcardsContact = [
50                 [{ header: 'Given name', value: 'Contact Name 2', field: 'fn', checked: true } as PreVcardProperty],
51                 [{ header: 'Email', value: 'contactemail2@pm.me', field: 'email', checked: true } as PreVcardProperty],
52             ];
54             const prevCardsContacts: PreVcardsContact[] = [contact1, contact2];
56             const expected: VCardContact[] = [
57                 {
58                     fn: [{ field: 'fn', value: 'contactemail@pm.me', uid: '' }],
59                     email: [{ field: 'email', value: 'contactemail@pm.me', group: 'item1', uid: '' }],
60                 },
61                 {
62                     fn: [{ field: 'fn', value: 'Contact Name 2', uid: '' }],
63                     email: [{ field: 'email', value: 'contactemail2@pm.me', group: 'item1', uid: '' }],
64                 },
65             ];
67             const res = excludeFieldsForVerification(toVCardContacts(prevCardsContacts).rest);
69             expect(res).toEqual(excludeFieldsForVerification(expected));
70         });
72         it('should throw an error when contact has no FN and no email, and import the rest', () => {
73             const contact1: PreVcardsContact = [];
75             const contact2: PreVcardsContact = [
76                 [{ header: 'Given name', value: 'Contact Name 2', field: 'fn', checked: true } as PreVcardProperty],
77                 [{ header: 'Email', value: 'contactemail2@pm.me', field: 'email', checked: true } as PreVcardProperty],
78             ];
80             const prevCardsContacts: PreVcardsContact[] = [contact1, contact2];
82             const expected: VCardContact[] = [
83                 {
84                     fn: [{ field: 'fn', value: 'Contact Name 2', uid: '' }],
85                     email: [{ field: 'email', value: 'contactemail2@pm.me', group: 'item1', uid: '' }],
86                 },
87             ];
89             const { errors, rest } = toVCardContacts(prevCardsContacts);
90             const res = excludeFieldsForVerification(rest);
92             expect(res).toEqual(excludeFieldsForVerification(expected));
93             expect(errors.length).toEqual(1);
94         });
95     });
96 });