@griddo/ax 1.75.111 → 1.75.113

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 (52) hide show
  1. package/config/jest/componentsMock.js +122 -1
  2. package/package.json +2 -2
  3. package/src/__tests__/components/Avatar/__snapshots__/Avatar.test.tsx.snap +10 -10
  4. package/src/__tests__/components/ConfigPanel/ConfigPanel.test.tsx +252 -0
  5. package/src/__tests__/components/ConfigPanel/Form/ConnectedField/ConnectedField.test.tsx +177 -0
  6. package/src/__tests__/components/ConfigPanel/Form/ConnectedField/NavConnectedField/NavConnectedField.test.tsx +161 -0
  7. package/src/__tests__/components/ConfigPanel/Form/ConnectedField/PageConnectedField/Field/Field.test.tsx +115 -0
  8. package/src/__tests__/components/ConfigPanel/Form/ConnectedField/PageConnectedField/PageConnectedField.test.tsx +518 -0
  9. package/src/__tests__/components/ConfigPanel/Form/ConnectedField/PageConnectedField/TemplateManager/TemplateManager.test.tsx +144 -0
  10. package/src/__tests__/components/ConfigPanel/Form/Form.test.tsx +235 -0
  11. package/src/__tests__/components/ConfigPanel/GlobalPageForm/GlobalPageForm.test.tsx +196 -0
  12. package/src/__tests__/components/ConfigPanel/Header/Header.test.tsx +152 -0
  13. package/src/__tests__/components/ConfigPanel/NavigationForm/Field/Field.test.tsx +106 -0
  14. package/src/__tests__/components/ConfigPanel/NavigationForm/NavigationForm.test.tsx +93 -0
  15. package/src/__tests__/components/ConfigPanel/PreviewForm/PreviewForm.test.tsx +93 -0
  16. package/src/__tests__/components/Fields/FieldGroup/FieldGroup.test.tsx +5 -5
  17. package/src/__tests__/components/Fields/NoteField/NoteField.test.tsx +3 -3
  18. package/src/__tests__/components/Fields/SliderField/SliderField.test.tsx +4 -4
  19. package/src/__tests__/components/Fields/TagField/TagField.test.tsx +10 -10
  20. package/src/__tests__/components/Fields/TextArea/TextArea.test.tsx +3 -3
  21. package/src/__tests__/components/Fields/TextField/TextField.test.tsx +8 -8
  22. package/src/__tests__/components/Fields/UrlField/UrlField.test.tsx +2 -2
  23. package/src/__tests__/components/Gallery/Gallery.test.tsx +613 -0
  24. package/src/__tests__/components/Gallery/GalleryFilters/Orientation/Orientation.test.tsx +51 -0
  25. package/src/__tests__/components/Gallery/GalleryFilters/SortBy/SortBy.test.tsx +117 -0
  26. package/src/__tests__/components/Gallery/GalleryFilters/Type/Type.test.tsx +51 -0
  27. package/src/__tests__/components/Gallery/GalleryPanel/DetailPanel/DetailPanel.test.tsx +853 -0
  28. package/src/__tests__/components/Gallery/GalleryPanel/GalleryDragAndDrop/GalleryDragAndDrop.test.tsx +252 -0
  29. package/src/__tests__/components/Gallery/GalleryPanel/GalleryPanel.test.tsx +56 -0
  30. package/src/__tests__/components/Image/Image.test.tsx +5 -5
  31. package/src/components/ConfigPanel/Form/ConnectedField/PageConnectedField/Field/index.tsx +3 -4
  32. package/src/components/ConfigPanel/Form/index.tsx +13 -5
  33. package/src/components/ConfigPanel/GlobalPageForm/index.tsx +5 -5
  34. package/src/components/ConfigPanel/Header/index.tsx +3 -3
  35. package/src/components/ConfigPanel/NavigationForm/Field/index.tsx +5 -3
  36. package/src/components/ConfigPanel/NavigationForm/index.tsx +2 -2
  37. package/src/components/ConfigPanel/PreviewForm/index.tsx +3 -3
  38. package/src/components/ConfigPanel/index.tsx +2 -3
  39. package/src/components/Fields/FieldGroup/index.tsx +3 -3
  40. package/src/components/Fields/NoteField/index.tsx +2 -2
  41. package/src/components/Fields/SliderField/index.tsx +10 -3
  42. package/src/components/Fields/TagField/index.tsx +2 -2
  43. package/src/components/Fields/TextArea/index.tsx +1 -1
  44. package/src/components/Fields/TextField/index.tsx +3 -3
  45. package/src/components/Gallery/GalleryFilters/Orientation/index.tsx +14 -6
  46. package/src/components/Gallery/GalleryFilters/SortBy/index.tsx +2 -2
  47. package/src/components/Gallery/GalleryFilters/Type/index.tsx +2 -2
  48. package/src/components/Gallery/GalleryPanel/DetailPanel/index.tsx +4 -4
  49. package/src/components/Gallery/GalleryPanel/GalleryDragAndDrop/index.tsx +5 -4
  50. package/src/components/Gallery/GalleryPanel/index.tsx +3 -11
  51. package/src/components/Gallery/index.tsx +6 -5
  52. package/src/containers/PageEditor/actions.tsx +1 -2
@@ -0,0 +1,853 @@
1
+ import * as React from "react";
2
+ import axios, { AxiosResponse } from "axios";
3
+ import { ThemeProvider } from "styled-components";
4
+ import { render, cleanup, screen, fireEvent, act } from "../../../../../../config/jest/test-utils";
5
+ import { mock } from "jest-mock-extended";
6
+ import configureStore from "redux-mock-store";
7
+ import "@testing-library/jest-dom";
8
+ import thunk from "redux-thunk";
9
+ import { Router } from "react-router-dom";
10
+
11
+ import { parseTheme } from "@ax/helpers";
12
+ import { history } from "@ax/routes";
13
+ import GalleryDetailPanel, { IDetailPanelProps, IDispatchProps } from "@ax/components/Gallery/GalleryPanel/DetailPanel";
14
+ import globalTheme from "@ax/themes/theme.json";
15
+ import { IImageForm } from "@ax/types";
16
+
17
+ // for testing copy to clipboard
18
+ Object.assign(navigator, {
19
+ clipboard: {
20
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
21
+ writeText: () => {},
22
+ },
23
+ });
24
+
25
+ afterEach(() => {
26
+ cleanup();
27
+ jest.clearAllMocks();
28
+ });
29
+
30
+ const middlewares: any = [thunk];
31
+ const mockStore = configureStore(middlewares);
32
+
33
+ jest.mock("axios");
34
+ const mockedAxios = axios as jest.MockedFunction<typeof axios>;
35
+
36
+ const defaultDetailProps = mock<IDetailPanelProps>();
37
+ const defaultDispatchProps = mock<IDispatchProps>();
38
+ jest.useFakeTimers();
39
+
40
+ describe("Gallery component rendering", () => {
41
+ it("should render the component", () => {
42
+ const initialStore = {
43
+ gallery: {
44
+ isSaving: {
45
+ save: false,
46
+ saveAdd: false,
47
+ delete: false,
48
+ },
49
+ },
50
+ };
51
+
52
+ const store = mockStore(initialStore);
53
+
54
+ defaultDetailProps.imageSelected = {
55
+ id: 1001,
56
+ name: "Imagen_Interior_fullstack.png",
57
+ title: "",
58
+ description: "",
59
+ alt: "",
60
+ tags: [],
61
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
62
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
63
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
64
+ damId: "imagen-interior-fullstack",
65
+ published: new Date("2022-06-30T07:06:54.352Z"),
66
+ size: 55286,
67
+ width: 680,
68
+ height: 353,
69
+ orientation: "L",
70
+ site: "Global",
71
+ };
72
+
73
+ const defaultProps = {
74
+ ...defaultDetailProps,
75
+ ...defaultDispatchProps,
76
+ };
77
+
78
+ render(
79
+ <ThemeProvider theme={parseTheme(globalTheme)}>
80
+ <GalleryDetailPanel {...defaultProps} />
81
+ </ThemeProvider>,
82
+ { store }
83
+ );
84
+
85
+ const detailPanelWrapper = screen.getByTestId("detail-panel-wrapper");
86
+ expect(detailPanelWrapper).toBeTruthy();
87
+ expect(screen.queryByText("Delete")).toBeInTheDocument();
88
+ expect(screen.queryByText("Save")).toBeInTheDocument();
89
+ expect(screen.queryByText("Save & Add")).toBeInTheDocument();
90
+ });
91
+
92
+ it("should render the component with ing options in buttons", () => {
93
+ const initialStore = {
94
+ gallery: {
95
+ isSaving: {
96
+ save: true,
97
+ saveAdd: true,
98
+ delete: true,
99
+ },
100
+ },
101
+ };
102
+
103
+ const store = mockStore(initialStore);
104
+
105
+ defaultDetailProps.imageSelected = {
106
+ id: 1001,
107
+ name: "Imagen_Interior_fullstack.png",
108
+ title: "",
109
+ description: "",
110
+ alt: "",
111
+ tags: [],
112
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
113
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
114
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
115
+ damId: "imagen-interior-fullstack",
116
+ published: new Date("2022-06-30T07:06:54.352Z"),
117
+ size: 55286,
118
+ width: 680,
119
+ height: 353,
120
+ orientation: "L",
121
+ site: "Global",
122
+ };
123
+
124
+ const defaultProps = {
125
+ ...defaultDetailProps,
126
+ ...defaultDispatchProps,
127
+ };
128
+
129
+ render(
130
+ <ThemeProvider theme={parseTheme(globalTheme)}>
131
+ <GalleryDetailPanel {...defaultProps} />
132
+ </ThemeProvider>,
133
+ { store }
134
+ );
135
+
136
+ const detailPanelWrapper = screen.getByTestId("detail-panel-wrapper");
137
+ expect(detailPanelWrapper).toBeTruthy();
138
+ expect(screen.queryByText("Deleting")).toBeInTheDocument();
139
+ expect(screen.queryAllByText("Saving")).toHaveLength(2);
140
+ });
141
+
142
+ it("should click the handleDelete and delete the image", async () => {
143
+ const responsePromise = Promise.resolve({
144
+ status: 200,
145
+ statusText: "ok",
146
+ } as AxiosResponse);
147
+
148
+ mockedAxios.mockResolvedValue(responsePromise);
149
+
150
+ const initialStore = {
151
+ gallery: {
152
+ isSaving: {
153
+ save: false,
154
+ saveAdd: false,
155
+ delete: false,
156
+ },
157
+ },
158
+ };
159
+
160
+ const store = mockStore(initialStore);
161
+
162
+ defaultDetailProps.imageSelected = {
163
+ id: 1001,
164
+ name: "Imagen_Interior_fullstack.png",
165
+ title: "",
166
+ description: "",
167
+ alt: "",
168
+ tags: [],
169
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
170
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
171
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
172
+ damId: "imagen-interior-fullstack",
173
+ published: new Date("2022-06-30T07:06:54.352Z"),
174
+ size: 55286,
175
+ width: 680,
176
+ height: 353,
177
+ orientation: "L",
178
+ site: "Global",
179
+ };
180
+
181
+ const refreshImagesMocked = defaultDetailProps.refreshImages as jest.MockedFunction<() => void>;
182
+ const deleteImageMocked = defaultDispatchProps.deleteImage as jest.MockedFunction<
183
+ (imageID: number) => Promise<boolean>
184
+ >;
185
+
186
+ const defaultProps = {
187
+ ...defaultDetailProps,
188
+ ...defaultDispatchProps,
189
+ };
190
+
191
+ const component = (
192
+ <Router history={history}>
193
+ <ThemeProvider theme={parseTheme(globalTheme)}>
194
+ <GalleryDetailPanel {...defaultProps} />
195
+ </ThemeProvider>
196
+ </Router>
197
+ );
198
+
199
+ render(component, { store });
200
+
201
+ const buttonWrapper = screen.getByTestId("button-text");
202
+ expect(buttonWrapper).toBeTruthy();
203
+
204
+ await act(async () => {
205
+ fireEvent.click(buttonWrapper);
206
+ });
207
+ expect(screen.getByText(/1 image deleted/i)).toBeInTheDocument();
208
+ expect(refreshImagesMocked).toBeCalled();
209
+ });
210
+
211
+ it("should click the handleDelete and don't delete the image", async () => {
212
+ const responsePromise = Promise.resolve({
213
+ data: {
214
+ code: 500,
215
+ message: "error",
216
+ },
217
+ } as AxiosResponse);
218
+
219
+ mockedAxios.mockResolvedValue(responsePromise);
220
+
221
+ const initialStore = {
222
+ gallery: {
223
+ isSaving: {
224
+ save: false,
225
+ saveAdd: false,
226
+ delete: false,
227
+ },
228
+ },
229
+ };
230
+
231
+ const store = mockStore(initialStore);
232
+
233
+ defaultDetailProps.imageSelected = {
234
+ id: 1001,
235
+ name: "Imagen_Interior_fullstack.png",
236
+ title: "",
237
+ description: "",
238
+ alt: "",
239
+ tags: [],
240
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
241
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
242
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
243
+ damId: "imagen-interior-fullstack",
244
+ published: new Date("2022-06-30T07:06:54.352Z"),
245
+ size: 55286,
246
+ width: 680,
247
+ height: 353,
248
+ orientation: "L",
249
+ site: "Global",
250
+ };
251
+
252
+ const refreshImagesMocked = defaultDetailProps.refreshImages as jest.MockedFunction<() => void>;
253
+ const deleteImageMocked = defaultDispatchProps.deleteImage as jest.MockedFunction<
254
+ (imageID: number) => Promise<boolean>
255
+ >;
256
+
257
+ const defaultProps = {
258
+ ...defaultDetailProps,
259
+ ...defaultDispatchProps,
260
+ };
261
+
262
+ const component = (
263
+ <ThemeProvider theme={parseTheme(globalTheme)}>
264
+ <GalleryDetailPanel {...defaultProps} />
265
+ </ThemeProvider>
266
+ );
267
+
268
+ render(component, { store });
269
+
270
+ const buttonWrapper = screen.getByTestId("button-text");
271
+ expect(buttonWrapper).toBeTruthy();
272
+
273
+ await act(async () => {
274
+ fireEvent.click(buttonWrapper);
275
+ });
276
+
277
+ expect(screen.queryByText(/1 image deleted/i)).not.toBeInTheDocument();
278
+ expect(refreshImagesMocked).toBeCalled();
279
+ });
280
+
281
+ it("should click the handleDelete but not refresh images", async () => {
282
+ const responsePromise = Promise.resolve({
283
+ status: 500,
284
+ statusText: "error",
285
+ } as AxiosResponse);
286
+
287
+ mockedAxios.mockRejectedValue(responsePromise);
288
+
289
+ const initialStore = {
290
+ gallery: {
291
+ isSaving: {
292
+ save: false,
293
+ saveAdd: false,
294
+ delete: false,
295
+ },
296
+ },
297
+ };
298
+
299
+ const store = mockStore(initialStore);
300
+
301
+ defaultDetailProps.imageSelected = {
302
+ name: "Imagen_Interior_fullstack.png",
303
+ title: "",
304
+ description: "",
305
+ alt: "",
306
+ tags: [],
307
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
308
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
309
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
310
+ damId: "imagen-interior-fullstack",
311
+ published: new Date("2022-06-30T07:06:54.352Z"),
312
+ size: 55286,
313
+ width: 680,
314
+ height: 353,
315
+ orientation: "L",
316
+ site: "Global",
317
+ };
318
+
319
+ const refreshImagesMocked = defaultDetailProps.refreshImages as jest.MockedFunction<() => void>;
320
+ const deleteImageMocked = defaultDispatchProps.deleteImage as jest.MockedFunction<
321
+ (imageID: number) => Promise<boolean>
322
+ >;
323
+
324
+ const defaultProps = {
325
+ ...defaultDetailProps,
326
+ ...defaultDispatchProps,
327
+ };
328
+
329
+ const component = (
330
+ <ThemeProvider theme={parseTheme(globalTheme)}>
331
+ <GalleryDetailPanel {...defaultProps} />
332
+ </ThemeProvider>
333
+ );
334
+
335
+ render(component, { store });
336
+
337
+ const buttonWrapper = screen.getByTestId("button-text");
338
+ expect(buttonWrapper).toBeTruthy();
339
+
340
+ await act(async () => {
341
+ fireEvent.click(buttonWrapper);
342
+ });
343
+
344
+ expect(screen.queryByText(/1 image deleted/i)).not.toBeInTheDocument();
345
+ expect(refreshImagesMocked).not.toBeCalled();
346
+ });
347
+
348
+ it("should click the handleSave and update the image", async () => {
349
+ const responsePromise = Promise.resolve({
350
+ status: 200,
351
+ statusText: "ok",
352
+ } as AxiosResponse);
353
+
354
+ mockedAxios.mockResolvedValue(responsePromise);
355
+
356
+ const initialStore = {
357
+ gallery: {
358
+ isSaving: {
359
+ save: false,
360
+ saveAdd: false,
361
+ delete: false,
362
+ },
363
+ },
364
+ };
365
+
366
+ const store = mockStore(initialStore);
367
+
368
+ defaultDetailProps.imageSelected = {
369
+ id: 1001,
370
+ name: "Imagen_Interior_fullstack.png",
371
+ title: "",
372
+ description: "",
373
+ alt: "",
374
+ tags: [],
375
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
376
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
377
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
378
+ damId: "imagen-interior-fullstack",
379
+ published: new Date("2022-06-30T07:06:54.352Z"),
380
+ size: 55286,
381
+ width: 680,
382
+ height: 353,
383
+ orientation: "L",
384
+ site: "Global",
385
+ };
386
+
387
+ const refreshImagesMocked = defaultDetailProps.refreshImages as jest.MockedFunction<() => void>;
388
+ const updateImageMock = defaultDispatchProps.updateImage as jest.MockedFunction<
389
+ (imageID: number, imageData: IImageForm, add?: boolean) => Promise<void>
390
+ >;
391
+
392
+ const defaultProps = {
393
+ ...defaultDetailProps,
394
+ ...defaultDispatchProps,
395
+ };
396
+
397
+ const component = (
398
+ <ThemeProvider theme={parseTheme(globalTheme)}>
399
+ <GalleryDetailPanel {...defaultProps} />
400
+ </ThemeProvider>
401
+ );
402
+
403
+ render(component, { store });
404
+
405
+ const buttonWrapper = screen.getAllByTestId("button-line-inverse");
406
+ expect(buttonWrapper).toBeTruthy();
407
+
408
+ await act(async () => {
409
+ fireEvent.click(buttonWrapper[1]);
410
+ });
411
+
412
+ expect(refreshImagesMocked).toBeCalled();
413
+ });
414
+
415
+ it("should click the handleSave and no update the image", async () => {
416
+ const responsePromise = Promise.resolve({
417
+ status: 200,
418
+ statusText: "ok",
419
+ } as AxiosResponse);
420
+
421
+ mockedAxios.mockResolvedValue(responsePromise);
422
+
423
+ const initialStore = {
424
+ gallery: {
425
+ isSaving: {
426
+ save: false,
427
+ saveAdd: false,
428
+ delete: false,
429
+ },
430
+ },
431
+ };
432
+
433
+ const store = mockStore(initialStore);
434
+
435
+ defaultDetailProps.imageSelected = {
436
+ name: "Imagen_Interior_fullstack.png",
437
+ title: "",
438
+ description: "",
439
+ alt: "",
440
+ tags: [],
441
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
442
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
443
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
444
+ damId: "imagen-interior-fullstack",
445
+ published: new Date("2022-06-30T07:06:54.352Z"),
446
+ size: 55286,
447
+ width: 680,
448
+ height: 353,
449
+ orientation: "L",
450
+ site: "Global",
451
+ };
452
+
453
+ const refreshImagesMocked = defaultDetailProps.refreshImages as jest.MockedFunction<() => void>;
454
+ const updateImageMock = defaultDispatchProps.updateImage as jest.MockedFunction<
455
+ (imageID: number, imageData: IImageForm, add?: boolean) => Promise<void>
456
+ >;
457
+
458
+ const defaultProps = {
459
+ ...defaultDetailProps,
460
+ ...defaultDispatchProps,
461
+ };
462
+
463
+ const component = (
464
+ <ThemeProvider theme={parseTheme(globalTheme)}>
465
+ <GalleryDetailPanel {...defaultProps} />
466
+ </ThemeProvider>
467
+ );
468
+
469
+ render(component, { store });
470
+
471
+ const buttonWrapper = screen.getAllByTestId("button-line-inverse");
472
+ expect(buttonWrapper).toBeTruthy();
473
+
474
+ await act(async () => {
475
+ fireEvent.click(buttonWrapper[1]);
476
+ });
477
+
478
+ expect(refreshImagesMocked).not.toBeCalled();
479
+ });
480
+
481
+ it("should click the handleSaveAndAdd", async () => {
482
+ const responsePromise = Promise.resolve({
483
+ status: 200,
484
+ statusText: "ok",
485
+ } as AxiosResponse);
486
+
487
+ mockedAxios.mockResolvedValue(responsePromise);
488
+
489
+ const initialStore = {
490
+ gallery: {
491
+ isSaving: {
492
+ save: false,
493
+ saveAdd: false,
494
+ delete: false,
495
+ },
496
+ },
497
+ };
498
+
499
+ const store = mockStore(initialStore);
500
+
501
+ defaultDetailProps.imageSelected = {
502
+ id: 1001,
503
+ name: "Imagen_Interior_fullstack.png",
504
+ title: "",
505
+ description: "",
506
+ alt: "",
507
+ tags: [],
508
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
509
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
510
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
511
+ damId: "imagen-interior-fullstack",
512
+ published: new Date("2022-06-30T07:06:54.352Z"),
513
+ size: 55286,
514
+ width: 680,
515
+ height: 353,
516
+ orientation: "L",
517
+ site: "Global",
518
+ };
519
+
520
+ const setImageMock = defaultDetailProps.setImage as jest.MockedFunction<(imageData: any) => void>;
521
+
522
+ const defaultProps = {
523
+ ...defaultDetailProps,
524
+ ...defaultDispatchProps,
525
+ };
526
+
527
+ const component = (
528
+ <ThemeProvider theme={parseTheme(globalTheme)}>
529
+ <GalleryDetailPanel {...defaultProps} />
530
+ </ThemeProvider>
531
+ );
532
+
533
+ render(component, { store });
534
+
535
+ const buttonWrapper = screen.getByTestId("button-default");
536
+ expect(buttonWrapper).toBeTruthy();
537
+
538
+ await act(async () => {
539
+ fireEvent.click(buttonWrapper);
540
+ });
541
+
542
+ expect(setImageMock).toBeCalled();
543
+ });
544
+
545
+ it("should click the handleSave and no update the image", async () => {
546
+ const responsePromise = Promise.resolve({
547
+ status: 200,
548
+ statusText: "ok",
549
+ } as AxiosResponse);
550
+
551
+ mockedAxios.mockResolvedValue(responsePromise);
552
+
553
+ const initialStore = {
554
+ gallery: {
555
+ isSaving: {
556
+ save: false,
557
+ saveAdd: false,
558
+ delete: false,
559
+ },
560
+ },
561
+ };
562
+
563
+ const store = mockStore(initialStore);
564
+
565
+ defaultDetailProps.imageSelected = {
566
+ name: "Imagen_Interior_fullstack.png",
567
+ title: "",
568
+ description: "",
569
+ alt: "",
570
+ tags: [],
571
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
572
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
573
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
574
+ damId: "imagen-interior-fullstack",
575
+ published: new Date("2022-06-30T07:06:54.352Z"),
576
+ size: 55286,
577
+ width: 680,
578
+ height: 353,
579
+ orientation: "L",
580
+ site: "Global",
581
+ };
582
+
583
+ const setImageMock = defaultDetailProps.setImage as jest.MockedFunction<(imageData: any) => void>;
584
+
585
+ const defaultProps = {
586
+ ...defaultDetailProps,
587
+ ...defaultDispatchProps,
588
+ };
589
+
590
+ const component = (
591
+ <ThemeProvider theme={parseTheme(globalTheme)}>
592
+ <GalleryDetailPanel {...defaultProps} />
593
+ </ThemeProvider>
594
+ );
595
+
596
+ render(component, { store });
597
+
598
+ const buttonWrapper = screen.getByTestId("button-default");
599
+ expect(buttonWrapper).toBeTruthy();
600
+
601
+ await act(async () => {
602
+ fireEvent.click(buttonWrapper);
603
+ });
604
+
605
+ expect(setImageMock).not.toBeCalled();
606
+ });
607
+
608
+ it("should render the AddToGlobal", async () => {
609
+ const initialStore = {
610
+ gallery: {
611
+ isSaving: {
612
+ save: false,
613
+ saveAdd: false,
614
+ delete: false,
615
+ },
616
+ },
617
+ };
618
+
619
+ const store = mockStore(initialStore);
620
+
621
+ defaultDetailProps.imageSelected = {
622
+ id: 1001,
623
+ name: "Imagen_Interior_fullstack.png",
624
+ title: "",
625
+ description: "",
626
+ alt: "",
627
+ tags: [],
628
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
629
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
630
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
631
+ damId: "imagen-interior-fullstack",
632
+ published: new Date("2022-06-30T07:06:54.352Z"),
633
+ size: 55286,
634
+ width: 680,
635
+ height: 353,
636
+ orientation: "L",
637
+ site: "Global",
638
+ file: new File([""], "darthvader.png"),
639
+ };
640
+
641
+ const defaultProps = {
642
+ ...defaultDetailProps,
643
+ ...defaultDispatchProps,
644
+ };
645
+
646
+ const component = (
647
+ <ThemeProvider theme={parseTheme(globalTheme)}>
648
+ <GalleryDetailPanel {...defaultProps} />
649
+ </ThemeProvider>
650
+ );
651
+
652
+ render(component, { store });
653
+
654
+ const addToGlobalWrapper = screen.getByTestId("add-to-global-wrapper");
655
+ expect(addToGlobalWrapper).toBeTruthy();
656
+ });
657
+
658
+ it("should click the handleCopyUrl", async () => {
659
+ jest.spyOn(navigator.clipboard, "writeText");
660
+
661
+ const initialStore = {
662
+ gallery: {
663
+ isSaving: {
664
+ save: false,
665
+ saveAdd: false,
666
+ delete: false,
667
+ },
668
+ },
669
+ };
670
+
671
+ const store = mockStore(initialStore);
672
+
673
+ defaultDetailProps.imageSelected = {
674
+ id: 1001,
675
+ name: "Imagen_Interior_fullstack.png",
676
+ title: "",
677
+ description: "",
678
+ alt: "",
679
+ tags: [],
680
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
681
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
682
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
683
+ damId: "imagen-interior-fullstack",
684
+ published: new Date("2022-06-30T07:06:54.352Z"),
685
+ size: 55286,
686
+ width: 680,
687
+ height: 353,
688
+ orientation: "L",
689
+ site: "Global",
690
+ };
691
+
692
+ const defaultProps = {
693
+ ...defaultDetailProps,
694
+ ...defaultDispatchProps,
695
+ };
696
+
697
+ const component = (
698
+ <ThemeProvider theme={parseTheme(globalTheme)}>
699
+ <GalleryDetailPanel {...defaultProps} />
700
+ </ThemeProvider>
701
+ );
702
+
703
+ render(component, { store });
704
+
705
+ const buttonWrapper = screen.getAllByTestId("button-line-inverse");
706
+ expect(buttonWrapper).toBeTruthy();
707
+
708
+ await act(async () => {
709
+ fireEvent.click(buttonWrapper[0]);
710
+ });
711
+
712
+ expect(navigator.clipboard.writeText).toHaveBeenCalledWith(
713
+ "https://images.dev.griddo.io/imagen-interior-fullstack"
714
+ );
715
+ });
716
+
717
+ it("should call window.open with the image url", async () => {
718
+ window.open = jest.fn();
719
+
720
+ const initialStore = {
721
+ gallery: {
722
+ isSaving: {
723
+ save: false,
724
+ saveAdd: false,
725
+ delete: false,
726
+ },
727
+ },
728
+ };
729
+
730
+ const store = mockStore(initialStore);
731
+
732
+ defaultDetailProps.imageSelected = {
733
+ id: 1001,
734
+ name: "Imagen_Interior_fullstack.png",
735
+ title: "",
736
+ description: "",
737
+ alt: "",
738
+ tags: [],
739
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
740
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
741
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
742
+ damId: "imagen-interior-fullstack",
743
+ published: new Date("2022-06-30T07:06:54.352Z"),
744
+ size: 55286,
745
+ width: 680,
746
+ height: 353,
747
+ orientation: "L",
748
+ site: "Global",
749
+ };
750
+
751
+ const defaultProps = {
752
+ ...defaultDetailProps,
753
+ ...defaultDispatchProps,
754
+ };
755
+
756
+ const component = (
757
+ <ThemeProvider theme={parseTheme(globalTheme)}>
758
+ <GalleryDetailPanel {...defaultProps} />
759
+ </ThemeProvider>
760
+ );
761
+
762
+ render(component, { store });
763
+
764
+ const buttonWrapper = screen.getByTestId("icon-action-component");
765
+ expect(buttonWrapper).toBeTruthy();
766
+
767
+ await act(async () => {
768
+ fireEvent.click(buttonWrapper);
769
+ });
770
+
771
+ expect(window.open).toHaveBeenCalledWith("https://images.dev.griddo.io/imagen-interior-fullstack", "_blank");
772
+ });
773
+
774
+ it("should call the onChange of the FieldBehaviors", () => {
775
+ const initialStore = {
776
+ gallery: {
777
+ isSaving: {
778
+ save: false,
779
+ saveAdd: false,
780
+ delete: false,
781
+ },
782
+ },
783
+ };
784
+
785
+ const store = mockStore(initialStore);
786
+
787
+ defaultDetailProps.imageSelected = {
788
+ id: 1001,
789
+ name: "Imagen_Interior_fullstack.png",
790
+ title: "",
791
+ description: "",
792
+ alt: "",
793
+ tags: [],
794
+ url: "https://images.dev.griddo.io/imagen-interior-fullstack",
795
+ thumb: "https://images.dev.griddo.io/w/215/h/161/imagen-interior-fullstack",
796
+ publicId: "thesaurus-dev/Imagen_Interior_fullstack_6c908d9f-b493-4c93-b4d2-a0439bc00820",
797
+ damId: "imagen-interior-fullstack",
798
+ published: new Date("2022-06-30T07:06:54.352Z"),
799
+ size: 55286,
800
+ width: 680,
801
+ height: 353,
802
+ orientation: "L",
803
+ site: "Global",
804
+ };
805
+
806
+ const defaultProps = {
807
+ ...defaultDetailProps,
808
+ ...defaultDispatchProps,
809
+ };
810
+
811
+ const component = (
812
+ <ThemeProvider theme={parseTheme(globalTheme)}>
813
+ <GalleryDetailPanel {...defaultProps} />
814
+ </ThemeProvider>
815
+ );
816
+
817
+ const { rerender } = render(component, { store });
818
+
819
+ const inputComponent = screen.getAllByTestId("input-component");
820
+ expect(inputComponent).toBeTruthy();
821
+ act(() => {
822
+ fireEvent.change(inputComponent[0], { target: { value: "a title" } });
823
+ rerender(component);
824
+ jest.runAllTimers();
825
+ });
826
+
827
+ expect(screen.getByDisplayValue("a title")).toBeInTheDocument();
828
+
829
+ act(() => {
830
+ fireEvent.change(inputComponent[1], { target: { value: "a text" } });
831
+ rerender(component);
832
+ jest.runAllTimers();
833
+ });
834
+ expect(screen.getByDisplayValue("a text")).toBeInTheDocument();
835
+
836
+ const textAreaComponent = screen.getAllByTestId("text-area-component");
837
+ expect(textAreaComponent).toBeTruthy();
838
+ act(() => {
839
+ fireEvent.change(textAreaComponent[0], { target: { value: "a description" } });
840
+ rerender(component);
841
+ jest.runAllTimers();
842
+ });
843
+
844
+ expect(screen.getByDisplayValue("a description")).toBeInTheDocument();
845
+
846
+ const tagFieldInput = screen.getByTestId("tag-field-input");
847
+ expect(tagFieldInput).toBeTruthy();
848
+ fireEvent.change(tagFieldInput, { target: { value: "a tag" } });
849
+ expect(screen.getByDisplayValue("a tag")).toBeInTheDocument();
850
+ fireEvent.keyDown(tagFieldInput, { key: "Enter" });
851
+ expect(screen.queryByDisplayValue("a tag")).not.toBeInTheDocument();
852
+ });
853
+ });