@zextras/carbonio-ui-preview 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/lib/{preview/constants.d.ts → constants/index.d.ts} +1 -0
  2. package/lib/{preview/constants.js → constants/index.js} +3 -2
  3. package/lib/constants/index.js.map +1 -0
  4. package/lib/preview/FocusWithin.d.ts +1 -1
  5. package/lib/preview/FocusWithin.js +9 -11
  6. package/lib/preview/FocusWithin.js.map +1 -1
  7. package/lib/preview/ImagePreview.d.ts +1 -1
  8. package/lib/preview/Navigator.d.ts +1 -1
  9. package/lib/preview/Navigator.js.map +1 -1
  10. package/lib/preview/PageController.d.ts +2 -2
  11. package/lib/preview/PdfPreview.d.ts +3 -1
  12. package/lib/preview/PdfPreview.js +99 -46
  13. package/lib/preview/PdfPreview.js.map +1 -1
  14. package/lib/preview/PreviewManager.d.ts +1 -1
  15. package/lib/preview/PreviewManager.js +3 -2
  16. package/lib/preview/PreviewManager.js.map +1 -1
  17. package/lib/preview/StyledComponents.d.ts +2 -3
  18. package/lib/preview/ZoomController.d.ts +1 -1
  19. package/lib/preview/ZoomController.js.map +1 -1
  20. package/lib/preview/usePageScrollController.js +2 -1
  21. package/lib/preview/usePageScrollController.js.map +1 -1
  22. package/lib/preview/useZoom.js +1 -1
  23. package/lib/preview/useZoom.js.map +1 -1
  24. package/lib/utils/type-utils.d.ts +3 -0
  25. package/lib/utils/type-utils.js +3 -0
  26. package/lib/utils/type-utils.js.map +1 -0
  27. package/lib/utils/utils.d.ts +1 -3
  28. package/lib/utils/utils.js +15 -1
  29. package/lib/utils/utils.js.map +1 -1
  30. package/lib-esm/{preview/constants.d.ts → constants/index.d.ts} +1 -0
  31. package/lib-esm/{preview/constants.js → constants/index.js} +2 -1
  32. package/lib-esm/constants/index.js.map +1 -0
  33. package/lib-esm/preview/FocusWithin.d.ts +1 -1
  34. package/lib-esm/preview/FocusWithin.js +9 -11
  35. package/lib-esm/preview/FocusWithin.js.map +1 -1
  36. package/lib-esm/preview/ImagePreview.d.ts +1 -1
  37. package/lib-esm/preview/Navigator.d.ts +1 -1
  38. package/lib-esm/preview/Navigator.js.map +1 -1
  39. package/lib-esm/preview/PageController.d.ts +2 -2
  40. package/lib-esm/preview/PdfPreview.d.ts +3 -1
  41. package/lib-esm/preview/PdfPreview.js +99 -46
  42. package/lib-esm/preview/PdfPreview.js.map +1 -1
  43. package/lib-esm/preview/PreviewManager.d.ts +1 -1
  44. package/lib-esm/preview/PreviewManager.js +3 -2
  45. package/lib-esm/preview/PreviewManager.js.map +1 -1
  46. package/lib-esm/preview/StyledComponents.d.ts +2 -3
  47. package/lib-esm/preview/ZoomController.d.ts +1 -1
  48. package/lib-esm/preview/ZoomController.js.map +1 -1
  49. package/lib-esm/preview/usePageScrollController.js +2 -1
  50. package/lib-esm/preview/usePageScrollController.js.map +1 -1
  51. package/lib-esm/preview/useZoom.js +1 -1
  52. package/lib-esm/preview/useZoom.js.map +1 -1
  53. package/lib-esm/utils/type-utils.d.ts +3 -0
  54. package/lib-esm/utils/type-utils.js +2 -0
  55. package/lib-esm/utils/type-utils.js.map +1 -0
  56. package/lib-esm/utils/utils.d.ts +1 -3
  57. package/lib-esm/utils/utils.js +12 -1
  58. package/lib-esm/utils/utils.js.map +1 -1
  59. package/package.json +27 -32
  60. package/lib/preview/Header.test.d.ts +0 -1
  61. package/lib/preview/Header.test.js +0 -143
  62. package/lib/preview/Header.test.js.map +0 -1
  63. package/lib/preview/ImagePreview.test.d.ts +0 -1
  64. package/lib/preview/ImagePreview.test.js +0 -161
  65. package/lib/preview/ImagePreview.test.js.map +0 -1
  66. package/lib/preview/PdfPreview.test.d.ts +0 -1
  67. package/lib/preview/PdfPreview.test.js +0 -1297
  68. package/lib/preview/PdfPreview.test.js.map +0 -1
  69. package/lib/preview/PreviewManager.test.d.ts +0 -1
  70. package/lib/preview/PreviewManager.test.js +0 -253
  71. package/lib/preview/PreviewManager.test.js.map +0 -1
  72. package/lib/preview/PreviewWrapper.test.d.ts +0 -1
  73. package/lib/preview/PreviewWrapper.test.js +0 -85
  74. package/lib/preview/PreviewWrapper.test.js.map +0 -1
  75. package/lib/preview/constants.js.map +0 -1
  76. package/lib/utils/test-utils.d.ts +0 -21
  77. package/lib/utils/test-utils.js +0 -148
  78. package/lib/utils/test-utils.js.map +0 -1
  79. package/lib-esm/preview/Header.test.d.ts +0 -1
  80. package/lib-esm/preview/Header.test.js +0 -138
  81. package/lib-esm/preview/Header.test.js.map +0 -1
  82. package/lib-esm/preview/ImagePreview.test.d.ts +0 -1
  83. package/lib-esm/preview/ImagePreview.test.js +0 -156
  84. package/lib-esm/preview/ImagePreview.test.js.map +0 -1
  85. package/lib-esm/preview/PdfPreview.test.d.ts +0 -1
  86. package/lib-esm/preview/PdfPreview.test.js +0 -1292
  87. package/lib-esm/preview/PdfPreview.test.js.map +0 -1
  88. package/lib-esm/preview/PreviewManager.test.d.ts +0 -1
  89. package/lib-esm/preview/PreviewManager.test.js +0 -228
  90. package/lib-esm/preview/PreviewManager.test.js.map +0 -1
  91. package/lib-esm/preview/PreviewWrapper.test.d.ts +0 -1
  92. package/lib-esm/preview/PreviewWrapper.test.js +0 -80
  93. package/lib-esm/preview/PreviewWrapper.test.js.map +0 -1
  94. package/lib-esm/preview/constants.js.map +0 -1
  95. package/lib-esm/utils/test-utils.d.ts +0 -21
  96. package/lib-esm/utils/test-utils.js +0 -116
  97. package/lib-esm/utils/test-utils.js.map +0 -1
@@ -1,1292 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
- /*
38
- * SPDX-FileCopyrightText: 2022 Zextras <https://www.zextras.com>
39
- *
40
- * SPDX-License-Identifier: AGPL-3.0-only
41
- */
42
- import React from 'react';
43
- import { act, screen, waitFor, waitForElementToBeRemoved } from '@testing-library/react';
44
- import userEvent from '@testing-library/user-event';
45
- import fetch from 'jest-fetch-mock';
46
- import { ZOOM_STEPS } from './constants';
47
- import { PdfPreview } from './PdfPreview';
48
- import { loadPDF, setup, triggerObserver } from 'test-utils';
49
- var pdfFile = loadPDF('./__mocks__/_pdf.pdf');
50
- var zoomInIcon = 'icon: Plus';
51
- var zoomOutIcon = 'icon: Minus';
52
- var zoomFitToWidthIcon = 'icon: MaximizeOutline';
53
- var zoomResetWidthIcon = 'icon: MinimizeOutline';
54
- jest.useRealTimers();
55
- describe('Pdf Preview', function () {
56
- test('Render a pdf document', function () { return __awaiter(void 0, void 0, void 0, function () {
57
- var onClose, pageElement;
58
- return __generator(this, function (_a) {
59
- switch (_a.label) {
60
- case 0:
61
- onClose = jest.fn();
62
- setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
63
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
64
- });
65
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
66
- case 1:
67
- _a.sent();
68
- expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
69
- expect(screen.getByTestId('pdf-preview-container')).toBeInTheDocument();
70
- pageElement = document.querySelector('[data-page-number="1"]');
71
- expect(pageElement).toBeDefined();
72
- expect(pageElement).not.toBeNull();
73
- expect(pageElement).toBeInTheDocument();
74
- return [2 /*return*/];
75
- }
76
- });
77
- }); });
78
- test('Render a pdf document from File', function () { return __awaiter(void 0, void 0, void 0, function () {
79
- var onClose, loadingElement, pageElement;
80
- return __generator(this, function (_a) {
81
- switch (_a.label) {
82
- case 0:
83
- onClose = jest.fn();
84
- setup(React.createElement(PdfPreview, { show: true, src: pdfFile.file, onClose: onClose }), {
85
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
86
- });
87
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
88
- case 1:
89
- loadingElement = _a.sent();
90
- expect(loadingElement).toBeInTheDocument();
91
- return [4 /*yield*/, waitForElementToBeRemoved(loadingElement)];
92
- case 2:
93
- _a.sent();
94
- expect(screen.getByTestId('pdf-preview-container')).toBeInTheDocument();
95
- pageElement = document.querySelector('[data-page-number="1"]');
96
- expect(pageElement).toBeDefined();
97
- expect(pageElement).not.toBeNull();
98
- expect(pageElement).toBeInTheDocument();
99
- return [2 /*return*/];
100
- }
101
- });
102
- }); });
103
- test('Render a pdf document from Blob', function () { return __awaiter(void 0, void 0, void 0, function () {
104
- var onClose, loadingElement, pageElement;
105
- return __generator(this, function (_a) {
106
- switch (_a.label) {
107
- case 0:
108
- onClose = jest.fn();
109
- setup(React.createElement(PdfPreview, { show: true, src: pdfFile.blob, onClose: onClose }), {
110
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
111
- });
112
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
113
- case 1:
114
- loadingElement = _a.sent();
115
- expect(loadingElement).toBeInTheDocument();
116
- return [4 /*yield*/, waitForElementToBeRemoved(loadingElement)];
117
- case 2:
118
- _a.sent();
119
- expect(screen.getByTestId('pdf-preview-container')).toBeInTheDocument();
120
- pageElement = document.querySelector('[data-page-number="1"]');
121
- expect(pageElement).toBeDefined();
122
- expect(pageElement).not.toBeNull();
123
- expect(pageElement).toBeInTheDocument();
124
- return [2 /*return*/];
125
- }
126
- });
127
- }); });
128
- test('If show is false does not render the pdf', function () { return __awaiter(void 0, void 0, void 0, function () {
129
- var onClose;
130
- return __generator(this, function (_a) {
131
- onClose = jest.fn();
132
- setup(React.createElement(PdfPreview, { show: false, src: pdfFile.dataURI, onClose: onClose }), {
133
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
134
- });
135
- expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
136
- expect(screen.queryByTestId('pdf-preview-container')).not.toBeInTheDocument();
137
- return [2 /*return*/];
138
- });
139
- }); });
140
- test('If pdf is not valid render an error message', function () { return __awaiter(void 0, void 0, void 0, function () {
141
- var onClose;
142
- return __generator(this, function (_a) {
143
- switch (_a.label) {
144
- case 0:
145
- fetch.mockReject(function () { return Promise.reject(new Error('API is down')); });
146
- onClose = jest.fn();
147
- setup(React.createElement(PdfPreview, { show: true, src: "invalid-pdf.pdf", onClose: onClose }), {
148
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
149
- });
150
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
151
- case 1:
152
- _a.sent();
153
- return [4 /*yield*/, screen.findByText(/Failed to load document preview./i)];
154
- case 2:
155
- _a.sent();
156
- expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
157
- expect(screen.getByTestId('pdf-preview-container')).toBeInTheDocument();
158
- return [2 /*return*/];
159
- }
160
- });
161
- }); });
162
- test('If fallback is requested, does not render the pdf but the fallback instead', function () { return __awaiter(void 0, void 0, void 0, function () {
163
- var onClose;
164
- return __generator(this, function (_a) {
165
- onClose = jest.fn();
166
- setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, useFallback: true, openSrc: "open-src" }), {
167
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
168
- });
169
- expect(screen.getByText(/This item cannot be displayed/i)).toBeVisible();
170
- expect(screen.getByText(/The file size exceeds the limit allowed and cannot be displayed/i)).toBeVisible();
171
- expect(screen.getByText(/Please, download it or open it in a separate tab/i)).toBeVisible();
172
- expect(screen.getByRole('button', { name: /download/i })).toBeVisible();
173
- expect(screen.getByRole('button', { name: /open/i })).toBeVisible();
174
- return [2 /*return*/];
175
- });
176
- }); });
177
- test('Render a custom fallback', function () { return __awaiter(void 0, void 0, void 0, function () {
178
- var onClose, CustomContent;
179
- return __generator(this, function (_a) {
180
- onClose = jest.fn();
181
- CustomContent = React.createElement("div", null, "Custom content");
182
- setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, useFallback: true, customContent: CustomContent, openSrc: "open-src" }), {
183
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
184
- });
185
- expect(screen.queryByText(/This item cannot be displayed/i)).not.toBeInTheDocument();
186
- expect(screen.queryByText(/The file size exceeds the limit allowed and cannot be displayed/i)).not.toBeInTheDocument();
187
- expect(screen.queryByText(/Please, download it or open it in a separate tab/i)).not.toBeInTheDocument();
188
- expect(screen.queryByRole('button', { name: /download/i })).not.toBeInTheDocument();
189
- expect(screen.queryByRole('button', { name: /open/i })).not.toBeInTheDocument();
190
- expect(screen.getByText(/custom content/i)).toBeVisible();
191
- return [2 /*return*/];
192
- });
193
- }); });
194
- test('Additional data are visible', function () { return __awaiter(void 0, void 0, void 0, function () {
195
- var onClose;
196
- return __generator(this, function (_a) {
197
- switch (_a.label) {
198
- case 0:
199
- onClose = jest.fn();
200
- setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, filename: "file name", extension: "pdf", size: "18KB" }), {
201
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
202
- });
203
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
204
- case 1:
205
- _a.sent();
206
- expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
207
- expect(screen.getByText(/file name/i)).toBeVisible();
208
- expect(screen.getByText(/pdf.*18KB/i)).toBeVisible();
209
- return [2 /*return*/];
210
- }
211
- });
212
- }); });
213
- test('Escape key close the preview', function () { return __awaiter(void 0, void 0, void 0, function () {
214
- var onClose, user;
215
- return __generator(this, function (_a) {
216
- switch (_a.label) {
217
- case 0:
218
- onClose = jest.fn();
219
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
220
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
221
- }).user;
222
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
223
- case 1:
224
- _a.sent();
225
- expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
226
- return [4 /*yield*/, user.keyboard('{Escape}')];
227
- case 2:
228
- _a.sent();
229
- expect(onClose).toHaveBeenCalled();
230
- return [2 /*return*/];
231
- }
232
- });
233
- }); });
234
- test('Close action calls onClose if no click action is provided', function () { return __awaiter(void 0, void 0, void 0, function () {
235
- var onClose, closeAction, user, closeActionElement;
236
- return __generator(this, function (_a) {
237
- switch (_a.label) {
238
- case 0:
239
- onClose = jest.fn(function (e) {
240
- e.preventDefault();
241
- });
242
- closeAction = {
243
- id: 'closeAction',
244
- icon: 'Activity',
245
- tooltipLabel: 'Custom close action'
246
- };
247
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, closeAction: closeAction }), {
248
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
249
- }).user;
250
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
251
- case 1:
252
- _a.sent();
253
- expect(screen.queryByText(/Loading document preview…/i)).not.toBeInTheDocument();
254
- closeActionElement = screen.getByTestId('icon: Activity');
255
- expect(closeActionElement).toBeVisible();
256
- return [4 /*yield*/, user.hover(closeActionElement)];
257
- case 2:
258
- _a.sent();
259
- return [4 /*yield*/, screen.findByText(/custom close action/i)];
260
- case 3:
261
- _a.sent();
262
- return [4 /*yield*/, user.click(closeActionElement)];
263
- case 4:
264
- _a.sent();
265
- expect(onClose).toHaveBeenCalledTimes(1);
266
- return [2 /*return*/];
267
- }
268
- });
269
- }); });
270
- test('Click on actions calls onClose if event is not stopped by the action itself, instead if is disabled it is not propagated anyway ', function () { return __awaiter(void 0, void 0, void 0, function () {
271
- var onClose, actions, closeAction, user, action1Item, action2Item, closeActionItem;
272
- return __generator(this, function (_a) {
273
- switch (_a.label) {
274
- case 0:
275
- onClose = jest.fn();
276
- actions = [
277
- {
278
- id: 'action1',
279
- icon: 'Activity',
280
- onClick: jest.fn()
281
- },
282
- {
283
- id: 'action2',
284
- icon: 'People',
285
- onClick: jest.fn(function (ev) {
286
- ev.preventDefault();
287
- }),
288
- disabled: true
289
- }
290
- ];
291
- closeAction = {
292
- id: 'closeAction',
293
- icon: 'Close',
294
- onClick: jest.fn(function (ev) {
295
- ev.preventDefault();
296
- })
297
- };
298
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, actions: actions, filename: "pdf name", closeAction: closeAction }), {
299
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
300
- }).user;
301
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
302
- case 1:
303
- _a.sent();
304
- return [4 /*yield*/, waitFor(function () {
305
- // eslint-disable-next-line testing-library/no-node-access
306
- return expect(document.querySelector('[data-page-number="1"]')).toBeInTheDocument();
307
- })];
308
- case 2:
309
- _a.sent();
310
- action1Item = screen.getByTestId('icon: Activity');
311
- action2Item = screen.getByTestId('icon: People');
312
- closeActionItem = screen.getByTestId('icon: Close');
313
- expect(action1Item).toBeVisible();
314
- expect(action2Item).toBeVisible();
315
- // eslint-disable-next-line testing-library/no-node-access
316
- expect(action2Item.parentElement).toHaveAttribute('disabled');
317
- expect(closeActionItem).toBeVisible();
318
- // click on action 1 is propagated and calls onClose
319
- return [4 /*yield*/, user.click(action1Item)];
320
- case 3:
321
- // click on action 1 is propagated and calls onClose
322
- _a.sent();
323
- expect(actions[0].onClick).toHaveBeenCalled();
324
- expect(onClose).toHaveBeenCalledTimes(1);
325
- // click on action 2 skips the handler of the action since it is disabled and does not call onClose
326
- return [4 /*yield*/, user.click(action2Item)];
327
- case 4:
328
- // click on action 2 skips the handler of the action since it is disabled and does not call onClose
329
- _a.sent();
330
- expect(actions[1].onClick).not.toHaveBeenCalled();
331
- expect(onClose).toHaveBeenCalledTimes(1);
332
- // click on close action is stopped by the action, event is not propagated and onClose is not called
333
- return [4 /*yield*/, user.click(closeActionItem)];
334
- case 5:
335
- // click on close action is stopped by the action, event is not propagated and onClose is not called
336
- _a.sent();
337
- // FIXME
338
- // expect(closeAction.onClick).toHaveBeenCalled();
339
- expect(onClose).toHaveBeenCalledTimes(3);
340
- // click on filename is equivalent to a click on the overlay, so onClose is called
341
- return [4 /*yield*/, user.click(screen.getByText(/pdf name/i))];
342
- case 6:
343
- // click on filename is equivalent to a click on the overlay, so onClose is called
344
- _a.sent();
345
- expect(onClose).toHaveBeenCalledTimes(4);
346
- return [2 /*return*/];
347
- }
348
- });
349
- }); });
350
- test('Zoom starts at lowest step', function () { return __awaiter(void 0, void 0, void 0, function () {
351
- var onClose, canvas;
352
- return __generator(this, function (_a) {
353
- switch (_a.label) {
354
- case 0:
355
- onClose = jest.fn();
356
- setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
357
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
358
- });
359
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
360
- case 1:
361
- _a.sent();
362
- canvas = document.querySelector('canvas');
363
- expect(canvas).toBeVisible();
364
- expect(canvas).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
365
- return [2 /*return*/];
366
- }
367
- });
368
- }); });
369
- test('Decrease zoom is disabled when zoom is at lowest point', function () { return __awaiter(void 0, void 0, void 0, function () {
370
- var onClose, user, canvas;
371
- return __generator(this, function (_a) {
372
- switch (_a.label) {
373
- case 0:
374
- onClose = jest.fn();
375
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
376
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
377
- }).user;
378
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
379
- case 1:
380
- _a.sent();
381
- canvas = document.querySelector('canvas');
382
- expect(canvas).toBeVisible();
383
- expect(canvas).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
384
- expect(screen.getByTestId(zoomOutIcon)).toBeVisible();
385
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
386
- expect(screen.getByTestId(zoomOutIcon).parentElement).toHaveAttribute('disabled', '');
387
- expect(screen.getByTestId(zoomInIcon)).toBeVisible();
388
- return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
389
- case 2:
390
- _a.sent();
391
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
392
- expect(screen.getByTestId(zoomOutIcon).parentElement).not.toHaveAttribute('disabled', '');
393
- return [4 /*yield*/, userEvent.click(screen.getByTestId(zoomOutIcon))];
394
- case 3:
395
- _a.sent();
396
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
397
- expect(screen.getByTestId(zoomOutIcon).parentElement).toHaveAttribute('disabled', '');
398
- return [2 /*return*/];
399
- }
400
- });
401
- }); });
402
- test('Increase and decrease zoom change zoom by 1 step per time', function () { return __awaiter(void 0, void 0, void 0, function () {
403
- var onClose, user, step, step;
404
- return __generator(this, function (_a) {
405
- switch (_a.label) {
406
- case 0:
407
- onClose = jest.fn();
408
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
409
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
410
- }).user;
411
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
412
- case 1:
413
- _a.sent();
414
- // eslint-disable-next-line testing-library/no-node-access
415
- expect(document.querySelector('canvas')).toBeVisible();
416
- expect(screen.getByTestId(zoomOutIcon)).toBeVisible();
417
- expect(screen.getByTestId(zoomInIcon)).toBeVisible();
418
- // eslint-disable-next-line testing-library/no-node-access
419
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
420
- step = 0;
421
- _a.label = 2;
422
- case 2:
423
- if (!(step < ZOOM_STEPS.length - 1)) return [3 /*break*/, 5];
424
- // eslint-disable-next-line no-await-in-loop
425
- return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
426
- case 3:
427
- // eslint-disable-next-line no-await-in-loop
428
- _a.sent();
429
- // eslint-disable-next-line testing-library/no-node-access
430
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[step + 1]));
431
- _a.label = 4;
432
- case 4:
433
- step += 1;
434
- return [3 /*break*/, 2];
435
- case 5:
436
- step = ZOOM_STEPS.length - 1;
437
- _a.label = 6;
438
- case 6:
439
- if (!(step > 0)) return [3 /*break*/, 9];
440
- // eslint-disable-next-line no-await-in-loop
441
- return [4 /*yield*/, user.click(screen.getByTestId(zoomOutIcon))];
442
- case 7:
443
- // eslint-disable-next-line no-await-in-loop
444
- _a.sent();
445
- // eslint-disable-next-line testing-library/no-node-access
446
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[step - 1]));
447
- _a.label = 8;
448
- case 8:
449
- step -= 1;
450
- return [3 /*break*/, 6];
451
- case 9: return [2 /*return*/];
452
- }
453
- });
454
- }); });
455
- test('Increase zoom is disabled when zoom is at greatest point', function () { return __awaiter(void 0, void 0, void 0, function () {
456
- var onClose, user, step;
457
- return __generator(this, function (_a) {
458
- switch (_a.label) {
459
- case 0:
460
- onClose = jest.fn();
461
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
462
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
463
- }).user;
464
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
465
- case 1:
466
- _a.sent();
467
- // eslint-disable-next-line testing-library/no-node-access
468
- expect(document.querySelector('canvas')).toBeVisible();
469
- expect(screen.getByTestId(zoomInIcon)).toBeVisible();
470
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
471
- expect(screen.getByTestId(zoomInIcon).parentElement).not.toHaveAttribute('disabled', '');
472
- step = 0;
473
- _a.label = 2;
474
- case 2:
475
- if (!(step < ZOOM_STEPS.length - 1)) return [3 /*break*/, 5];
476
- // eslint-disable-next-line no-await-in-loop
477
- return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
478
- case 3:
479
- // eslint-disable-next-line no-await-in-loop
480
- _a.sent();
481
- _a.label = 4;
482
- case 4:
483
- step += 1;
484
- return [3 /*break*/, 2];
485
- case 5:
486
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
487
- expect(screen.getByTestId(zoomInIcon).parentElement).toHaveAttribute('disabled', '');
488
- return [2 /*return*/];
489
- }
490
- });
491
- }); });
492
- test('Fit to width zoom set width of pdf to width of the window', function () { return __awaiter(void 0, void 0, void 0, function () {
493
- var onClose, ref, mockPdfWidth, user;
494
- return __generator(this, function (_a) {
495
- switch (_a.label) {
496
- case 0:
497
- onClose = jest.fn();
498
- ref = React.createRef();
499
- mockPdfWidth = 1000;
500
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
501
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
502
- }).user;
503
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
504
- case 1:
505
- _a.sent();
506
- // eslint-disable-next-line testing-library/no-node-access
507
- expect(document.querySelector('canvas')).toBeVisible();
508
- expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
509
- expect(screen.queryByTestId(zoomResetWidthIcon)).not.toBeInTheDocument();
510
- expect(ref.current).not.toBeNull();
511
- jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
512
- return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
513
- case 2:
514
- _a.sent();
515
- // eslint-disable-next-line testing-library/no-node-access
516
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(mockPdfWidth));
517
- expect(screen.getByTestId(zoomResetWidthIcon)).toBeVisible();
518
- expect(screen.queryByTestId(zoomFitToWidthIcon)).not.toBeInTheDocument();
519
- return [2 /*return*/];
520
- }
521
- });
522
- }); });
523
- test('Reset zoom set width to lowest step', function () { return __awaiter(void 0, void 0, void 0, function () {
524
- var onClose, ref, mockPdfWidth, user;
525
- return __generator(this, function (_a) {
526
- switch (_a.label) {
527
- case 0:
528
- onClose = jest.fn();
529
- ref = React.createRef();
530
- mockPdfWidth = 1000;
531
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
532
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
533
- }).user;
534
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
535
- case 1:
536
- _a.sent();
537
- // eslint-disable-next-line testing-library/no-node-access
538
- expect(document.querySelector('canvas')).toBeVisible();
539
- expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
540
- expect(screen.queryByTestId(zoomResetWidthIcon)).not.toBeInTheDocument();
541
- expect(ref.current).not.toBeNull();
542
- jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
543
- return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
544
- case 2:
545
- _a.sent();
546
- // eslint-disable-next-line testing-library/no-node-access
547
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(mockPdfWidth));
548
- expect(screen.getByTestId(zoomResetWidthIcon)).toBeVisible();
549
- expect(screen.queryByTestId(zoomFitToWidthIcon)).not.toBeInTheDocument();
550
- return [4 /*yield*/, user.click(screen.getByTestId(zoomResetWidthIcon))];
551
- case 3:
552
- _a.sent();
553
- // eslint-disable-next-line testing-library/no-node-access
554
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
555
- expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
556
- expect(screen.queryByTestId(zoomResetWidthIcon)).not.toBeInTheDocument();
557
- return [2 /*return*/];
558
- }
559
- });
560
- }); });
561
- test('When client width is lower than lowest zoom step and zoom is set to fit to width, decrease zoom is disabled and increase is enabled', function () { return __awaiter(void 0, void 0, void 0, function () {
562
- var onClose, ref, mockPdfWidth, user;
563
- return __generator(this, function (_a) {
564
- switch (_a.label) {
565
- case 0:
566
- onClose = jest.fn();
567
- ref = React.createRef();
568
- mockPdfWidth = ZOOM_STEPS[0] - 1;
569
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
570
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
571
- }).user;
572
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
573
- case 1:
574
- _a.sent();
575
- // eslint-disable-next-line testing-library/no-node-access
576
- expect(document.querySelector('canvas')).toBeVisible();
577
- expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
578
- jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
579
- return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
580
- case 2:
581
- _a.sent();
582
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
583
- expect(screen.getByTestId(zoomOutIcon).parentElement).toHaveAttribute('disabled', '');
584
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
585
- expect(screen.getByTestId(zoomInIcon).parentElement).not.toHaveAttribute('disabled', '');
586
- return [2 /*return*/];
587
- }
588
- });
589
- }); });
590
- test('When client width is greater than greatest zoom step and zoom is set to fit to width, decrease zoom is enabled and increase is disabled', function () { return __awaiter(void 0, void 0, void 0, function () {
591
- var onClose, ref, mockPdfWidth, user;
592
- return __generator(this, function (_a) {
593
- switch (_a.label) {
594
- case 0:
595
- onClose = jest.fn();
596
- ref = React.createRef();
597
- mockPdfWidth = ZOOM_STEPS[ZOOM_STEPS.length - 1] + 1;
598
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
599
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
600
- }).user;
601
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
602
- case 1:
603
- _a.sent();
604
- // eslint-disable-next-line testing-library/no-node-access
605
- expect(document.querySelector('canvas')).toBeVisible();
606
- expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
607
- jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
608
- return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
609
- case 2:
610
- _a.sent();
611
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
612
- expect(screen.getByTestId(zoomInIcon).parentElement).toHaveAttribute('disabled', '');
613
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
614
- expect(screen.getByTestId(zoomOutIcon).parentElement).not.toHaveAttribute('disabled', '');
615
- return [2 /*return*/];
616
- }
617
- });
618
- }); });
619
- test('After fit to width, decrease zoom set zoom to nearest lower zoom step', function () { return __awaiter(void 0, void 0, void 0, function () {
620
- var onClose, ref, stepToReach, mockPdfWidth, user;
621
- return __generator(this, function (_a) {
622
- switch (_a.label) {
623
- case 0:
624
- onClose = jest.fn();
625
- ref = React.createRef();
626
- stepToReach = 1;
627
- mockPdfWidth = ZOOM_STEPS[stepToReach + 1] - 1;
628
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
629
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
630
- }).user;
631
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
632
- case 1:
633
- _a.sent();
634
- // eslint-disable-next-line testing-library/no-node-access
635
- expect(document.querySelector('canvas')).toBeVisible();
636
- expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
637
- jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
638
- return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
639
- case 2:
640
- _a.sent();
641
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
642
- expect(screen.getByTestId(zoomOutIcon).parentElement).not.toHaveAttribute('disabled', '');
643
- return [4 /*yield*/, user.click(screen.getByTestId(zoomOutIcon))];
644
- case 3:
645
- _a.sent();
646
- // eslint-disable-next-line testing-library/no-node-access
647
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[stepToReach]));
648
- return [2 /*return*/];
649
- }
650
- });
651
- }); });
652
- test('After fit to width, increase zoom set zoom to nearest greater zoom step', function () { return __awaiter(void 0, void 0, void 0, function () {
653
- var onClose, ref, stepToReach, mockPdfWidth, user;
654
- return __generator(this, function (_a) {
655
- switch (_a.label) {
656
- case 0:
657
- onClose = jest.fn();
658
- ref = React.createRef();
659
- stepToReach = 2;
660
- mockPdfWidth = ZOOM_STEPS[stepToReach - 1] + 1;
661
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
662
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
663
- }).user;
664
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
665
- case 1:
666
- _a.sent();
667
- // eslint-disable-next-line testing-library/no-node-access
668
- expect(document.querySelector('canvas')).toBeVisible();
669
- expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
670
- jest.spyOn(ref.current, 'clientWidth', 'get').mockReturnValue(mockPdfWidth);
671
- return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
672
- case 2:
673
- _a.sent();
674
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
675
- expect(screen.getByTestId(zoomInIcon).parentElement).not.toHaveAttribute('disabled', '');
676
- return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
677
- case 3:
678
- _a.sent();
679
- // eslint-disable-next-line testing-library/no-node-access
680
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[stepToReach]));
681
- return [2 /*return*/];
682
- }
683
- });
684
- }); });
685
- test('When fit to width is active, resize of the window update width of the pdf', function () { return __awaiter(void 0, void 0, void 0, function () {
686
- var onClose, ref, mockPdfWidth, user, getPreviewClientWidthMock;
687
- return __generator(this, function (_a) {
688
- switch (_a.label) {
689
- case 0:
690
- onClose = jest.fn();
691
- ref = React.createRef();
692
- mockPdfWidth = [1001, 1501, 2001];
693
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
694
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
695
- }).user;
696
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
697
- case 1:
698
- _a.sent();
699
- // eslint-disable-next-line testing-library/no-node-access
700
- expect(document.querySelector('canvas')).toBeVisible();
701
- expect(screen.getByTestId(zoomFitToWidthIcon)).toBeVisible();
702
- getPreviewClientWidthMock = jest.spyOn(ref.current, 'clientWidth', 'get');
703
- getPreviewClientWidthMock.mockReturnValueOnce(mockPdfWidth[0]);
704
- return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
705
- case 2:
706
- _a.sent();
707
- // eslint-disable-next-line testing-library/no-node-access
708
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(mockPdfWidth[0]));
709
- getPreviewClientWidthMock.mockReturnValueOnce(mockPdfWidth[1]);
710
- // resize window to trigger listener
711
- act(function () {
712
- window.resizeTo(mockPdfWidth[1], mockPdfWidth[1]);
713
- });
714
- // eslint-disable-next-line testing-library/no-node-access
715
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(mockPdfWidth[1]));
716
- return [2 /*return*/];
717
- }
718
- });
719
- }); });
720
- test('Click on disabled decrease/increase zoom actions does not change step and does not close preview', function () { return __awaiter(void 0, void 0, void 0, function () {
721
- var onClose, ref, user;
722
- return __generator(this, function (_a) {
723
- switch (_a.label) {
724
- case 0:
725
- onClose = jest.fn();
726
- ref = React.createRef();
727
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose, ref: ref }), {
728
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
729
- }).user;
730
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
731
- case 1:
732
- _a.sent();
733
- // eslint-disable-next-line testing-library/no-node-access
734
- expect(document.querySelector('canvas')).toBeVisible();
735
- // eslint-disable-next-line jest-dom/prefer-enabled-disabled,testing-library/no-node-access
736
- expect(screen.getByTestId(zoomOutIcon).parentElement).toHaveAttribute('disabled', '');
737
- return [4 /*yield*/, user.click(screen.getByTestId(zoomOutIcon))];
738
- case 2:
739
- _a.sent();
740
- // eslint-disable-next-line testing-library/no-node-access
741
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[0]));
742
- expect(onClose).not.toHaveBeenCalled();
743
- jest
744
- .spyOn(ref.current, 'clientWidth', 'get')
745
- .mockReturnValue(ZOOM_STEPS[ZOOM_STEPS.length - 1]);
746
- return [4 /*yield*/, user.click(screen.getByTestId(zoomFitToWidthIcon))];
747
- case 3:
748
- _a.sent();
749
- // eslint-disable-next-line testing-library/no-node-access
750
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[ZOOM_STEPS.length - 1]));
751
- // eslint-disable-next-line testing-library/no-node-access,jest-dom/prefer-enabled-disabled
752
- expect(screen.getByTestId(zoomInIcon).parentElement).toHaveAttribute('disabled', '');
753
- return [4 /*yield*/, user.click(screen.getByTestId(zoomInIcon))];
754
- case 4:
755
- _a.sent();
756
- // eslint-disable-next-line testing-library/no-node-access
757
- expect(document.querySelector('canvas')).toHaveAttribute('width', "".concat(ZOOM_STEPS[ZOOM_STEPS.length - 1]));
758
- expect(onClose).not.toHaveBeenCalled();
759
- return [2 /*return*/];
760
- }
761
- });
762
- }); });
763
- describe('Page selector', function () {
764
- test('shows page controller', function () { return __awaiter(void 0, void 0, void 0, function () {
765
- var onClose;
766
- return __generator(this, function (_a) {
767
- switch (_a.label) {
768
- case 0:
769
- onClose = jest.fn();
770
- setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
771
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
772
- });
773
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
774
- case 1:
775
- _a.sent();
776
- // eslint-disable-next-line testing-library/no-node-access
777
- expect(document.querySelector('canvas')).toBeVisible();
778
- expect(screen.getByText(/page/i)).toBeVisible();
779
- expect(screen.getByRole('textbox', { name: /current page/i })).toBeVisible();
780
- // mock pdf has 4 pages
781
- expect(screen.getByText('4')).toBeVisible();
782
- return [2 /*return*/];
783
- }
784
- });
785
- }); });
786
- test('blur is a confirmation event on page input', function () { return __awaiter(void 0, void 0, void 0, function () {
787
- var onClose, user, pageInput;
788
- return __generator(this, function (_a) {
789
- switch (_a.label) {
790
- case 0:
791
- onClose = jest.fn();
792
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
793
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
794
- }).user;
795
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
796
- case 1:
797
- _a.sent();
798
- // eslint-disable-next-line testing-library/no-node-access
799
- expect(document.querySelector('canvas')).toBeVisible();
800
- expect(screen.getByText(/page/i)).toBeVisible();
801
- pageInput = screen.getByRole('textbox', { name: /current page/i });
802
- expect(pageInput).toHaveDisplayValue('1');
803
- return [4 /*yield*/, user.clear(pageInput)];
804
- case 2:
805
- _a.sent();
806
- return [4 /*yield*/, user.type(pageInput, '2')];
807
- case 3:
808
- _a.sent();
809
- return [4 /*yield*/, user.tab()];
810
- case 4:
811
- _a.sent();
812
- expect(pageInput).not.toHaveFocus();
813
- expect(pageInput).toHaveDisplayValue('2');
814
- return [2 /*return*/];
815
- }
816
- });
817
- }); });
818
- test('enter key is a confirmation event on page input', function () { return __awaiter(void 0, void 0, void 0, function () {
819
- var onClose, user, pageInput;
820
- return __generator(this, function (_a) {
821
- switch (_a.label) {
822
- case 0:
823
- onClose = jest.fn();
824
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
825
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
826
- }).user;
827
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
828
- case 1:
829
- _a.sent();
830
- // eslint-disable-next-line testing-library/no-node-access
831
- expect(document.querySelector('canvas')).toBeVisible();
832
- expect(screen.getByText(/page/i)).toBeVisible();
833
- pageInput = screen.getByRole('textbox', { name: /current page/i });
834
- expect(pageInput).toHaveDisplayValue('1');
835
- return [4 /*yield*/, user.clear(pageInput)];
836
- case 2:
837
- _a.sent();
838
- return [4 /*yield*/, user.type(pageInput, '2')];
839
- case 3:
840
- _a.sent();
841
- return [4 /*yield*/, user.type(pageInput, '{Enter}')];
842
- case 4:
843
- _a.sent();
844
- expect(pageInput).not.toHaveFocus();
845
- expect(pageInput).toHaveDisplayValue('2');
846
- return [2 /*return*/];
847
- }
848
- });
849
- }); });
850
- test('when input is confirmed, input loses focus and the document is scrolled to typed page', function () { return __awaiter(void 0, void 0, void 0, function () {
851
- var onClose, scrollIntoViewFn, user, pageInput;
852
- return __generator(this, function (_a) {
853
- switch (_a.label) {
854
- case 0:
855
- onClose = jest.fn();
856
- scrollIntoViewFn = jest.fn();
857
- window.HTMLElement.prototype.scrollIntoView = scrollIntoViewFn;
858
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
859
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
860
- }).user;
861
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
862
- case 1:
863
- _a.sent();
864
- // eslint-disable-next-line testing-library/no-node-access
865
- expect(document.querySelector('canvas')).toBeVisible();
866
- expect(screen.getByText(/page/i)).toBeVisible();
867
- pageInput = screen.getByRole('textbox', { name: /current page/i });
868
- expect(pageInput).toHaveDisplayValue('1');
869
- return [4 /*yield*/, user.clear(pageInput)];
870
- case 2:
871
- _a.sent();
872
- return [4 /*yield*/, user.type(pageInput, '2')];
873
- case 3:
874
- _a.sent();
875
- return [4 /*yield*/, user.click(screen.getByText(/page/i))];
876
- case 4:
877
- _a.sent();
878
- expect(pageInput).not.toHaveFocus();
879
- expect(pageInput).toHaveDisplayValue('2');
880
- expect(scrollIntoViewFn).toHaveBeenCalledTimes(1);
881
- expect(scrollIntoViewFn.mock.instances[0]).toHaveAttribute('data-page-number', '2');
882
- return [2 /*return*/];
883
- }
884
- });
885
- }); });
886
- test('when input is confirmed with an invalid value, input loses focus and the input value is reset to previous valid page', function () { return __awaiter(void 0, void 0, void 0, function () {
887
- var onClose, scrollIntoViewFn, user, pageInput;
888
- return __generator(this, function (_a) {
889
- switch (_a.label) {
890
- case 0:
891
- onClose = jest.fn();
892
- scrollIntoViewFn = jest.fn();
893
- window.HTMLElement.prototype.scrollIntoView = scrollIntoViewFn;
894
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
895
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
896
- }).user;
897
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
898
- case 1:
899
- _a.sent();
900
- // eslint-disable-next-line testing-library/no-node-access
901
- expect(document.querySelector('canvas')).toBeVisible();
902
- expect(screen.getByText(/page/i)).toBeVisible();
903
- pageInput = screen.getByRole('textbox', { name: /current page/i });
904
- expect(pageInput).toHaveDisplayValue('1');
905
- return [4 /*yield*/, user.clear(pageInput)];
906
- case 2:
907
- _a.sent();
908
- return [4 /*yield*/, user.type(pageInput, 'invalid')];
909
- case 3:
910
- _a.sent();
911
- return [4 /*yield*/, user.click(screen.getByText(/page/i))];
912
- case 4:
913
- _a.sent();
914
- expect(pageInput).not.toHaveFocus();
915
- expect(pageInput).toHaveDisplayValue('1');
916
- expect(scrollIntoViewFn).not.toHaveBeenCalled();
917
- return [2 /*return*/];
918
- }
919
- });
920
- }); });
921
- test('on scroll, if focus is not on input, value is updated with current page', function () { return __awaiter(void 0, void 0, void 0, function () {
922
- var onClose, pageInput, page2Element;
923
- return __generator(this, function (_a) {
924
- switch (_a.label) {
925
- case 0:
926
- onClose = jest.fn();
927
- setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
928
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
929
- });
930
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
931
- case 1:
932
- _a.sent();
933
- // eslint-disable-next-line testing-library/no-node-access
934
- expect(document.querySelector('canvas')).toBeVisible();
935
- expect(screen.getByText(/page/i)).toBeVisible();
936
- pageInput = screen.getByRole('textbox', { name: /current page/i });
937
- expect(pageInput).toHaveDisplayValue('1');
938
- page2Element = document.querySelector('[data-page-number="2"]');
939
- expect(page2Element).not.toBeNull();
940
- return [4 /*yield*/, triggerObserver(page2Element)];
941
- case 2:
942
- _a.sent();
943
- expect(pageInput).toHaveDisplayValue('2');
944
- return [2 /*return*/];
945
- }
946
- });
947
- }); });
948
- test('on scroll, if focus is on input, value is updated with current page', function () { return __awaiter(void 0, void 0, void 0, function () {
949
- var onClose, user, pageInput, page2Element;
950
- return __generator(this, function (_a) {
951
- switch (_a.label) {
952
- case 0:
953
- onClose = jest.fn();
954
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
955
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
956
- }).user;
957
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
958
- case 1:
959
- _a.sent();
960
- // eslint-disable-next-line testing-library/no-node-access
961
- expect(document.querySelector('canvas')).toBeVisible();
962
- expect(screen.getByText(/page/i)).toBeVisible();
963
- pageInput = screen.getByRole('textbox', { name: /current page/i });
964
- expect(pageInput).toHaveDisplayValue('1');
965
- return [4 /*yield*/, user.clear(pageInput)];
966
- case 2:
967
- _a.sent();
968
- return [4 /*yield*/, user.type(pageInput, '4')];
969
- case 3:
970
- _a.sent();
971
- expect(pageInput).toHaveFocus();
972
- page2Element = document.querySelector('[data-page-number="2"]');
973
- expect(page2Element).not.toBeNull();
974
- return [4 /*yield*/, triggerObserver(page2Element)];
975
- case 4:
976
- _a.sent();
977
- expect(pageInput).toHaveDisplayValue('2');
978
- expect(pageInput).toHaveFocus();
979
- return [2 /*return*/];
980
- }
981
- });
982
- }); });
983
- test('must press esc key 2 times to make user exit from the preview, when focus is on input', function () { return __awaiter(void 0, void 0, void 0, function () {
984
- var onClose, user, pageInput;
985
- return __generator(this, function (_a) {
986
- switch (_a.label) {
987
- case 0:
988
- onClose = jest.fn();
989
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
990
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
991
- }).user;
992
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
993
- case 1:
994
- _a.sent();
995
- // eslint-disable-next-line testing-library/no-node-access
996
- expect(document.querySelector('canvas')).toBeVisible();
997
- expect(screen.getByText(/page/i)).toBeVisible();
998
- pageInput = screen.getByRole('textbox', { name: /current page/i });
999
- expect(pageInput).toHaveDisplayValue('1');
1000
- return [4 /*yield*/, user.clear(pageInput)];
1001
- case 2:
1002
- _a.sent();
1003
- return [4 /*yield*/, user.type(pageInput, '4')];
1004
- case 3:
1005
- _a.sent();
1006
- expect(pageInput).toHaveFocus();
1007
- return [4 /*yield*/, user.keyboard('{Escape}')];
1008
- case 4:
1009
- _a.sent();
1010
- expect(onClose).not.toHaveBeenCalled();
1011
- return [4 /*yield*/, user.keyboard('{Escape}')];
1012
- case 5:
1013
- _a.sent();
1014
- expect(onClose).toHaveBeenCalledTimes(1);
1015
- return [2 /*return*/];
1016
- }
1017
- });
1018
- }); });
1019
- });
1020
- describe('keyboard shortcuts', function () {
1021
- describe('Home and End', function () {
1022
- test('click End go to last page and Home return to the first page', function () { return __awaiter(void 0, void 0, void 0, function () {
1023
- var onClose, user, pageInput;
1024
- return __generator(this, function (_a) {
1025
- switch (_a.label) {
1026
- case 0:
1027
- onClose = jest.fn();
1028
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
1029
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
1030
- }).user;
1031
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
1032
- case 1:
1033
- _a.sent();
1034
- // eslint-disable-next-line testing-library/no-node-access
1035
- expect(document.querySelector('canvas')).toBeVisible();
1036
- expect(screen.getByText(/page/i)).toBeVisible();
1037
- pageInput = screen.getByRole('textbox', { name: /current page/i });
1038
- expect(pageInput).toHaveDisplayValue('1');
1039
- return [4 /*yield*/, user.keyboard('{End}')];
1040
- case 2:
1041
- _a.sent();
1042
- expect(pageInput).toHaveDisplayValue('4');
1043
- return [4 /*yield*/, user.keyboard('{Home}')];
1044
- case 3:
1045
- _a.sent();
1046
- expect(pageInput).toHaveDisplayValue('1');
1047
- return [2 /*return*/];
1048
- }
1049
- });
1050
- }); });
1051
- test('click End go to last page and Home return to the first page, but they do not work if the page input is focussed ', function () { return __awaiter(void 0, void 0, void 0, function () {
1052
- var onClose, user, pageInput;
1053
- return __generator(this, function (_a) {
1054
- switch (_a.label) {
1055
- case 0:
1056
- onClose = jest.fn();
1057
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
1058
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
1059
- }).user;
1060
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
1061
- case 1:
1062
- _a.sent();
1063
- // eslint-disable-next-line testing-library/no-node-access
1064
- expect(document.querySelector('canvas')).toBeVisible();
1065
- expect(screen.getByText(/page/i)).toBeVisible();
1066
- pageInput = screen.getByRole('textbox', { name: /current page/i });
1067
- expect(pageInput).toHaveDisplayValue('1');
1068
- return [4 /*yield*/, user.click(pageInput)];
1069
- case 2:
1070
- _a.sent();
1071
- expect(pageInput).toHaveFocus();
1072
- return [4 /*yield*/, user.keyboard('{End}')];
1073
- case 3:
1074
- _a.sent();
1075
- expect(pageInput).not.toHaveDisplayValue('4');
1076
- expect(pageInput).toHaveDisplayValue('1');
1077
- // remove focus
1078
- return [4 /*yield*/, user.keyboard('{Escape}')];
1079
- case 4:
1080
- // remove focus
1081
- _a.sent();
1082
- expect(pageInput).not.toHaveFocus();
1083
- return [4 /*yield*/, user.keyboard('{End}')];
1084
- case 5:
1085
- _a.sent();
1086
- expect(pageInput).toHaveDisplayValue('4');
1087
- // focus input again
1088
- return [4 /*yield*/, user.click(pageInput)];
1089
- case 6:
1090
- // focus input again
1091
- _a.sent();
1092
- expect(pageInput).toHaveFocus();
1093
- return [4 /*yield*/, user.keyboard('{Home}')];
1094
- case 7:
1095
- _a.sent();
1096
- expect(pageInput).not.toHaveDisplayValue('1');
1097
- expect(pageInput).toHaveDisplayValue('4');
1098
- // remove focus
1099
- return [4 /*yield*/, user.keyboard('{Escape}')];
1100
- case 8:
1101
- // remove focus
1102
- _a.sent();
1103
- expect(pageInput).not.toHaveFocus();
1104
- return [4 /*yield*/, user.keyboard('{Home}')];
1105
- case 9:
1106
- _a.sent();
1107
- expect(pageInput).toHaveDisplayValue('1');
1108
- return [2 /*return*/];
1109
- }
1110
- });
1111
- }); });
1112
- });
1113
- describe('PageUp and PageDown', function () {
1114
- test('click PageDown go to the next page and PageUp go to the previous page', function () { return __awaiter(void 0, void 0, void 0, function () {
1115
- var onClose, user, pageInput;
1116
- return __generator(this, function (_a) {
1117
- switch (_a.label) {
1118
- case 0:
1119
- onClose = jest.fn();
1120
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
1121
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
1122
- }).user;
1123
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
1124
- case 1:
1125
- _a.sent();
1126
- // eslint-disable-next-line testing-library/no-node-access
1127
- expect(document.querySelector('canvas')).toBeVisible();
1128
- expect(screen.getByText(/page/i)).toBeVisible();
1129
- pageInput = screen.getByRole('textbox', { name: /current page/i });
1130
- expect(pageInput).toHaveDisplayValue('1');
1131
- return [4 /*yield*/, user.keyboard('{PageDown}')];
1132
- case 2:
1133
- _a.sent();
1134
- expect(pageInput).toHaveDisplayValue('2');
1135
- return [4 /*yield*/, user.keyboard('{PageDown}')];
1136
- case 3:
1137
- _a.sent();
1138
- expect(pageInput).toHaveDisplayValue('3');
1139
- return [4 /*yield*/, user.keyboard('{PageDown}')];
1140
- case 4:
1141
- _a.sent();
1142
- expect(pageInput).toHaveDisplayValue('4');
1143
- return [4 /*yield*/, user.keyboard('{PageDown}')];
1144
- case 5:
1145
- _a.sent();
1146
- expect(pageInput).toHaveDisplayValue('4');
1147
- return [4 /*yield*/, user.keyboard('{PageUp}')];
1148
- case 6:
1149
- _a.sent();
1150
- expect(pageInput).toHaveDisplayValue('3');
1151
- return [4 /*yield*/, user.keyboard('{PageUp}')];
1152
- case 7:
1153
- _a.sent();
1154
- expect(pageInput).toHaveDisplayValue('2');
1155
- return [4 /*yield*/, user.keyboard('{PageUp}')];
1156
- case 8:
1157
- _a.sent();
1158
- expect(pageInput).toHaveDisplayValue('1');
1159
- return [4 /*yield*/, user.keyboard('{PageUp}')];
1160
- case 9:
1161
- _a.sent();
1162
- expect(pageInput).toHaveDisplayValue('1');
1163
- return [2 /*return*/];
1164
- }
1165
- });
1166
- }); });
1167
- test('click PageDown go to the next page and PageUp go to the previous page, but they do not work if the page input is focussed ', function () { return __awaiter(void 0, void 0, void 0, function () {
1168
- var onClose, user, pageInput;
1169
- return __generator(this, function (_a) {
1170
- switch (_a.label) {
1171
- case 0:
1172
- onClose = jest.fn();
1173
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
1174
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
1175
- }).user;
1176
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
1177
- case 1:
1178
- _a.sent();
1179
- // eslint-disable-next-line testing-library/no-node-access
1180
- expect(document.querySelector('canvas')).toBeVisible();
1181
- expect(screen.getByText(/page/i)).toBeVisible();
1182
- pageInput = screen.getByRole('textbox', { name: /current page/i });
1183
- expect(pageInput).toHaveDisplayValue('1');
1184
- return [4 /*yield*/, user.click(pageInput)];
1185
- case 2:
1186
- _a.sent();
1187
- expect(pageInput).toHaveFocus();
1188
- return [4 /*yield*/, user.keyboard('{PageDown}')];
1189
- case 3:
1190
- _a.sent();
1191
- expect(pageInput).not.toHaveDisplayValue('2');
1192
- expect(pageInput).toHaveDisplayValue('1');
1193
- // remove focus
1194
- return [4 /*yield*/, user.keyboard('{Escape}')];
1195
- case 4:
1196
- // remove focus
1197
- _a.sent();
1198
- expect(pageInput).not.toHaveFocus();
1199
- return [4 /*yield*/, user.keyboard('{PageDown}')];
1200
- case 5:
1201
- _a.sent();
1202
- expect(pageInput).toHaveDisplayValue('2');
1203
- // focus input again
1204
- return [4 /*yield*/, user.click(pageInput)];
1205
- case 6:
1206
- // focus input again
1207
- _a.sent();
1208
- expect(pageInput).toHaveFocus();
1209
- return [4 /*yield*/, user.keyboard('{PageUp}')];
1210
- case 7:
1211
- _a.sent();
1212
- expect(pageInput).not.toHaveDisplayValue('1');
1213
- expect(pageInput).toHaveDisplayValue('2');
1214
- // remove focus
1215
- return [4 /*yield*/, user.keyboard('{Escape}')];
1216
- case 8:
1217
- // remove focus
1218
- _a.sent();
1219
- expect(pageInput).not.toHaveFocus();
1220
- return [4 /*yield*/, user.keyboard('{PageUp}')];
1221
- case 9:
1222
- _a.sent();
1223
- expect(pageInput).toHaveDisplayValue('1');
1224
- return [2 /*return*/];
1225
- }
1226
- });
1227
- }); });
1228
- });
1229
- test('ArrowUp and ArrowDown', function () { return __awaiter(void 0, void 0, void 0, function () {
1230
- var onClose, scrollByFn, user, pageInput;
1231
- return __generator(this, function (_a) {
1232
- switch (_a.label) {
1233
- case 0:
1234
- onClose = jest.fn();
1235
- scrollByFn = jest.fn();
1236
- window.HTMLElement.prototype.scrollBy = scrollByFn;
1237
- user = setup(React.createElement(PdfPreview, { show: true, src: pdfFile.dataURI, onClose: onClose }), {
1238
- setupOptions: { advanceTimers: function () { return Promise.resolve(); } }
1239
- }).user;
1240
- return [4 /*yield*/, screen.findByText(/Loading document preview…/i)];
1241
- case 1:
1242
- _a.sent();
1243
- // eslint-disable-next-line testing-library/no-node-access
1244
- expect(document.querySelector('canvas')).toBeVisible();
1245
- expect(screen.getByText(/page/i)).toBeVisible();
1246
- pageInput = screen.getByRole('textbox', { name: /current page/i });
1247
- expect(pageInput).toHaveDisplayValue('1');
1248
- return [4 /*yield*/, user.click(pageInput)];
1249
- case 2:
1250
- _a.sent();
1251
- expect(pageInput).toHaveFocus();
1252
- return [4 /*yield*/, user.keyboard('{ArrowDown}')];
1253
- case 3:
1254
- _a.sent();
1255
- expect(scrollByFn).not.toHaveBeenCalled();
1256
- // remove focus
1257
- return [4 /*yield*/, user.keyboard('{Escape}')];
1258
- case 4:
1259
- // remove focus
1260
- _a.sent();
1261
- expect(pageInput).not.toHaveFocus();
1262
- return [4 /*yield*/, user.keyboard('{ArrowDown}')];
1263
- case 5:
1264
- _a.sent();
1265
- expect(scrollByFn).toHaveBeenCalledTimes(1);
1266
- expect(scrollByFn).toHaveBeenCalledWith(0, 40);
1267
- return [4 /*yield*/, user.click(pageInput)];
1268
- case 6:
1269
- _a.sent();
1270
- expect(pageInput).toHaveFocus();
1271
- return [4 /*yield*/, user.keyboard('{ArrowUp}')];
1272
- case 7:
1273
- _a.sent();
1274
- expect(scrollByFn).toHaveBeenCalledTimes(1);
1275
- // remove focus
1276
- return [4 /*yield*/, user.keyboard('{Escape}')];
1277
- case 8:
1278
- // remove focus
1279
- _a.sent();
1280
- expect(pageInput).not.toHaveFocus();
1281
- return [4 /*yield*/, user.keyboard('{ArrowUp}')];
1282
- case 9:
1283
- _a.sent();
1284
- expect(scrollByFn).toHaveBeenCalledTimes(2);
1285
- expect(scrollByFn).toHaveBeenCalledWith(0, -40);
1286
- return [2 /*return*/];
1287
- }
1288
- });
1289
- }); });
1290
- });
1291
- });
1292
- //# sourceMappingURL=PdfPreview.test.js.map