@griddo/ax 1.67.10 → 1.68.2

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 (121) hide show
  1. package/config/jest/componentsMock.js +1528 -27
  2. package/package.json +2 -2
  3. package/src/__mocks__/reducers/app.tsx +10 -0
  4. package/src/__mocks__/reducers/sites.tsx +10 -0
  5. package/src/__tests__/{AnalyticsField.test.tsx → components/Fields/AnalyticsField/AnalyticsField.test.tsx} +5 -5
  6. package/src/__tests__/{PageAnalytics.test.tsx → components/Fields/AnalyticsField/PageAnalytics/PageAnalytics.test.tsx} +2 -2
  7. package/src/__tests__/{StructuredDataAnalytics.test.tsx → components/Fields/AnalyticsField/StructuredDataAnalytics/StructuredDataAnalytics.test.tsx} +2 -2
  8. package/src/__tests__/{ArrayFieldGroup.test.tsx → components/Fields/ArrayFieldGroup/ArrayFieldGroup.test.tsx} +2 -2
  9. package/src/__tests__/{AsyncCheckGroup.test.tsx → components/Fields/AsyncCheckGroup/AsyncCheckGroup.test.tsx} +2 -2
  10. package/src/__tests__/{AsyncSelect.test.tsx → components/Fields/AsyncSelect/AsyncSelect.test.tsx} +2 -2
  11. package/src/__tests__/{CheckField.test.tsx → components/Fields/CheckField/CheckField.test.tsx} +2 -2
  12. package/src/__tests__/{CheckGroup.test.tsx → components/Fields/CheckGroup/CheckGroup.test.tsx} +2 -2
  13. package/src/__tests__/components/Fields/ColorPicker/ColorPicker.test.tsx +195 -0
  14. package/src/__tests__/components/Fields/ComponentArray/ComponentArray.test.tsx +184 -0
  15. package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/MixableComponentArray.test.tsx +315 -0
  16. package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/PasteModuleButton.test.tsx +95 -0
  17. package/src/__tests__/components/Fields/ComponentArray/SameComponentArray/SameComponentArray.test.tsx +225 -0
  18. package/src/__tests__/{FieldGroup.test.tsx → components/Fields/FieldGroup/FieldGroup.test.tsx} +2 -2
  19. package/src/__tests__/components/Fields/FieldsDivider/FieldsDivider.test.tsx +24 -0
  20. package/src/__tests__/components/Fields/FileField/FileField.test.tsx +135 -0
  21. package/src/__tests__/{HeadingField.test.tsx → components/Fields/HeadingField/HeadingField.test.tsx} +2 -2
  22. package/src/__tests__/components/Fields/HiddenField/HiddenField.test.tsx +76 -0
  23. package/src/__tests__/components/Fields/MultiCheckSelect/MultiCheckSelect.test.tsx +70 -0
  24. package/src/__tests__/components/Fields/NoteField/NoteField.test.tsx +67 -0
  25. package/src/__tests__/components/Fields/NumberField/NumberField.test.tsx +109 -0
  26. package/src/__tests__/components/Fields/RadioField/RadioField.test.tsx +106 -0
  27. package/src/__tests__/components/Fields/RichText/RichText.test.tsx +52 -0
  28. package/src/__tests__/components/Fields/Select/Select.test.tsx +75 -0
  29. package/src/__tests__/components/Fields/SliderField/SliderField.test.tsx +82 -0
  30. package/src/__tests__/{TagField.test.tsx → components/Fields/TagField/TagField.test.tsx} +2 -2
  31. package/src/__tests__/{TextArea.test.tsx → components/Fields/TextArea/TextArea.test.tsx} +2 -2
  32. package/src/__tests__/{TextField.test.tsx → components/Fields/TextField/TextField.test.tsx} +2 -2
  33. package/src/__tests__/components/Fields/ToggleField/ToggleField.test.tsx +100 -0
  34. package/src/__tests__/{UniqueCheck.test.tsx → components/Fields/UniqueCheck/UniqueCheck.test.tsx} +2 -2
  35. package/src/__tests__/components/Fields/UrlField/UrlField.test.tsx +446 -0
  36. package/src/__tests__/components/Fields/UrlField/mockedAxios.ts +2214 -0
  37. package/src/__tests__/components/Fields/VisualUniqueSelection/ImageSelection/ImageSelection.test.tsx +99 -0
  38. package/src/__tests__/components/Fields/VisualUniqueSelection/ScrollableSelection/ScrollableSelection.test.tsx +176 -0
  39. package/src/__tests__/components/Fields/VisualUniqueSelection/VisualUniqueSelection.test.tsx +78 -0
  40. package/src/components/ActionMenu/index.tsx +1 -0
  41. package/src/components/Browser/index.tsx +39 -47
  42. package/src/components/Browser/style.tsx +15 -15
  43. package/src/components/BrowserContent/index.tsx +78 -0
  44. package/src/components/ConfigPanel/Form/ConnectedField/NavConnectedField/index.tsx +3 -5
  45. package/src/components/ConfigPanel/Form/ConnectedField/PageConnectedField/index.tsx +2 -6
  46. package/src/components/ConfigPanel/Header/index.tsx +28 -11
  47. package/src/components/ConfigPanel/index.tsx +2 -2
  48. package/src/components/ErrorCenter/index.tsx +11 -4
  49. package/src/components/Fields/ArrayFieldGroup/index.tsx +4 -2
  50. package/src/components/Fields/ArrayFieldGroup/style.tsx +7 -0
  51. package/src/components/Fields/AsyncCheckGroup/index.tsx +1 -1
  52. package/src/components/Fields/CheckField/index.tsx +1 -1
  53. package/src/components/Fields/ColorPicker/Picker/index.tsx +9 -3
  54. package/src/components/Fields/ColorPicker/index.tsx +4 -9
  55. package/src/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/index.tsx +2 -1
  56. package/src/components/Fields/ComponentArray/MixableComponentArray/index.tsx +27 -22
  57. package/src/components/Fields/ComponentArray/MixableComponentArray/style.tsx +3 -38
  58. package/src/components/Fields/ComponentArray/SameComponentArray/index.tsx +3 -2
  59. package/src/components/Fields/ComponentArray/SameComponentArray/style.tsx +1 -28
  60. package/src/components/Fields/ComponentArray/helpers.tsx +1 -1
  61. package/src/components/Fields/ComponentContainer/index.tsx +3 -1
  62. package/src/components/Fields/FileField/FileDragAndDrop/index.tsx +1 -1
  63. package/src/components/Fields/FileField/FileDragAndDrop/style.tsx +2 -3
  64. package/src/components/Fields/FileField/index.tsx +6 -6
  65. package/src/components/Fields/HiddenField/index.tsx +3 -3
  66. package/src/components/Fields/MultiCheckSelect/index.tsx +8 -27
  67. package/src/components/Fields/NoteField/index.tsx +3 -3
  68. package/src/components/Fields/NumberField/index.tsx +6 -3
  69. package/src/components/Fields/RadioField/index.tsx +10 -2
  70. package/src/components/Fields/ReferenceField/index.tsx +8 -1
  71. package/src/components/Fields/ReferenceField/style.tsx +5 -0
  72. package/src/components/Fields/RichText/index.tsx +1 -1
  73. package/src/components/Fields/SliderField/index.tsx +11 -7
  74. package/src/components/Fields/ToggleField/index.tsx +12 -3
  75. package/src/components/Fields/UrlField/PageFinder/SelectionListItem/index.tsx +1 -1
  76. package/src/components/Fields/UrlField/index.tsx +6 -4
  77. package/src/components/Fields/UrlField/style.tsx +4 -2
  78. package/src/components/Fields/VisualOption/index.tsx +10 -2
  79. package/src/components/Fields/VisualUniqueSelection/ImageSelection/index.tsx +2 -2
  80. package/src/components/Fields/VisualUniqueSelection/ScrollableSelection/index.tsx +4 -3
  81. package/src/components/Fields/VisualUniqueSelection/ScrollableSelection/style.tsx +1 -1
  82. package/src/components/Fields/VisualUniqueSelection/index.tsx +3 -3
  83. package/src/components/FieldsBehavior/index.tsx +4 -4
  84. package/src/components/FieldsBehavior/style.tsx +5 -12
  85. package/src/components/FloatingMenu/index.tsx +8 -4
  86. package/src/components/Loader/index.tsx +12 -8
  87. package/src/components/MainWrapper/AppBar/index.tsx +1 -0
  88. package/src/components/MainWrapper/index.tsx +1 -0
  89. package/src/components/Toast/index.tsx +1 -1
  90. package/src/components/Tooltip/index.tsx +1 -1
  91. package/src/components/index.tsx +2 -0
  92. package/src/containers/App/actions.tsx +3 -7
  93. package/src/containers/PageEditor/actions.tsx +36 -5
  94. package/src/forms/editor.tsx +35 -1
  95. package/src/forms/fields.tsx +6 -2
  96. package/src/forms/index.tsx +2 -0
  97. package/src/forms/validators.tsx +29 -8
  98. package/src/guards/error/index.tsx +1 -1
  99. package/src/helpers/containerEvaluations.tsx +32 -4
  100. package/src/helpers/index.tsx +2 -0
  101. package/src/helpers/structuredData.tsx +2 -2
  102. package/src/hooks/forms.tsx +1 -28
  103. package/src/hooks/index.tsx +1 -2
  104. package/src/modules/FramePreview/index.tsx +70 -36
  105. package/src/modules/FramePreview/style.tsx +3 -0
  106. package/src/modules/GlobalEditor/PageBrowser/index.tsx +2 -7
  107. package/src/modules/GlobalEditor/index.tsx +8 -6
  108. package/src/modules/GlobalEditor/style.tsx +1 -1
  109. package/src/modules/Navigation/Defaults/DefaultsEditor/Editor/DefaultsBrowser/index.tsx +0 -4
  110. package/src/modules/Navigation/Defaults/DefaultsEditor/index.tsx +3 -2
  111. package/src/modules/PageEditor/PageBrowser/index.tsx +1 -4
  112. package/src/modules/PageEditor/index.tsx +6 -6
  113. package/src/modules/PublicPreview/index.tsx +17 -34
  114. package/src/modules/PublicPreview/style.tsx +0 -2
  115. package/src/modules/Settings/ContentTypes/DataPacks/Config/Form/TemplateConfig/TemplateEditor/Editor/TemplateBrowser/index.tsx +0 -4
  116. package/src/modules/Sites/index.tsx +1 -1
  117. package/src/modules/StructuredData/Form/ConnectedField/index.tsx +1 -1
  118. package/src/modules/StructuredData/Form/index.tsx +3 -1
  119. package/src/modules/StructuredData/StructuredDataList/index.tsx +1 -0
  120. package/src/schemas/pages/GlobalPage.tsx +1 -0
  121. package/src/types/index.tsx +1 -0
@@ -0,0 +1,446 @@
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 { createStore, combineReducers, Reducer, Action } from "redux";
8
+
9
+ import UrlField, { IUrlFieldProps } from "@ax/components/Fields/UrlField/index";
10
+ 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
+
16
+ afterEach(() => {
17
+ cleanup();
18
+ jest.resetAllMocks();
19
+ });
20
+
21
+ const defaultProps = mock<IUrlFieldProps>();
22
+
23
+ const globalLang = {
24
+ id: 19,
25
+ locale: "en",
26
+ language: "English",
27
+ label: "EN",
28
+ isDefault: true,
29
+ };
30
+
31
+ const defaultSite = {
32
+ id: 80,
33
+ name: "DEMO SITE",
34
+ theme: "default-theme",
35
+ author: 2,
36
+ pages: [3654, 3729, 3997, 4014, 4074],
37
+ published: "2021-11-03T10:10:17.000Z",
38
+ modified: "2022-05-23T11:49:42.000Z",
39
+ languageSites: [144],
40
+ deleted: 0,
41
+ thumbnail: "http://images.dev.griddo.io/macbeth-palau-de-les-arts-opera-valencia-5x2-1_1",
42
+ timezone: "Pacific/Pago_Pago",
43
+ favicon: "http://images.dev.griddo.io/griddo-site-thumbnail-ec2ab0ba-9424-4424-8f60-222ec746902d_4",
44
+ hash: null,
45
+ bigAvatar: "http://images.dev.griddo.io/griddo-site-thumbnail-ec2ab0ba-9424-4424-8f60-222ec746902d_6",
46
+ smallAvatar: "http://images.dev.griddo.io/griddo-site-thumbnail-ec2ab0ba-9424-4424-8f60-222ec746902d_5",
47
+ rendering: false,
48
+ slug: "/demo-site",
49
+ isPublished: true,
50
+ renderingHours: 0,
51
+ shouldBeUpdated: false,
52
+ updated: true,
53
+ navigationModules: null,
54
+ home: "//cx.dev.griddo.io/pre-griddo/demo",
55
+ };
56
+
57
+ const sitesMock = {
58
+ currentSiteInfo: null,
59
+ sites: [defaultSite],
60
+ currentSiteName: null,
61
+ currentSitePages: [],
62
+ sitesByLang: [],
63
+ currentFilter: "unique-pages",
64
+ totalItems: 0,
65
+ currentSiteLanguages: [],
66
+ savedSiteInfo: null,
67
+ currentSiteErrorPages: [],
68
+ };
69
+
70
+ const appMock = {
71
+ isRehydrated: true,
72
+ isLoading: true,
73
+ isSaving: false,
74
+ error: {
75
+ code: undefined,
76
+ text: "",
77
+ },
78
+ user: {
79
+ email: "",
80
+ },
81
+ token: "",
82
+ isLoggingIn: false,
83
+ lang: {
84
+ locale: "en-GB",
85
+ id: 4,
86
+ },
87
+ globalLangs: [globalLang],
88
+ globalSettings: {
89
+ cloudinaryName: "",
90
+ globalLogoBig: "",
91
+ globalLogoMini: "",
92
+ siteLogoBig: "",
93
+ siteLogoMini: "",
94
+ welcomeText1: "",
95
+ welcomeText2: "",
96
+ },
97
+ };
98
+
99
+ const initialStore = {
100
+ sites: sitesMock,
101
+ app: appMock,
102
+ };
103
+
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
+ );
111
+
112
+ jest.mock("axios");
113
+ const mockedAxios = axios as jest.MockedFunction<typeof axios>;
114
+ const mockApiCalls = () =>
115
+ mockedAxios.mockImplementation((request: any) => {
116
+ switch (request.url) {
117
+ case "undefined/page/4111":
118
+ return Promise.resolve(pageResponse);
119
+ case "undefined/site/80/structured_data":
120
+ return Promise.resolve(structuredDataResponse);
121
+ case "undefined/site/80/pages?deleted=false&page=1&itemsPerPage=50&filterStructuredData=all":
122
+ return Promise.resolve(sitePagesResponse);
123
+ default:
124
+ return Promise.reject(new Error("not found"));
125
+ }
126
+ });
127
+
128
+ describe("UrlField component rendering", () => {
129
+ test("should render the component UrlField", async () => {
130
+ const initialState = { ...initialStore, ...defaultProps };
131
+
132
+ pageResponse.data.follow = false;
133
+
134
+ mockApiCalls();
135
+
136
+ await act(async () => {
137
+ render(
138
+ <ThemeProvider theme={parseTheme(globalTheme)}>
139
+ <UrlField {...initialState} />
140
+ </ThemeProvider>,
141
+ { store }
142
+ );
143
+ });
144
+
145
+ expect(screen.getByTestId("url-field-wrapper")).toBeTruthy();
146
+ });
147
+
148
+ test("should render the component UrlField with API response fail", async () => {
149
+ defaultProps.value = {
150
+ href: null,
151
+ linkTo: 4111,
152
+ linkToURL: "//cx.dev.griddo.io/pre-griddo/gonzalo-h/new-page/",
153
+ title: "New Page",
154
+ anchor: "mega-anchor",
155
+ };
156
+ const initialState = { ...initialStore, ...defaultProps };
157
+
158
+ const responseFail = {
159
+ data: null,
160
+ status: 400,
161
+ statusText: "Fail",
162
+ headers: {},
163
+ config: {},
164
+ };
165
+
166
+ mockedAxios.mockImplementation((request: any) => {
167
+ switch (request.url) {
168
+ case "undefined/page/4111":
169
+ return Promise.resolve(responseFail);
170
+ case "undefined/site/80/structured_data":
171
+ return Promise.resolve(structuredDataResponse);
172
+ case "undefined/site/80/pages?deleted=false&page=1&itemsPerPage=50&filterStructuredData=all":
173
+ return Promise.resolve(responseFail);
174
+ default:
175
+ return Promise.reject(new Error("not found"));
176
+ }
177
+ });
178
+
179
+ await act(async () => {
180
+ render(
181
+ <ThemeProvider theme={parseTheme(globalTheme)}>
182
+ <UrlField {...initialState} />
183
+ </ThemeProvider>,
184
+ { store }
185
+ );
186
+ });
187
+
188
+ expect(screen.getByTestId("url-field-wrapper")).toBeTruthy();
189
+ });
190
+
191
+ test("should render the component UrlField with API response Ok", async () => {
192
+ defaultProps.value = {
193
+ href: null,
194
+ linkTo: 4111,
195
+ linkToURL: "//cx.dev.griddo.io/pre-griddo/gonzalo-h/new-page/",
196
+ anchor: "mega-anchor",
197
+ };
198
+ const onChange = jest.fn();
199
+
200
+ const initialState = { ...initialStore, ...defaultProps };
201
+
202
+ const handlePanel = jest.fn();
203
+
204
+ mockApiCalls();
205
+
206
+ const Component = (
207
+ <ThemeProvider theme={parseTheme(globalTheme)}>
208
+ <UrlField {...initialState} handlePanel={handlePanel} showAdvanced onChange={onChange} />
209
+ </ThemeProvider>
210
+ );
211
+
212
+ await act(async () => {
213
+ render(Component, { store });
214
+ });
215
+
216
+ expect(screen.getByText("mega-anchor")).toBeTruthy();
217
+ });
218
+
219
+ test("should render the select with tabs", async () => {
220
+ defaultProps.value = {
221
+ href: null,
222
+ linkTo: 4111,
223
+ linkToURL: "//cx.dev.griddo.io/pre-griddo/gonzalo-h/new-page/",
224
+ };
225
+ const onChange = jest.fn();
226
+ const handlePanel = jest.fn();
227
+
228
+ const initialState = { ...initialStore, ...defaultProps };
229
+
230
+ mockedAxios.mockImplementation((request: any) => {
231
+ switch (request.url) {
232
+ case "undefined/page/4111":
233
+ return Promise.resolve(pageResponseWithTabs);
234
+ case "undefined/site/80/structured_data":
235
+ return Promise.resolve(structuredDataResponse);
236
+ case "undefined/site/80/pages?deleted=false&page=1&itemsPerPage=50&filterStructuredData=all":
237
+ return Promise.resolve(sitePagesResponse);
238
+ default:
239
+ return Promise.reject(new Error("not found"));
240
+ }
241
+ });
242
+
243
+ const Component = (
244
+ <ThemeProvider theme={parseTheme(globalTheme)}>
245
+ <UrlField {...initialState} handlePanel={handlePanel} showAdvanced onChange={onChange} />
246
+ </ThemeProvider>
247
+ );
248
+
249
+ await act(async () => {
250
+ render(Component, { store });
251
+ });
252
+
253
+ expect(screen.getAllByTestId("selectComponent")).toBeTruthy();
254
+ });
255
+
256
+ test("should render the select with tabs and subSlug", async () => {
257
+ defaultProps.value = {
258
+ href: null,
259
+ linkTo: 4111,
260
+ linkToURL: "//cx.dev.griddo.io/pre-griddo/gonzalo-h/new-page/",
261
+ subSlug: "sub-slug",
262
+ anchor: "anchor",
263
+ };
264
+ const onChange = jest.fn();
265
+ const handlePanel = jest.fn();
266
+
267
+ const initialState = { ...initialStore, ...defaultProps };
268
+
269
+ mockedAxios.mockImplementation((request: any) => {
270
+ switch (request.url) {
271
+ case "undefined/page/4111":
272
+ return Promise.resolve(pageResponseWithTabs);
273
+ case "undefined/site/80/structured_data":
274
+ return Promise.resolve(structuredDataResponse);
275
+ case "undefined/site/80/pages?deleted=false&page=1&itemsPerPage=50&filterStructuredData=all":
276
+ return Promise.resolve(sitePagesResponse);
277
+ default:
278
+ return Promise.reject(new Error("not found"));
279
+ }
280
+ });
281
+
282
+ const Component = (
283
+ <ThemeProvider theme={parseTheme(globalTheme)}>
284
+ <UrlField {...initialState} handlePanel={handlePanel} showAdvanced onChange={onChange} />
285
+ </ThemeProvider>
286
+ );
287
+
288
+ await act(async () => {
289
+ render(Component, { store });
290
+ });
291
+
292
+ const selectComponents = screen.getAllByTestId("selectComponent");
293
+
294
+ await act(async () => {
295
+ selectComponents[3].click();
296
+ });
297
+
298
+ expect(selectComponents).toBeTruthy();
299
+ });
300
+ });
301
+
302
+ describe("onChange events", () => {
303
+ test("should render the component UrlField with default values", async () => {
304
+ defaultProps.value = null;
305
+ const initialState = { ...initialStore, ...defaultProps };
306
+
307
+ const onChange = jest.fn();
308
+
309
+ const responseFail = {
310
+ data: null,
311
+ status: 400,
312
+ statusText: "Fail",
313
+ headers: {},
314
+ config: {},
315
+ };
316
+
317
+ mockedAxios.mockImplementation((request: any) => {
318
+ switch (request.url) {
319
+ case "undefined/page/4111":
320
+ return Promise.resolve(responseFail);
321
+ case "undefined/site/80/structured_data":
322
+ return Promise.resolve(structuredDataResponse);
323
+ case "undefined/site/80/pages?deleted=false&page=1&itemsPerPage=50&filterStructuredData=all":
324
+ return Promise.resolve(responseFail);
325
+ default:
326
+ return Promise.reject(new Error("not found"));
327
+ }
328
+ });
329
+
330
+ await act(async () => {
331
+ render(
332
+ <ThemeProvider theme={parseTheme(globalTheme)}>
333
+ <UrlField {...initialState} showAdvanced onChange={onChange} />
334
+ </ThemeProvider>,
335
+ { store }
336
+ );
337
+ });
338
+
339
+ const inputComponents = screen.getAllByTestId("inputComponent");
340
+
341
+ await act(async () => {
342
+ fireEvent.change(inputComponents[0], { target: { value: "eooo" } });
343
+ fireEvent.change(inputComponents[1], { target: { value: "kaiso" } });
344
+ });
345
+
346
+ expect(screen.getAllByRole("textbox")[0]).toHaveValue("eooo");
347
+ expect(screen.getAllByRole("textbox")[1]).toHaveValue("kaiso");
348
+ });
349
+ });
350
+
351
+ describe("onClick events", () => {
352
+ test("should call handleValidation", async () => {
353
+ defaultProps.value = {
354
+ href: null,
355
+ linkTo: 4111,
356
+ linkToURL: "//cx.dev.griddo.io/pre-griddo/gonzalo-h/new-page/",
357
+ title: "New Page",
358
+ anchor: "mega-anchor",
359
+ };
360
+
361
+ const onChange = jest.fn();
362
+ const handleValidation = jest.fn();
363
+
364
+ const initialState = { ...initialStore, ...defaultProps };
365
+
366
+ const handlePanel = jest.fn();
367
+
368
+ mockApiCalls();
369
+
370
+ const Component = (
371
+ <ThemeProvider theme={parseTheme(globalTheme)}>
372
+ <UrlField
373
+ {...initialState}
374
+ handlePanel={handlePanel}
375
+ showAdvanced
376
+ onChange={onChange}
377
+ handleValidation={handleValidation}
378
+ />
379
+ </ThemeProvider>
380
+ );
381
+
382
+ await act(async () => {
383
+ render(Component, { store });
384
+ });
385
+
386
+ await act(async () => {
387
+ const selectionListItem = screen.getAllByTestId("selection-list-item");
388
+ selectionListItem[0].click();
389
+
390
+ const inputComponents = screen.getAllByTestId("inputComponent");
391
+ fireEvent.change(inputComponents[0], { value: "foo" });
392
+ });
393
+
394
+ expect(handleValidation).toBeCalledTimes(1);
395
+ });
396
+
397
+ test("should call handleValidation and onChange", async () => {
398
+ defaultProps.value = {
399
+ href: null,
400
+ linkTo: 4111,
401
+ linkToURL: "//cx.dev.griddo.io/pre-griddo/gonzalo-h/new-page/",
402
+ title: "New Page",
403
+ anchor: "mega-anchor",
404
+ };
405
+
406
+ const onChange = jest.fn();
407
+ const handleValidation = jest.fn();
408
+ const handlePanel = jest.fn();
409
+ const resetValidation = jest.fn();
410
+
411
+ const initialState = { ...initialStore, ...defaultProps };
412
+
413
+ mockApiCalls();
414
+
415
+ const Component = (
416
+ <ThemeProvider theme={parseTheme(globalTheme)}>
417
+ <UrlField
418
+ {...initialState}
419
+ handlePanel={handlePanel}
420
+ showAdvanced
421
+ onChange={onChange}
422
+ handleValidation={handleValidation}
423
+ resetValidation={resetValidation}
424
+ />
425
+ </ThemeProvider>
426
+ );
427
+
428
+ await act(async () => {
429
+ render(Component, { store });
430
+ });
431
+
432
+ const selectionListItem = screen.getAllByTestId("selection-list-item");
433
+ const checkFieldInputs = screen.getAllByTestId("checkFieldInput");
434
+ const pageField = screen.getByTestId("page-field");
435
+
436
+ await act(async () => {
437
+ selectionListItem[0].click();
438
+ fireEvent.click(checkFieldInputs[0]);
439
+ fireEvent.click(checkFieldInputs[1]);
440
+ fireEvent.click(pageField);
441
+ });
442
+
443
+ expect(handleValidation).toBeCalledTimes(1);
444
+ expect(onChange).toBeCalledTimes(4);
445
+ });
446
+ });