DRVDOC-1255: Fix issue with recent docs timestamp
[ProtonMail-WebClient.git] / applications / docs / src / app / Components / Homepage / useRecentDocuments.spec.tsx
blobc3443d731b349f58869d374e06f6eb4b4f718408
1 import type { RecentDocumentsSnapshotData } from '@proton/docs-core'
2 import { filterItems, getDisplayName } from './useRecentDocuments'
3 import type { ContactEmail } from '@proton/shared/lib/interfaces/contacts'
4 import { ServerTime } from '@proton/docs-shared'
6 jest.mock('@proton/shared/lib/i18n', () => ({ dateLocale: { code: 'us' } }))
8 describe('filterItems', () => {
9   test('if filter is set to "owned-by-me" will return items that are not shared with the user', () => {
10     const items: RecentDocumentsSnapshotData[] = [
11       {
12         name: 'name 1',
13         linkId: 'link 1',
14         volumeId: 'volume 1',
15         lastViewed: new ServerTime(1),
16         isSharedWithMe: false,
17       },
18       {
19         name: 'name 2',
20         linkId: 'link 2',
21         volumeId: 'volume 2',
22         lastViewed: new ServerTime(2),
23       },
24       {
25         name: 'name 3',
26         linkId: 'link 3',
27         volumeId: 'volume 3',
28         lastViewed: new ServerTime(3),
29         isSharedWithMe: true,
30       },
31     ]
32     expect(filterItems(items, undefined, 'owned-by-me')).toEqual([items[0], items[1]])
33   })
34   test('if filter is set to "owned-by-others" will return items that are shared with the user', () => {
35     const items: RecentDocumentsSnapshotData[] = [
36       {
37         name: 'name 1',
38         linkId: 'link 1',
39         volumeId: 'volume 1',
40         lastViewed: new ServerTime(1),
41         isSharedWithMe: false,
42       },
43       {
44         name: 'name 2',
45         linkId: 'link 2',
46         volumeId: 'volume 2',
47         lastViewed: new ServerTime(2),
48       },
49       {
50         name: 'name 3',
51         linkId: 'link 3',
52         volumeId: 'volume 3',
53         lastViewed: new ServerTime(3),
54         isSharedWithMe: true,
55       },
56     ]
57     expect(filterItems(items, undefined, 'owned-by-others')).toEqual([items[2]])
58   })
59   test('if filter is not populated return all items', () => {
60     const items: RecentDocumentsSnapshotData[] = [
61       {
62         name: 'name 1',
63         linkId: 'link 1',
64         volumeId: 'volume 1',
65         lastViewed: new ServerTime(1),
66         isSharedWithMe: false,
67       },
68       {
69         name: 'name 2',
70         linkId: 'link 2',
71         volumeId: 'volume 2',
72         lastViewed: new ServerTime(2),
73       },
74       {
75         name: 'name 3',
76         linkId: 'link 3',
77         volumeId: 'volume 3',
78         lastViewed: new ServerTime(3),
79         isSharedWithMe: true,
80       },
81     ]
82     expect(filterItems(items, undefined, undefined)).toEqual(items)
83   })
84   test('filter items starting with search term', () => {
85     const items: RecentDocumentsSnapshotData[] = [
86       {
87         name: '1',
88         linkId: 'link 1',
89         volumeId: 'volume 1',
90         lastViewed: new ServerTime(1),
91         isSharedWithMe: false,
92       },
93       {
94         name: 'name 2',
95         linkId: 'link 2',
96         volumeId: 'volume 2',
97         lastViewed: new ServerTime(2),
98       },
99       {
100         name: 'name 3',
101         linkId: 'link 3',
102         volumeId: 'volume 3',
103         lastViewed: new ServerTime(3),
104         isSharedWithMe: true,
105       },
106     ]
107     expect(filterItems(items, 'name', undefined)).toEqual([items[1], items[2]])
108   })
109   test('filter items ending with search term', () => {
110     const items: RecentDocumentsSnapshotData[] = [
111       {
112         name: 'doc 2',
113         linkId: 'link 1',
114         volumeId: 'volume 1',
115         lastViewed: new ServerTime(1),
116         isSharedWithMe: false,
117       },
118       {
119         name: 'name 2',
120         linkId: 'link 2',
121         volumeId: 'volume 2',
122         lastViewed: new ServerTime(2),
123       },
124       {
125         name: 'name 3',
126         linkId: 'link 3',
127         volumeId: 'volume 3',
128         lastViewed: new ServerTime(3),
129         isSharedWithMe: true,
130       },
131     ]
132     expect(filterItems(items, '2', undefined)).toEqual([items[0], items[1]])
133   })
135   test('filter items with term in the middle', () => {
136     const items: RecentDocumentsSnapshotData[] = [
137       {
138         name: 'doc 2',
139         linkId: 'link 1',
140         volumeId: 'volume 1',
141         lastViewed: new ServerTime(1),
142         isSharedWithMe: false,
143       },
144       {
145         name: 'name 2',
146         linkId: 'link 2',
147         volumeId: 'volume 2',
148         lastViewed: new ServerTime(2),
149       },
150       {
151         name: 'name 3',
152         linkId: 'link 3',
153         volumeId: 'volume 3',
154         lastViewed: new ServerTime(3),
155         isSharedWithMe: true,
156       },
157     ]
158     expect(filterItems(items, 'am', undefined)).toEqual([items[1], items[2]])
159   })
162 describe('getDisplayName', () => {
163   test('Will return the user email if name is not populated and the document is owned by the user', () => {
164     const recentDocument = {
165       name: 'doc 2',
166       linkId: 'link 1',
167       volumeId: 'volume 1',
168       lastViewed: new ServerTime(1),
169       isSharedWithMe: false,
170     }
171     expect(getDisplayName(recentDocument)).toBe('Me')
172   })
173   test('Will return the user if name is populated and the document is owned by the user', () => {
174     const recentDocument = {
175       name: 'doc 2',
176       linkId: 'link 1',
177       volumeId: 'volume 1',
178       lastViewed: new ServerTime(1),
179       isSharedWithMe: false,
180     }
181     expect(getDisplayName(recentDocument)).toBe('Me')
182   })
184   test('Will return the contact display name if it is present and the document is shared with the user', () => {
185     const recentDocument = {
186       name: 'doc 2',
187       linkId: 'link 1',
188       volumeId: 'volume 1',
189       lastViewed: new ServerTime(1),
190       isSharedWithMe: true,
191       createdBy: 'joe@proton.ch',
192     }
193     const contacts = [{ Name: 'Joe Bloggs', Email: 'joe@proton.ch' }] as unknown as ContactEmail[]
194     expect(getDisplayName(recentDocument, contacts)).toBe('Joe Bloggs')
195   })
196   test('Will return the contact email if there is no name and the document is shared with the user', () => {
197     const recentDocument = {
198       name: 'doc 2',
199       linkId: 'link 1',
200       volumeId: 'volume 1',
201       lastViewed: new ServerTime(1),
202       isSharedWithMe: true,
203       createdBy: 'joe@proton.ch',
204     }
205     const contacts = [{ Email: 'joe@proton.ch' }] as unknown as ContactEmail[]
206     expect(getDisplayName(recentDocument, contacts)).toBe('joe@proton.ch')
207   })