@griddo/ax 1.68.7 → 1.69.0

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 (55) hide show
  1. package/config/webpack.config.js +24 -0
  2. package/package.json +6 -2
  3. package/src/__mocks__/axios/ReferenceField.ts +471 -0
  4. package/src/{__tests__/components/Fields/UrlField → __mocks__}/mockedAxios.ts +0 -0
  5. package/src/__mocks__/reducers/structuredData.tsx +10 -0
  6. package/src/__mocks__/store/ReferenceField.ts +1671 -0
  7. package/src/__tests__/components/Fields/AnalyticsField/AnalyticsField.test.tsx +20 -28
  8. package/src/__tests__/components/Fields/CheckGroup/CheckGroup.test.tsx +16 -28
  9. package/src/__tests__/components/Fields/MultiCheckSelectGroup/MultiCheckSelectGroup.test.tsx +120 -0
  10. package/src/__tests__/components/Fields/ReferenceField/ReferenceField.test.tsx +532 -0
  11. package/src/__tests__/components/Fields/TextField/TextField.test.tsx +0 -1
  12. package/src/__tests__/components/Fields/UrlField/UrlField.test.tsx +14 -13
  13. package/src/__tests__/components/Fields/Wysiwyg/Wysiwyg.test.tsx +121 -0
  14. package/src/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/index.tsx +4 -3
  15. package/src/components/Fields/ComponentArray/MixableComponentArray/index.tsx +69 -34
  16. package/src/components/Fields/ComponentArray/SameComponentArray/index.tsx +59 -26
  17. package/src/components/Fields/ComponentContainer/atoms.tsx +2 -8
  18. package/src/components/Fields/ComponentContainer/index.tsx +21 -21
  19. package/src/components/Fields/ComponentContainer/style.tsx +49 -28
  20. package/src/components/Fields/MultiCheckSelectGroup/index.tsx +2 -2
  21. package/src/components/Fields/MultiCheckSelectGroup/style.tsx +4 -4
  22. package/src/components/Fields/ReferenceField/AutoPanel/AutoItem/index.tsx +1 -1
  23. package/src/components/Fields/ReferenceField/AutoPanel/index.tsx +2 -4
  24. package/src/components/Fields/ReferenceField/AutoPanel/style.tsx +3 -0
  25. package/src/components/Fields/ReferenceField/Context/index.tsx +3 -3
  26. package/src/components/Fields/ReferenceField/ItemList/Item/index.tsx +15 -24
  27. package/src/components/Fields/ReferenceField/ItemList/Item/style.tsx +22 -15
  28. package/src/components/Fields/ReferenceField/ItemList/index.tsx +42 -11
  29. package/src/components/Fields/ReferenceField/ManualPanel/Item/index.tsx +1 -1
  30. package/src/components/Fields/ReferenceField/index.tsx +5 -6
  31. package/src/components/Fields/Wysiwyg/index.tsx +4 -4
  32. package/src/components/Gallery/GalleryPanel/DetailPanel/index.tsx +12 -4
  33. package/src/components/Gallery/GalleryPanel/index.tsx +10 -2
  34. package/src/components/Gallery/index.tsx +5 -1
  35. package/src/components/MainWrapper/AppBar/index.tsx +1 -1
  36. package/src/containers/App/reducer.tsx +1 -0
  37. package/src/containers/Gallery/actions.tsx +11 -5
  38. package/src/containers/Navigation/Defaults/actions.tsx +2 -2
  39. package/src/containers/PageEditor/actions.tsx +18 -7
  40. package/src/forms/elements.tsx +5 -6
  41. package/src/helpers/arrays.tsx +1 -2
  42. package/src/modules/Content/PageItem/index.tsx +13 -2
  43. package/src/modules/Content/index.tsx +18 -1
  44. package/src/modules/GlobalEditor/Editor/index.tsx +2 -2
  45. package/src/modules/GlobalEditor/index.tsx +9 -7
  46. package/src/modules/Navigation/Defaults/DefaultsEditor/Editor/index.tsx +1 -1
  47. package/src/modules/PageEditor/Editor/index.tsx +2 -2
  48. package/src/modules/PageEditor/index.tsx +8 -6
  49. package/src/modules/StructuredData/Form/index.tsx +7 -4
  50. package/src/modules/StructuredData/StructuredDataList/GlobalPageItem/index.tsx +25 -3
  51. package/src/modules/StructuredData/StructuredDataList/index.tsx +4 -0
  52. package/src/__mocks__/reducers/analyticsState.tsx +0 -14
  53. package/src/__mocks__/reducers/app.tsx +0 -10
  54. package/src/__mocks__/reducers/pageEditor.tsx +0 -30
  55. package/src/__mocks__/reducers/sites.tsx +0 -10
@@ -0,0 +1,532 @@
1
+ import React from "react";
2
+ import axios from "axios";
3
+ import "@testing-library/jest-dom";
4
+ import { ThemeProvider } from "styled-components";
5
+ import { parseTheme } from "@griddo/core";
6
+ import { mock } from "jest-mock-extended";
7
+ import configureStore from "redux-mock-store";
8
+
9
+ import ReferenceField, { IReferenceFieldProps } from "@ax/components/Fields/ReferenceField/index";
10
+ import globalTheme from "@ax/themes/theme.json";
11
+
12
+ import { render, cleanup, screen, act, fireEvent } from "../../../../../config/jest/test-utils";
13
+ import {
14
+ articlesDistributorResponse,
15
+ storiesDistributorResponse,
16
+ articlesDataTitlesResponse,
17
+ storiesDataTitlesResponse,
18
+ structuredDataContentsResponse,
19
+ emptyArticlesDistributorResponse,
20
+ } from "../../../../__mocks__/axios/ReferenceField";
21
+ import { structuredDataMock, sitesMock, appMock } from "../../../../__mocks__/store/ReferenceField";
22
+
23
+ afterEach(() => {
24
+ cleanup();
25
+ jest.resetAllMocks();
26
+ });
27
+
28
+ const defaultProps = mock<IReferenceFieldProps>();
29
+ defaultProps.value = { source: ["ARTICLES"] };
30
+ defaultProps.source = ["ARTICLES"];
31
+
32
+ const initialStore = {
33
+ structuredData: structuredDataMock,
34
+ sites: sitesMock,
35
+ app: appMock,
36
+ };
37
+
38
+ const mockStore = configureStore();
39
+ const store = mockStore(initialStore);
40
+
41
+ jest.mock("axios");
42
+ const mockedAxios = axios as jest.MockedFunction<typeof axios>;
43
+ const mockApiCalls = () =>
44
+ mockedAxios.mockImplementation((request: any) => {
45
+ switch (request.url) {
46
+ case "undefined/structured_data/titles/ARTICLES":
47
+ return Promise.resolve(articlesDataTitlesResponse);
48
+ case "undefined/structured_data/titles/STORIES":
49
+ return Promise.resolve(storiesDataTitlesResponse);
50
+ case "undefined/site/85/distributor":
51
+ return Promise.resolve(articlesDistributorResponse);
52
+ case "undefined/site/85/structured_data_contents/ARTICLES?page=1&itemsPerPage=50&pagination=true&deleted=false&includeDraft=false":
53
+ return Promise.resolve(structuredDataContentsResponse);
54
+ default:
55
+ return Promise.reject(new Error("not found"));
56
+ }
57
+ });
58
+
59
+ describe("ReferenceField component rendering", () => {
60
+ test("should render the component ReferenceField", async () => {
61
+ defaultProps.value = {
62
+ order: "alpha-DESC",
63
+ };
64
+ defaultProps.selectionType = ["automatic"];
65
+ const onChange = jest.fn();
66
+ const initialState = { ...initialStore, ...defaultProps };
67
+
68
+ mockApiCalls();
69
+
70
+ await act(async () => {
71
+ render(
72
+ <ThemeProvider theme={parseTheme(globalTheme)}>
73
+ <ReferenceField {...initialState} onChange={onChange} />
74
+ </ThemeProvider>,
75
+ { store }
76
+ );
77
+ });
78
+
79
+ expect(screen.getByTestId("reference-field-wrapper")).toBeTruthy();
80
+ });
81
+
82
+ test("should render the component ReferenceField with API response fail", async () => {
83
+ defaultProps.value = {
84
+ order: "other-DESC",
85
+ };
86
+ defaultProps.selectionType = undefined;
87
+ const initialState = { ...initialStore, ...defaultProps };
88
+
89
+ const responseFail = {
90
+ data: null,
91
+ status: 400,
92
+ statusText: "Fail",
93
+ headers: {},
94
+ config: {},
95
+ };
96
+
97
+ mockedAxios.mockImplementation((request: any) => {
98
+ switch (request.url) {
99
+ case "undefined/structured_data/titles/ARTICLES":
100
+ return Promise.resolve(responseFail);
101
+ default:
102
+ return Promise.reject(new Error("not found"));
103
+ }
104
+ });
105
+
106
+ await act(async () => {
107
+ render(
108
+ <ThemeProvider theme={parseTheme(globalTheme)}>
109
+ <ReferenceField {...initialState} />
110
+ </ThemeProvider>,
111
+ { store }
112
+ );
113
+ });
114
+
115
+ expect(screen.getByTestId("reference-field-wrapper")).toBeTruthy();
116
+ });
117
+
118
+ test("should render the component ReferenceField with value undefined", async () => {
119
+ defaultProps.value = undefined;
120
+ const initialState = { ...initialStore, ...defaultProps };
121
+
122
+ mockApiCalls();
123
+
124
+ await act(async () => {
125
+ render(
126
+ <ThemeProvider theme={parseTheme(globalTheme)}>
127
+ <ReferenceField {...initialState} />
128
+ </ThemeProvider>,
129
+ { store }
130
+ );
131
+ });
132
+
133
+ expect(screen.getByTestId("auto-data-wrapper")).toBeTruthy();
134
+ });
135
+
136
+ test("should render the component ReferenceField with fixed is empty", async () => {
137
+ defaultProps.source = ["ARTICLES"];
138
+ defaultProps.value = {
139
+ mode: "manual",
140
+ fixed: [],
141
+ };
142
+ const initialState = { ...initialStore, ...defaultProps };
143
+ const onChange = jest.fn();
144
+
145
+ mockedAxios.mockImplementation((request: any) => {
146
+ switch (request.url) {
147
+ case "undefined/structured_data/titles/ARTICLES":
148
+ return Promise.resolve(articlesDataTitlesResponse);
149
+ case "undefined/structured_data/titles/STORIES":
150
+ return Promise.resolve(storiesDataTitlesResponse);
151
+ case "undefined/site/85/distributor":
152
+ return Promise.resolve(emptyArticlesDistributorResponse);
153
+ case "undefined/site/85/structured_data_contents/ARTICLES?page=1&itemsPerPage=50&pagination=true&deleted=false&includeDraft=false":
154
+ return Promise.resolve(structuredDataContentsResponse);
155
+ default:
156
+ return Promise.reject(new Error("not found"));
157
+ }
158
+ });
159
+
160
+ const Component = (
161
+ <ThemeProvider theme={parseTheme(globalTheme)}>
162
+ <ReferenceField {...initialState} onChange={onChange} />
163
+ </ThemeProvider>
164
+ );
165
+
166
+ const { rerender } = render(Component, { store });
167
+
168
+ await act(async () => {
169
+ rerender(Component);
170
+ });
171
+
172
+ expect(screen.queryAllByTestId("reference-field-item")).toHaveLength(0);
173
+ });
174
+ });
175
+
176
+ describe("onChange events", () => {
177
+ test("should apply change in AutoPanel", async () => {
178
+ defaultProps.source = ["STORIES"];
179
+ defaultProps.value = {
180
+ source: ["STORIES"],
181
+ filter: [
182
+ {
183
+ id: 4418,
184
+ label: "Story Type 1",
185
+ source: "STORIES",
186
+ },
187
+ {
188
+ id: 4419,
189
+ label: "Story Type 2",
190
+ source: "STORIES",
191
+ },
192
+ ],
193
+ quantity: 1,
194
+ };
195
+ const initialState = { ...initialStore, ...defaultProps };
196
+ const onChange = jest.fn();
197
+
198
+ mockedAxios.mockImplementation((request: any) => {
199
+ switch (request.url) {
200
+ case "undefined/structured_data/titles/ARTICLES":
201
+ return Promise.resolve(articlesDataTitlesResponse);
202
+ case "undefined/structured_data/titles/STORIES":
203
+ return Promise.resolve(storiesDataTitlesResponse);
204
+ case "undefined/site/85/distributor":
205
+ return Promise.resolve(storiesDistributorResponse);
206
+ default:
207
+ return Promise.reject(new Error("not found"));
208
+ }
209
+ });
210
+
211
+ const Component = (
212
+ <ThemeProvider theme={parseTheme(globalTheme)}>
213
+ <ReferenceField {...initialState} onChange={onChange} />
214
+ </ThemeProvider>
215
+ );
216
+
217
+ const { rerender } = render(Component, { store });
218
+
219
+ let iconActionComponents = screen.getAllByTestId("iconActionComponent");
220
+
221
+ await act(async () => {
222
+ fireEvent.click(iconActionComponents[0]);
223
+ });
224
+
225
+ await act(async () => {
226
+ rerender(Component);
227
+ });
228
+
229
+ iconActionComponents = screen.getAllByTestId("iconActionComponent");
230
+
231
+ await act(async () => {
232
+ fireEvent.click(iconActionComponents[2]);
233
+ });
234
+
235
+ const radioFieldInputs = screen.getAllByTestId("radio-field-input");
236
+ await act(async () => {
237
+ fireEvent.click(radioFieldInputs[1]);
238
+ fireEvent.click(radioFieldInputs[4]);
239
+ });
240
+
241
+ const arrowUp = screen.getByTestId("arrow-up");
242
+ await act(async () => {
243
+ fireEvent.click(arrowUp);
244
+ });
245
+
246
+ expect(screen.getByTestId("auto-panel-wrapper")).toBeTruthy();
247
+ expect(screen.getByTestId("input")).toHaveValue(2);
248
+
249
+ await act(async () => {
250
+ fireEvent.click(radioFieldInputs[5]);
251
+
252
+ const buttonDefault = screen.getByTestId("buttonDefault");
253
+ fireEvent.click(buttonDefault);
254
+ });
255
+
256
+ expect(onChange).toHaveBeenCalledTimes(1);
257
+ });
258
+
259
+ test("should add item in manual mode", async () => {
260
+ defaultProps.source = ["ARTICLES"];
261
+ defaultProps.value = {
262
+ mode: "manual",
263
+ fixed: [4492, 4493],
264
+ };
265
+ const initialState = { ...initialStore, ...defaultProps };
266
+ const onChange = jest.fn();
267
+
268
+ mockApiCalls();
269
+
270
+ const Component = (
271
+ <ThemeProvider theme={parseTheme(globalTheme)}>
272
+ <ReferenceField {...initialState} onChange={onChange} />
273
+ </ThemeProvider>
274
+ );
275
+
276
+ const { rerender } = render(Component, { store });
277
+
278
+ await act(async () => {
279
+ rerender(Component);
280
+ });
281
+
282
+ let referenceFieldItems = screen.getAllByTestId("reference-field-item");
283
+ expect(referenceFieldItems.length).toBe(2);
284
+
285
+ const iconActionComponents = screen.getAllByTestId("iconActionComponent");
286
+
287
+ await act(async () => {
288
+ fireEvent.click(iconActionComponents[0]);
289
+ });
290
+
291
+ await act(async () => {
292
+ rerender(Component);
293
+ });
294
+
295
+ const manualPanelItem = screen.getAllByTestId("manual-panel-item");
296
+ expect(manualPanelItem.length).toBe(8);
297
+
298
+ await act(async () => {
299
+ fireEvent.click(manualPanelItem[4]);
300
+ fireEvent.click(screen.getByTestId("buttonDefault"));
301
+ });
302
+
303
+ await act(async () => {
304
+ rerender(Component);
305
+ });
306
+
307
+ referenceFieldItems = screen.getAllByTestId("reference-field-item");
308
+ expect(referenceFieldItems.length).toBe(3);
309
+ });
310
+
311
+ test("should remove item in manual mode", async () => {
312
+ defaultProps.source = ["ARTICLES"];
313
+ defaultProps.value = {
314
+ mode: "manual",
315
+ fixed: [4492, 4493],
316
+ };
317
+ defaultProps.maxItems = 3;
318
+ const initialState = { ...initialStore, ...defaultProps };
319
+ const onChange = jest.fn();
320
+
321
+ mockApiCalls();
322
+
323
+ const Component = (
324
+ <ThemeProvider theme={parseTheme(globalTheme)}>
325
+ <ReferenceField {...initialState} onChange={onChange} />
326
+ </ThemeProvider>
327
+ );
328
+
329
+ const { rerender } = render(Component, { store });
330
+
331
+ await act(async () => {
332
+ rerender(Component);
333
+ });
334
+
335
+ let referenceFieldItems = screen.getAllByTestId("reference-field-item");
336
+ expect(referenceFieldItems.length).toBe(2);
337
+
338
+ const iconActionComponents = screen.getAllByTestId("iconActionComponent");
339
+
340
+ await act(async () => {
341
+ fireEvent.click(iconActionComponents[0]);
342
+ });
343
+
344
+ await act(async () => {
345
+ rerender(Component);
346
+ });
347
+
348
+ const manualPanelItem = screen.getAllByTestId("manual-panel-item");
349
+ expect(manualPanelItem.length).toBe(8);
350
+
351
+ await act(async () => {
352
+ fireEvent.click(manualPanelItem[0]);
353
+ fireEvent.click(manualPanelItem[6]);
354
+ fireEvent.click(screen.getByTestId("buttonDefault"));
355
+ });
356
+
357
+ await act(async () => {
358
+ rerender(Component);
359
+ });
360
+
361
+ referenceFieldItems = screen.getAllByTestId("reference-field-item");
362
+ expect(referenceFieldItems.length).toBe(1);
363
+ });
364
+
365
+ test("should delete filter tags", async () => {
366
+ defaultProps.source = ["STORIES"];
367
+ defaultProps.value = {
368
+ source: ["STORIES"],
369
+ filter: [
370
+ {
371
+ id: 4418,
372
+ label: "Story Type 1",
373
+ source: "STORIES",
374
+ },
375
+ {
376
+ id: 4419,
377
+ label: "Story Type 2",
378
+ source: "STORIES",
379
+ },
380
+ ],
381
+ };
382
+ const initialState = { ...initialStore, ...defaultProps };
383
+ const onChange = jest.fn();
384
+
385
+ mockedAxios.mockImplementation((request: any) => {
386
+ switch (request.url) {
387
+ case "undefined/structured_data/titles/ARTICLES":
388
+ return Promise.resolve(articlesDataTitlesResponse);
389
+ case "undefined/structured_data/titles/STORIES":
390
+ return Promise.resolve(storiesDataTitlesResponse);
391
+ case "undefined/site/85/distributor":
392
+ return Promise.resolve(storiesDistributorResponse);
393
+ default:
394
+ return Promise.reject(new Error("not found"));
395
+ }
396
+ });
397
+
398
+ const Component = (
399
+ <ThemeProvider theme={parseTheme(globalTheme)}>
400
+ <ReferenceField {...initialState} onChange={onChange} />
401
+ </ThemeProvider>
402
+ );
403
+
404
+ const { rerender } = render(Component, { store });
405
+
406
+ const iconActionComponents = screen.getAllByTestId("iconActionComponent");
407
+
408
+ await act(async () => {
409
+ fireEvent.click(iconActionComponents[0]);
410
+ });
411
+
412
+ await act(async () => {
413
+ rerender(Component);
414
+ });
415
+
416
+ let tagComponent = screen.getAllByTestId("tagComponent");
417
+
418
+ expect(tagComponent.length).toBe(2);
419
+
420
+ await act(async () => {
421
+ fireEvent.click(tagComponent[1]);
422
+ });
423
+
424
+ await act(async () => {
425
+ rerender(Component);
426
+ });
427
+
428
+ tagComponent = screen.getAllByTestId("tagComponent");
429
+
430
+ expect(tagComponent.length).toBe(1);
431
+ });
432
+
433
+ test("should reorder items", async () => {
434
+ defaultProps.source = ["ARTICLES"];
435
+ defaultProps.value = {
436
+ mode: "manual",
437
+ fixed: [4492, 4493],
438
+ };
439
+ const initialState = { ...initialStore, ...defaultProps };
440
+ const onChange = jest.fn();
441
+
442
+ mockApiCalls();
443
+
444
+ const Component = (
445
+ <ThemeProvider theme={parseTheme(globalTheme)}>
446
+ <ReferenceField {...initialState} onChange={onChange} />
447
+ </ThemeProvider>
448
+ );
449
+
450
+ const { rerender } = render(Component, { store });
451
+
452
+ await act(async () => {
453
+ rerender(Component);
454
+ });
455
+
456
+ let iconActionComponents = screen.getAllByTestId("iconActionComponent");
457
+
458
+ await act(async () => {
459
+ fireEvent.click(iconActionComponents[1]);
460
+ });
461
+
462
+ await act(async () => {
463
+ rerender(Component);
464
+ });
465
+
466
+ let referenceFieldItems = screen.getAllByTestId("reference-field-item");
467
+ expect(referenceFieldItems[0]).toHaveTextContent("Article 03");
468
+
469
+ iconActionComponents = screen.getAllByTestId("iconActionComponent");
470
+
471
+ await act(async () => {
472
+ fireEvent.click(iconActionComponents[3]);
473
+ });
474
+
475
+ await act(async () => {
476
+ rerender(Component);
477
+ });
478
+
479
+ referenceFieldItems = screen.getAllByTestId("reference-field-item");
480
+ expect(referenceFieldItems[0]).toHaveTextContent("Article 02");
481
+ });
482
+
483
+ test("should delete items", async () => {
484
+ defaultProps.source = ["ARTICLES"];
485
+ defaultProps.value = {
486
+ mode: "manual",
487
+ fixed: [4492, 4493],
488
+ };
489
+ const initialState = { ...initialStore, ...defaultProps };
490
+ const onChange = jest.fn();
491
+
492
+ mockApiCalls();
493
+
494
+ const Component = (
495
+ <ThemeProvider theme={parseTheme(globalTheme)}>
496
+ <ReferenceField {...initialState} onChange={onChange} />
497
+ </ThemeProvider>
498
+ );
499
+
500
+ const { rerender } = render(Component, { store });
501
+
502
+ await act(async () => {
503
+ rerender(Component);
504
+ });
505
+
506
+ let referenceFieldItems = screen.getAllByTestId("reference-field-item");
507
+ expect(referenceFieldItems.length).toBe(2);
508
+
509
+ const iconActionComponents = screen.getAllByTestId("iconActionComponent");
510
+
511
+ await act(async () => {
512
+ fireEvent.click(iconActionComponents[2]);
513
+ });
514
+
515
+ await act(async () => {
516
+ rerender(Component);
517
+ });
518
+
519
+ const actionMenuItem = screen.getByTestId("action-menu-item");
520
+
521
+ await act(async () => {
522
+ fireEvent.click(actionMenuItem);
523
+ });
524
+
525
+ await act(async () => {
526
+ rerender(Component);
527
+ });
528
+
529
+ referenceFieldItems = screen.getAllByTestId("reference-field-item");
530
+ expect(referenceFieldItems.length).toBe(1);
531
+ });
532
+ });
@@ -113,7 +113,6 @@ describe("onClick from buttons", () => {
113
113
  const backgroundIconComponent = screen.getByTestId("backgroundIconComponent");
114
114
  expect(backgroundIconComponent).toBeTruthy();
115
115
 
116
- // onClick called with simulate method
117
116
  fireEvent.click(backgroundIconComponent);
118
117
  expect(onClickIconMock).toBeCalledTimes(1);
119
118
  });
@@ -1,17 +1,21 @@
1
1
  import React from "react";
2
2
  import axios from "axios";
3
3
  import "@testing-library/jest-dom";
4
+ import configureStore from "redux-mock-store";
4
5
  import { ThemeProvider } from "styled-components";
5
- import { parseTheme } from "@griddo/core";
6
6
  import { mock } from "jest-mock-extended";
7
- import { createStore, combineReducers, Reducer, Action } from "redux";
8
7
 
8
+ import { render, cleanup, screen, act, fireEvent } from "../../../../../config/jest/test-utils";
9
+ import {
10
+ pageResponse,
11
+ pageResponseWithTabs,
12
+ sitePagesResponse,
13
+ structuredDataResponse,
14
+ } from "../../../../__mocks__/mockedAxios";
15
+
16
+ import { parseTheme } from "@griddo/core";
9
17
  import UrlField, { IUrlFieldProps } from "@ax/components/Fields/UrlField/index";
10
18
  import globalTheme from "@ax/themes/theme.json";
11
- import sitesReducer from "../../../../__mocks__/reducers/sites";
12
- import appReducer from "../../../../__mocks__/reducers/app";
13
- import { render, cleanup, screen, act, fireEvent } from "../../../../../config/jest/test-utils";
14
- import { pageResponse, pageResponseWithTabs, sitePagesResponse, structuredDataResponse } from "./mockedAxios";
15
19
 
16
20
  afterEach(() => {
17
21
  cleanup();
@@ -101,13 +105,10 @@ const initialStore = {
101
105
  app: appMock,
102
106
  };
103
107
 
104
- const store = createStore(
105
- combineReducers({
106
- sites: sitesReducer as Reducer<any, Action<any>>,
107
- app: appReducer as Reducer<any, Action<any>>,
108
- }),
109
- initialStore
110
- );
108
+ const middlewares: any = [];
109
+ const mockStore = configureStore(middlewares);
110
+
111
+ const store = mockStore(initialStore);
111
112
 
112
113
  jest.mock("axios");
113
114
  const mockedAxios = axios as jest.MockedFunction<typeof axios>;
@@ -0,0 +1,121 @@
1
+ import * as React from "react";
2
+ import { ThemeProvider } from "styled-components";
3
+ import { parseTheme } from "@griddo/core";
4
+ import { mock } from "jest-mock-extended";
5
+ import configureStore from "redux-mock-store";
6
+
7
+ import globalTheme from "@ax/themes/theme.json";
8
+ import Wysiwyg, { IWysiwygProps } from "@ax/components/Fields/Wysiwyg";
9
+ import { render, cleanup, screen } from "../../../../../config/jest/test-utils";
10
+
11
+ afterEach(() => {
12
+ cleanup();
13
+ jest.resetAllMocks();
14
+ });
15
+
16
+ const initialStore = {
17
+ app: {
18
+ token:
19
+ "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwidXNlcm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiYWRtaW5Ac2VjdW95YXMuY29tIiwiY2hlY2siOnRydWUsImlhdCI6MTY1NzExMjAxM30.1SDgrPDXU6ToFT8dtzEIxzaBevhmdBI4idKtSrd7vxQ",
20
+ },
21
+ };
22
+
23
+ const mockStore = configureStore();
24
+
25
+ const store = mockStore(initialStore);
26
+
27
+ const defaultProps = mock<IWysiwygProps>();
28
+
29
+ describe("Wysiwyg component rendering", () => {
30
+ it("should render the component in global", async () => {
31
+ defaultProps.value = "This is the text";
32
+
33
+ const initialState = { ...initialStore, ...defaultProps };
34
+
35
+ render(
36
+ <ThemeProvider theme={parseTheme(globalTheme)}>
37
+ <Wysiwyg {...initialState} />
38
+ </ThemeProvider>,
39
+ { store }
40
+ );
41
+
42
+ const wysiwygWrapper = screen.getByTestId("wysiwyg-wrapper");
43
+
44
+ expect(wysiwygWrapper).toBeTruthy();
45
+ expect(await screen.findByText("This is the text")).toBeTruthy();
46
+ });
47
+
48
+ it("should render the component in site", async () => {
49
+ defaultProps.value = "This is the text";
50
+ defaultProps.full = false;
51
+ defaultProps.site = {
52
+ id: 85,
53
+ name: "The Best Site",
54
+ theme: "default-theme",
55
+ author: "2",
56
+ pages: [],
57
+ published: "2021-11-03T16:54:14.000Z",
58
+ thumbnail: "http://images.dev.griddo.io/lil-bub-gato-11dd1482-476a-416d-88cf-3b9fb38d6f4d",
59
+ timezone: "Europe/Madrid",
60
+ favicon: "",
61
+ bigAvatar: "",
62
+ smallAvatar: "",
63
+ isPublished: true,
64
+ updated: true,
65
+ defaultLanguage: 4,
66
+ path: "",
67
+ domain: 1,
68
+ };
69
+
70
+ const initialState = { ...initialStore, ...defaultProps };
71
+
72
+ render(
73
+ <ThemeProvider theme={parseTheme(globalTheme)}>
74
+ <Wysiwyg {...initialState} />
75
+ </ThemeProvider>,
76
+ { store }
77
+ );
78
+
79
+ const wysiwygWrapper = screen.getByTestId("wysiwyg-wrapper");
80
+
81
+ expect(wysiwygWrapper).toBeTruthy();
82
+ expect(await screen.findByText("This is the text")).toBeTruthy();
83
+ });
84
+
85
+ it("should render when disabled", async () => {
86
+ defaultProps.value = "This is the text";
87
+ defaultProps.disabled = true;
88
+ defaultProps.placeholder = "The placeholder";
89
+
90
+ const initialState = { ...initialStore, ...defaultProps };
91
+
92
+ render(
93
+ <ThemeProvider theme={parseTheme(globalTheme)}>
94
+ <Wysiwyg {...initialState} />
95
+ </ThemeProvider>,
96
+ { store }
97
+ );
98
+
99
+ const wysiwygWrapper = screen.getByTestId("wysiwyg-wrapper");
100
+
101
+ expect(wysiwygWrapper).toBeTruthy();
102
+ expect(await screen.findByText("This is the text")).toBeTruthy();
103
+ });
104
+
105
+ it("should render when empty string", async () => {
106
+ defaultProps.value = "";
107
+ defaultProps.error = true;
108
+
109
+ const initialState = { ...initialStore, ...defaultProps };
110
+
111
+ render(
112
+ <ThemeProvider theme={parseTheme(globalTheme)}>
113
+ <Wysiwyg {...initialState} />
114
+ </ThemeProvider>,
115
+ { store }
116
+ );
117
+
118
+ const textarea = screen.getByRole("textbox", { hidden: true });
119
+ expect(textarea).toBeTruthy();
120
+ });
121
+ });