@griddo/ax 1.67.9 → 1.68.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.
- package/config/jest/componentsMock.js +1528 -27
- package/package.json +2 -2
- package/src/__mocks__/reducers/app.tsx +10 -0
- package/src/__mocks__/reducers/sites.tsx +10 -0
- package/src/__tests__/{AnalyticsField.test.tsx → components/Fields/AnalyticsField/AnalyticsField.test.tsx} +5 -5
- package/src/__tests__/{PageAnalytics.test.tsx → components/Fields/AnalyticsField/PageAnalytics/PageAnalytics.test.tsx} +2 -2
- package/src/__tests__/{StructuredDataAnalytics.test.tsx → components/Fields/AnalyticsField/StructuredDataAnalytics/StructuredDataAnalytics.test.tsx} +2 -2
- package/src/__tests__/{ArrayFieldGroup.test.tsx → components/Fields/ArrayFieldGroup/ArrayFieldGroup.test.tsx} +2 -2
- package/src/__tests__/{AsyncCheckGroup.test.tsx → components/Fields/AsyncCheckGroup/AsyncCheckGroup.test.tsx} +2 -2
- package/src/__tests__/{AsyncSelect.test.tsx → components/Fields/AsyncSelect/AsyncSelect.test.tsx} +2 -2
- package/src/__tests__/{CheckField.test.tsx → components/Fields/CheckField/CheckField.test.tsx} +2 -2
- package/src/__tests__/{CheckGroup.test.tsx → components/Fields/CheckGroup/CheckGroup.test.tsx} +2 -2
- package/src/__tests__/components/Fields/ColorPicker/ColorPicker.test.tsx +195 -0
- package/src/__tests__/components/Fields/ComponentArray/ComponentArray.test.tsx +184 -0
- package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/MixableComponentArray.test.tsx +315 -0
- package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/PasteModuleButton.test.tsx +95 -0
- package/src/__tests__/components/Fields/ComponentArray/SameComponentArray/SameComponentArray.test.tsx +225 -0
- package/src/__tests__/{FieldGroup.test.tsx → components/Fields/FieldGroup/FieldGroup.test.tsx} +2 -2
- package/src/__tests__/components/Fields/FieldsDivider/FieldsDivider.test.tsx +24 -0
- package/src/__tests__/components/Fields/FileField/FileField.test.tsx +135 -0
- package/src/__tests__/{HeadingField.test.tsx → components/Fields/HeadingField/HeadingField.test.tsx} +2 -2
- package/src/__tests__/components/Fields/HiddenField/HiddenField.test.tsx +76 -0
- package/src/__tests__/components/Fields/MultiCheckSelect/MultiCheckSelect.test.tsx +70 -0
- package/src/__tests__/components/Fields/NoteField/NoteField.test.tsx +67 -0
- package/src/__tests__/components/Fields/NumberField/NumberField.test.tsx +109 -0
- package/src/__tests__/components/Fields/RadioField/RadioField.test.tsx +106 -0
- package/src/__tests__/components/Fields/RichText/RichText.test.tsx +52 -0
- package/src/__tests__/components/Fields/Select/Select.test.tsx +75 -0
- package/src/__tests__/components/Fields/SliderField/SliderField.test.tsx +82 -0
- package/src/__tests__/{TagField.test.tsx → components/Fields/TagField/TagField.test.tsx} +2 -2
- package/src/__tests__/{TextArea.test.tsx → components/Fields/TextArea/TextArea.test.tsx} +2 -2
- package/src/__tests__/{TextField.test.tsx → components/Fields/TextField/TextField.test.tsx} +2 -2
- package/src/__tests__/components/Fields/ToggleField/ToggleField.test.tsx +100 -0
- package/src/__tests__/{UniqueCheck.test.tsx → components/Fields/UniqueCheck/UniqueCheck.test.tsx} +2 -2
- package/src/__tests__/components/Fields/UrlField/UrlField.test.tsx +446 -0
- package/src/__tests__/components/Fields/UrlField/mockedAxios.ts +2214 -0
- package/src/__tests__/components/Fields/VisualUniqueSelection/ImageSelection/ImageSelection.test.tsx +99 -0
- package/src/__tests__/components/Fields/VisualUniqueSelection/ScrollableSelection/ScrollableSelection.test.tsx +176 -0
- package/src/__tests__/components/Fields/VisualUniqueSelection/VisualUniqueSelection.test.tsx +78 -0
- package/src/components/ActionMenu/index.tsx +1 -0
- package/src/components/Browser/index.tsx +39 -47
- package/src/components/Browser/style.tsx +15 -15
- package/src/components/BrowserContent/index.tsx +78 -0
- package/src/components/ConfigPanel/Form/ConnectedField/NavConnectedField/index.tsx +3 -5
- package/src/components/ConfigPanel/Form/ConnectedField/PageConnectedField/index.tsx +2 -6
- package/src/components/ConfigPanel/Header/index.tsx +28 -11
- package/src/components/ConfigPanel/index.tsx +2 -2
- package/src/components/ErrorCenter/index.tsx +11 -4
- package/src/components/Fields/ArrayFieldGroup/index.tsx +4 -2
- package/src/components/Fields/ArrayFieldGroup/style.tsx +7 -0
- package/src/components/Fields/AsyncCheckGroup/index.tsx +1 -1
- package/src/components/Fields/CheckField/index.tsx +1 -1
- package/src/components/Fields/ColorPicker/Picker/index.tsx +9 -3
- package/src/components/Fields/ColorPicker/index.tsx +4 -9
- package/src/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/index.tsx +2 -1
- package/src/components/Fields/ComponentArray/MixableComponentArray/index.tsx +27 -22
- package/src/components/Fields/ComponentArray/MixableComponentArray/style.tsx +3 -38
- package/src/components/Fields/ComponentArray/SameComponentArray/index.tsx +3 -2
- package/src/components/Fields/ComponentArray/SameComponentArray/style.tsx +1 -28
- package/src/components/Fields/ComponentArray/helpers.tsx +1 -1
- package/src/components/Fields/ComponentContainer/index.tsx +3 -1
- package/src/components/Fields/FileField/FileDragAndDrop/index.tsx +1 -1
- package/src/components/Fields/FileField/FileDragAndDrop/style.tsx +2 -3
- package/src/components/Fields/FileField/index.tsx +6 -6
- package/src/components/Fields/HiddenField/index.tsx +3 -3
- package/src/components/Fields/MultiCheckSelect/index.tsx +8 -27
- package/src/components/Fields/NoteField/index.tsx +3 -3
- package/src/components/Fields/NumberField/index.tsx +6 -3
- package/src/components/Fields/RadioField/index.tsx +10 -2
- package/src/components/Fields/ReferenceField/index.tsx +8 -1
- package/src/components/Fields/ReferenceField/style.tsx +5 -0
- package/src/components/Fields/RichText/index.tsx +1 -1
- package/src/components/Fields/SliderField/index.tsx +11 -7
- package/src/components/Fields/ToggleField/index.tsx +12 -3
- package/src/components/Fields/UrlField/PageFinder/SelectionListItem/index.tsx +1 -1
- package/src/components/Fields/UrlField/index.tsx +6 -4
- package/src/components/Fields/UrlField/style.tsx +4 -2
- package/src/components/Fields/VisualOption/index.tsx +10 -2
- package/src/components/Fields/VisualUniqueSelection/ImageSelection/index.tsx +2 -2
- package/src/components/Fields/VisualUniqueSelection/ScrollableSelection/index.tsx +4 -3
- package/src/components/Fields/VisualUniqueSelection/ScrollableSelection/style.tsx +1 -1
- package/src/components/Fields/VisualUniqueSelection/index.tsx +3 -3
- package/src/components/FieldsBehavior/index.tsx +4 -4
- package/src/components/FieldsBehavior/style.tsx +5 -12
- package/src/components/FloatingMenu/index.tsx +8 -4
- package/src/components/Loader/index.tsx +12 -8
- package/src/components/MainWrapper/AppBar/index.tsx +1 -0
- package/src/components/MainWrapper/index.tsx +1 -0
- package/src/components/Modal/index.tsx +3 -2
- package/src/components/Modal/style.tsx +2 -1
- package/src/components/Toast/index.tsx +1 -1
- package/src/components/Tooltip/index.tsx +1 -1
- package/src/components/index.tsx +2 -0
- package/src/containers/App/actions.tsx +3 -7
- package/src/containers/PageEditor/actions.tsx +36 -5
- package/src/forms/editor.tsx +35 -1
- package/src/forms/fields.tsx +6 -2
- package/src/forms/index.tsx +2 -0
- package/src/forms/validators.tsx +29 -8
- package/src/guards/error/index.tsx +1 -1
- package/src/helpers/containerEvaluations.tsx +32 -4
- package/src/helpers/index.tsx +2 -0
- package/src/helpers/structuredData.tsx +2 -2
- package/src/hooks/forms.tsx +1 -28
- package/src/hooks/index.tsx +1 -2
- package/src/modules/Content/atoms.tsx +1 -0
- package/src/modules/FramePreview/index.tsx +70 -36
- package/src/modules/FramePreview/style.tsx +3 -0
- package/src/modules/GlobalEditor/PageBrowser/index.tsx +2 -7
- package/src/modules/GlobalEditor/index.tsx +8 -6
- package/src/modules/GlobalEditor/style.tsx +1 -1
- package/src/modules/Navigation/Defaults/DefaultsEditor/Editor/DefaultsBrowser/index.tsx +0 -4
- package/src/modules/Navigation/Defaults/DefaultsEditor/index.tsx +3 -2
- package/src/modules/PageEditor/PageBrowser/index.tsx +1 -4
- package/src/modules/PageEditor/index.tsx +6 -6
- package/src/modules/PublicPreview/index.tsx +17 -34
- package/src/modules/PublicPreview/style.tsx +0 -2
- package/src/modules/Settings/ContentTypes/DataPacks/Config/Form/TemplateConfig/TemplateEditor/Editor/TemplateBrowser/index.tsx +0 -4
- package/src/modules/Sites/index.tsx +1 -1
- package/src/modules/StructuredData/Form/ConnectedField/index.tsx +1 -1
- package/src/modules/StructuredData/Form/index.tsx +3 -1
- package/src/modules/StructuredData/StructuredDataList/index.tsx +1 -0
- package/src/schemas/pages/GlobalPage.tsx +1 -0
- package/src/types/index.tsx +1 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ThemeProvider } from "styled-components";
|
|
3
|
+
import { parseTheme } from "@griddo/core";
|
|
4
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
5
|
+
import { mock } from "jest-mock-extended";
|
|
6
|
+
import { render, screen, cleanup } from "@testing-library/react";
|
|
7
|
+
import FileField, { IFileFieldProps } from "@ax/components/Fields/FileField";
|
|
8
|
+
import { act } from "react-dom/test-utils";
|
|
9
|
+
|
|
10
|
+
afterEach(cleanup);
|
|
11
|
+
|
|
12
|
+
const defaultProps = mock<IFileFieldProps>();
|
|
13
|
+
|
|
14
|
+
describe("FileField component rendering", () => {
|
|
15
|
+
it("should render the component", () => {
|
|
16
|
+
defaultProps.value.url = "google.es";
|
|
17
|
+
|
|
18
|
+
render(
|
|
19
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
20
|
+
<FileField {...defaultProps} />
|
|
21
|
+
</ThemeProvider>
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
const fileDataWrapper = screen.getByTestId("file-data-wrapper");
|
|
25
|
+
|
|
26
|
+
expect(fileDataWrapper).toBeTruthy();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("should render the component when there is not value", () => {
|
|
30
|
+
defaultProps.value = undefined;
|
|
31
|
+
|
|
32
|
+
render(
|
|
33
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
34
|
+
<FileField {...defaultProps} />
|
|
35
|
+
</ThemeProvider>
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const fileDataWrapper = screen.getByTestId("file-data-wrapper");
|
|
39
|
+
|
|
40
|
+
expect(fileDataWrapper).toBeTruthy();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
describe("onClick events", () => {
|
|
45
|
+
it("should open FileDragAndDrop when clicking the file button", () => {
|
|
46
|
+
const Component = (
|
|
47
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
48
|
+
<FileField {...defaultProps} />
|
|
49
|
+
</ThemeProvider>
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const { rerender } = render(Component);
|
|
53
|
+
|
|
54
|
+
const fileButton = screen.getByTestId("field-icon-wrapper");
|
|
55
|
+
act(() => fileButton.click());
|
|
56
|
+
|
|
57
|
+
rerender(Component);
|
|
58
|
+
|
|
59
|
+
const fileDragAndDropWrapper = screen.queryByTestId("file-drag-and-drop-wrapper");
|
|
60
|
+
expect(fileDragAndDropWrapper).toBeTruthy();
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("should not open FileDragAndDrop when clicking the file button", () => {
|
|
64
|
+
const Component = (
|
|
65
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
66
|
+
<FileField {...defaultProps} disabled />
|
|
67
|
+
</ThemeProvider>
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
const { rerender } = render(Component);
|
|
71
|
+
|
|
72
|
+
const fileButton = screen.getByTestId("field-icon-wrapper");
|
|
73
|
+
act(() => fileButton.click());
|
|
74
|
+
|
|
75
|
+
rerender(Component);
|
|
76
|
+
|
|
77
|
+
const fileDragAndDropWrapper = screen.queryByTestId("file-drag-and-drop-wrapper");
|
|
78
|
+
expect(fileDragAndDropWrapper).toBeFalsy();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("should call handleOnClickUrl when clicking the url button", () => {
|
|
82
|
+
defaultProps.value = { url: "google.es", uploadDate: "1/1/2022", sizeBytes: "123" };
|
|
83
|
+
|
|
84
|
+
const Component = (
|
|
85
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
86
|
+
<FileField {...defaultProps} />
|
|
87
|
+
</ThemeProvider>
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
const windowOpen = window.open;
|
|
91
|
+
(window as any).open = () => ({ focus: () => null });
|
|
92
|
+
|
|
93
|
+
const { rerender } = render(Component);
|
|
94
|
+
|
|
95
|
+
const spyWindowOpen = jest.spyOn(window, "open");
|
|
96
|
+
|
|
97
|
+
const urlButton = screen.getAllByTestId("iconActionComponent");
|
|
98
|
+
act(() => urlButton[0].click());
|
|
99
|
+
|
|
100
|
+
expect(spyWindowOpen).toBeCalled();
|
|
101
|
+
|
|
102
|
+
(window as any).open = () => null;
|
|
103
|
+
rerender(Component);
|
|
104
|
+
|
|
105
|
+
act(() => urlButton[0].click());
|
|
106
|
+
|
|
107
|
+
expect(spyWindowOpen).toBeCalled();
|
|
108
|
+
|
|
109
|
+
window.open = windowOpen;
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it("should call onChange when clicking the delete action", () => {
|
|
113
|
+
defaultProps.value = { url: "google.es", uploadDate: "1/1/2022", sizeBytes: "123" };
|
|
114
|
+
const onChange = jest.fn();
|
|
115
|
+
|
|
116
|
+
const Component = (
|
|
117
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
118
|
+
<FileField {...defaultProps} onChange={onChange} />
|
|
119
|
+
</ThemeProvider>
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
const { rerender } = render(Component);
|
|
123
|
+
|
|
124
|
+
const floatingMenu = screen.getAllByTestId("iconActionComponent");
|
|
125
|
+
|
|
126
|
+
act(() => floatingMenu[1].click());
|
|
127
|
+
|
|
128
|
+
rerender(Component);
|
|
129
|
+
|
|
130
|
+
const actionMenuItem = screen.getAllByTestId("action-menu-item");
|
|
131
|
+
act(() => actionMenuItem[1].click());
|
|
132
|
+
|
|
133
|
+
expect(onChange).toBeCalledTimes(1);
|
|
134
|
+
});
|
|
135
|
+
});
|
package/src/__tests__/{HeadingField.test.tsx → components/Fields/HeadingField/HeadingField.test.tsx}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import HeadingField from "
|
|
2
|
+
import HeadingField from "@ax/components/Fields/HeadingField";
|
|
3
3
|
import { ThemeProvider } from "styled-components";
|
|
4
4
|
import { parseTheme } from "@griddo/core";
|
|
5
|
-
import globalTheme from "
|
|
5
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
6
6
|
import { render, screen, cleanup } from "@testing-library/react";
|
|
7
7
|
|
|
8
8
|
afterEach(cleanup);
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import HiddenField from "@ax/components/Fields/HiddenField";
|
|
3
|
+
import { ThemeProvider } from "styled-components";
|
|
4
|
+
import { parseTheme } from "@griddo/core";
|
|
5
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
6
|
+
import { mock } from "jest-mock-extended";
|
|
7
|
+
import { render, screen, cleanup, fireEvent } from "@testing-library/react";
|
|
8
|
+
|
|
9
|
+
afterEach(cleanup);
|
|
10
|
+
|
|
11
|
+
const defaultProps = mock<IHiddenFieldProps>();
|
|
12
|
+
|
|
13
|
+
describe("Component rendering", () => {
|
|
14
|
+
it("should render the component", () => {
|
|
15
|
+
defaultProps.hasMultipleOptions = true;
|
|
16
|
+
|
|
17
|
+
render(
|
|
18
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
19
|
+
<HiddenField {...defaultProps} />
|
|
20
|
+
</ThemeProvider>
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
expect(screen.getByTestId("field-multiple-options")).toBeTruthy();
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("should render the component when hasMultipleOptions is true", () => {
|
|
27
|
+
defaultProps.hasMultipleOptions = false;
|
|
28
|
+
|
|
29
|
+
render(
|
|
30
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
31
|
+
<HiddenField {...defaultProps} />
|
|
32
|
+
</ThemeProvider>
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
expect(screen.getByTestId("field-single-option")).toBeTruthy();
|
|
36
|
+
expect(screen.getByText("Show")).toBeTruthy();
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe("onClick events", () => {
|
|
41
|
+
it("should call showField with multiple options when clicking the component", () => {
|
|
42
|
+
defaultProps.hasMultipleOptions = true;
|
|
43
|
+
const showField = jest.fn();
|
|
44
|
+
|
|
45
|
+
render(
|
|
46
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
47
|
+
<HiddenField {...defaultProps} showField={showField} />
|
|
48
|
+
</ThemeProvider>
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
const wrapperMultipleOptions = screen.getByTestId("field-multiple-options");
|
|
52
|
+
fireEvent.click(wrapperMultipleOptions);
|
|
53
|
+
expect(showField).toHaveBeenCalledTimes(1);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("should call showField with single option when clicking the component", () => {
|
|
57
|
+
defaultProps.hasMultipleOptions = false;
|
|
58
|
+
const showField = jest.fn();
|
|
59
|
+
|
|
60
|
+
render(
|
|
61
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
62
|
+
<HiddenField {...defaultProps} showField={showField} />
|
|
63
|
+
</ThemeProvider>
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
const wrapperSingleOption = screen.getByTestId("field-single-option");
|
|
67
|
+
fireEvent.click(wrapperSingleOption);
|
|
68
|
+
expect(showField).toHaveBeenCalledTimes(1);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
interface IHiddenFieldProps {
|
|
73
|
+
title: string;
|
|
74
|
+
showField: any;
|
|
75
|
+
hasMultipleOptions?: boolean;
|
|
76
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ThemeProvider } from "styled-components";
|
|
3
|
+
import { parseTheme } from "@griddo/core";
|
|
4
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
5
|
+
import { mock } from "jest-mock-extended";
|
|
6
|
+
import { render, screen, cleanup, fireEvent } from "@testing-library/react";
|
|
7
|
+
import { ISite } from "@ax/types";
|
|
8
|
+
|
|
9
|
+
import MultiCheckSelect from "@ax/components/Fields/MultiCheckSelect";
|
|
10
|
+
|
|
11
|
+
afterEach(cleanup);
|
|
12
|
+
|
|
13
|
+
const defaultProps = mock<IMultiCheckSelectProps>();
|
|
14
|
+
|
|
15
|
+
describe("Component rendering", () => {
|
|
16
|
+
it("should render the component", () => {
|
|
17
|
+
render(
|
|
18
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
19
|
+
<MultiCheckSelect {...defaultProps} />
|
|
20
|
+
</ThemeProvider>
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
const multiCheckSelectContent = screen.getByTestId("multi-check-select-wrapper");
|
|
24
|
+
|
|
25
|
+
expect(multiCheckSelectContent).toBeTruthy();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
describe("onClick events", () => {
|
|
30
|
+
it("should show select when clicking", () => {
|
|
31
|
+
defaultProps.options = [
|
|
32
|
+
{
|
|
33
|
+
name: "all",
|
|
34
|
+
value: "all",
|
|
35
|
+
title: "Select All",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "dimensionTwo",
|
|
39
|
+
value: "dimensionTwo",
|
|
40
|
+
title: "dimensionTwo",
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
defaultProps.value = [];
|
|
44
|
+
defaultProps.selectAllOption = "all";
|
|
45
|
+
defaultProps.source = "TheSource";
|
|
46
|
+
|
|
47
|
+
render(
|
|
48
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
49
|
+
<MultiCheckSelect {...defaultProps} mandatory />
|
|
50
|
+
</ThemeProvider>
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const field = screen.getByTestId("field");
|
|
54
|
+
fireEvent.click(field);
|
|
55
|
+
expect(screen.getByText("dimensionTwo")).toBeTruthy();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
interface IMultiCheckSelectProps {
|
|
60
|
+
value: (string | number)[];
|
|
61
|
+
onChange: (value: string | (string | number)[]) => void;
|
|
62
|
+
site?: ISite | null;
|
|
63
|
+
placeholder: string;
|
|
64
|
+
source?: string;
|
|
65
|
+
className?: string;
|
|
66
|
+
mandatory?: boolean;
|
|
67
|
+
options?: { name: string; value: string; title: string }[];
|
|
68
|
+
selectAllOption?: string;
|
|
69
|
+
floating?: boolean;
|
|
70
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import NoteField from "@ax/components/Fields/NoteField";
|
|
3
|
+
import { ThemeProvider } from "styled-components";
|
|
4
|
+
import { parseTheme } from "@griddo/core";
|
|
5
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
6
|
+
import { render, screen, cleanup } from "@testing-library/react";
|
|
7
|
+
import { mock } from "jest-mock-extended";
|
|
8
|
+
|
|
9
|
+
afterEach(cleanup);
|
|
10
|
+
|
|
11
|
+
const defaultProps = mock<INoteFieldProps>();
|
|
12
|
+
defaultProps.value = { text: "This is the text" };
|
|
13
|
+
|
|
14
|
+
describe("NoteField component rendering", () => {
|
|
15
|
+
it("should render the component", () => {
|
|
16
|
+
render(
|
|
17
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
18
|
+
<NoteField {...defaultProps} />
|
|
19
|
+
</ThemeProvider>
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const noteFieldWrapper = screen.getByTestId("noteFieldWrapper");
|
|
23
|
+
|
|
24
|
+
expect(noteFieldWrapper).toBeTruthy();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("should render text value", () => {
|
|
28
|
+
render(
|
|
29
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
30
|
+
<NoteField {...defaultProps} />
|
|
31
|
+
</ThemeProvider>
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
expect(screen.getByText("This is the text"));
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("should not render title", () => {
|
|
38
|
+
render(
|
|
39
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
40
|
+
<NoteField {...defaultProps} />
|
|
41
|
+
</ThemeProvider>
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
const title = screen.queryByTestId("title");
|
|
45
|
+
|
|
46
|
+
expect(title).toBeNull();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("should render title", () => {
|
|
50
|
+
defaultProps.value.title = "Super title";
|
|
51
|
+
|
|
52
|
+
render(
|
|
53
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
54
|
+
<NoteField {...defaultProps} />
|
|
55
|
+
</ThemeProvider>
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
const title = screen.queryByTestId("title");
|
|
59
|
+
|
|
60
|
+
expect(title).toBeTruthy();
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
interface INoteFieldProps {
|
|
65
|
+
value: { title?: string; text: string | JSX.Element };
|
|
66
|
+
className?: string;
|
|
67
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import NumberField from "@ax/components/Fields/NumberField";
|
|
3
|
+
import { ThemeProvider } from "styled-components";
|
|
4
|
+
import { parseTheme } from "@griddo/core";
|
|
5
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
6
|
+
import { mock } from "jest-mock-extended";
|
|
7
|
+
import { render, screen, cleanup, fireEvent } from "@testing-library/react";
|
|
8
|
+
|
|
9
|
+
afterEach(cleanup);
|
|
10
|
+
|
|
11
|
+
const defaultProps = mock<INumberFieldProps>();
|
|
12
|
+
|
|
13
|
+
describe("NumberField component rendering", () => {
|
|
14
|
+
it("should render the component", () => {
|
|
15
|
+
render(
|
|
16
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
17
|
+
<NumberField {...defaultProps} />
|
|
18
|
+
</ThemeProvider>
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
const conditionalFieldContent = screen.getByTestId("conditional-field-wrapper");
|
|
22
|
+
|
|
23
|
+
expect(conditionalFieldContent).toBeTruthy();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
describe("onClick events", () => {
|
|
28
|
+
it("should call onChange when clicking arrow up", () => {
|
|
29
|
+
const onChange = jest.fn();
|
|
30
|
+
|
|
31
|
+
render(
|
|
32
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
33
|
+
<NumberField {...defaultProps} onChange={onChange} />
|
|
34
|
+
</ThemeProvider>
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const arrowUp = screen.getByTestId("arrow-up");
|
|
38
|
+
fireEvent.click(arrowUp);
|
|
39
|
+
expect(onChange).toHaveBeenCalledWith(1);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("should call onChange when clicking arrow down", () => {
|
|
43
|
+
defaultProps.value = 2;
|
|
44
|
+
defaultProps.minValue = 1;
|
|
45
|
+
const onChange = jest.fn();
|
|
46
|
+
|
|
47
|
+
render(
|
|
48
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
49
|
+
<NumberField {...defaultProps} onChange={onChange} />
|
|
50
|
+
</ThemeProvider>
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const arrowDown = screen.getByTestId("arrow-down");
|
|
54
|
+
fireEvent.click(arrowDown);
|
|
55
|
+
expect(onChange).toHaveBeenCalledWith(1);
|
|
56
|
+
fireEvent.click(arrowDown);
|
|
57
|
+
expect(onChange).toHaveBeenCalledWith(1);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
describe("onBlur events", () => {
|
|
62
|
+
it("should call handleValidation on blur", () => {
|
|
63
|
+
const handleValidation = jest.fn();
|
|
64
|
+
const onBlur = jest.fn();
|
|
65
|
+
|
|
66
|
+
render(
|
|
67
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
68
|
+
<NumberField {...defaultProps} handleValidation={handleValidation} onBlur={onBlur} />
|
|
69
|
+
</ThemeProvider>
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
const input = screen.getByTestId("input");
|
|
73
|
+
fireEvent.blur(input);
|
|
74
|
+
expect(handleValidation).toHaveBeenCalled();
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
describe("onChange events", () => {
|
|
79
|
+
it("should call onChange on change", () => {
|
|
80
|
+
defaultProps.maxValue = 7;
|
|
81
|
+
defaultProps.error = true;
|
|
82
|
+
const onChange = jest.fn();
|
|
83
|
+
const handleValidation = jest.fn();
|
|
84
|
+
|
|
85
|
+
render(
|
|
86
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
87
|
+
<NumberField {...defaultProps} onChange={onChange} handleValidation={handleValidation} />
|
|
88
|
+
</ThemeProvider>
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
const input = screen.getByTestId("input");
|
|
92
|
+
fireEvent.change(input, { target: { value: 5 } });
|
|
93
|
+
expect(onChange).toHaveBeenCalledWith(5);
|
|
94
|
+
expect(handleValidation).toHaveBeenCalled();
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
interface INumberFieldProps {
|
|
99
|
+
value?: number;
|
|
100
|
+
onChange: (value: number) => void;
|
|
101
|
+
name?: string;
|
|
102
|
+
error?: boolean;
|
|
103
|
+
minValue?: number;
|
|
104
|
+
maxValue?: number;
|
|
105
|
+
onClickIcon?: () => void;
|
|
106
|
+
onBlur?: (value: number) => void;
|
|
107
|
+
disabled?: boolean;
|
|
108
|
+
handleValidation?: (value: string, validators: Record<string, unknown>) => void;
|
|
109
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import RadioField from "@ax/components/Fields/RadioField";
|
|
3
|
+
import { ThemeProvider } from "styled-components";
|
|
4
|
+
import { parseTheme } from "@griddo/core";
|
|
5
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
6
|
+
import { render, screen, cleanup, fireEvent } from "@testing-library/react";
|
|
7
|
+
import { mock } from "jest-mock-extended";
|
|
8
|
+
|
|
9
|
+
afterEach(cleanup);
|
|
10
|
+
|
|
11
|
+
const defaultProps = mock<IRadioFieldProps>();
|
|
12
|
+
|
|
13
|
+
describe("RadioField component rendering", () => {
|
|
14
|
+
it("should render the component", () => {
|
|
15
|
+
render(
|
|
16
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
17
|
+
<RadioField {...defaultProps} />
|
|
18
|
+
</ThemeProvider>
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
const radioFieldContainer = screen.getByTestId("radio-field-wrapper");
|
|
22
|
+
|
|
23
|
+
expect(radioFieldContainer).toBeTruthy();
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("should render input as checked", () => {
|
|
27
|
+
defaultProps.checked = true;
|
|
28
|
+
|
|
29
|
+
render(
|
|
30
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
31
|
+
<RadioField {...defaultProps} />
|
|
32
|
+
</ThemeProvider>
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
const radioFieldInput = screen.getByTestId<HTMLInputElement>("radio-field-input");
|
|
36
|
+
expect(radioFieldInput.checked).toEqual(true);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("should render input as disabled", () => {
|
|
40
|
+
defaultProps.disabled = true;
|
|
41
|
+
|
|
42
|
+
render(
|
|
43
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
44
|
+
<RadioField {...defaultProps} />
|
|
45
|
+
</ThemeProvider>
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
const radioFieldInput = screen.getByTestId<HTMLInputElement>("radio-field-input");
|
|
49
|
+
expect(radioFieldInput.disabled).toEqual(true);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("should render input with name", () => {
|
|
53
|
+
defaultProps.name = "This is the name";
|
|
54
|
+
|
|
55
|
+
render(
|
|
56
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
57
|
+
<RadioField {...defaultProps} />
|
|
58
|
+
</ThemeProvider>
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
const radioFieldInput = screen.getByTestId<HTMLInputElement>("radio-field-input");
|
|
62
|
+
expect(radioFieldInput.name).toEqual("This is the name");
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
describe("onClick events", () => {
|
|
67
|
+
it("should not call onChange function", () => {
|
|
68
|
+
defaultProps.checked = false;
|
|
69
|
+
defaultProps.disabled = false;
|
|
70
|
+
|
|
71
|
+
render(
|
|
72
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
73
|
+
<RadioField {...defaultProps} onChange={undefined} />
|
|
74
|
+
</ThemeProvider>
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const radioFieldInput = screen.getByTestId("radio-field-input");
|
|
78
|
+
fireEvent.click(radioFieldInput);
|
|
79
|
+
expect(defaultProps.onChange).not.toHaveBeenCalled();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it("should call onChange function", () => {
|
|
83
|
+
defaultProps.checked = false;
|
|
84
|
+
defaultProps.onChange = jest.fn();
|
|
85
|
+
|
|
86
|
+
render(
|
|
87
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
88
|
+
<RadioField {...defaultProps} />
|
|
89
|
+
</ThemeProvider>
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
const radioFieldInput = screen.getByTestId("radio-field-input");
|
|
93
|
+
fireEvent.click(radioFieldInput);
|
|
94
|
+
expect(defaultProps.onChange).toHaveBeenCalledTimes(1);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
interface IRadioFieldProps {
|
|
99
|
+
name: string;
|
|
100
|
+
title: string;
|
|
101
|
+
value: string;
|
|
102
|
+
checked?: boolean;
|
|
103
|
+
error?: boolean;
|
|
104
|
+
disabled?: boolean;
|
|
105
|
+
onChange?: (value: string) => void;
|
|
106
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import RichText from "@ax/components/Fields/RichText";
|
|
3
|
+
import { ThemeProvider } from "styled-components";
|
|
4
|
+
import { parseTheme } from "@griddo/core";
|
|
5
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
6
|
+
import { mock } from "jest-mock-extended";
|
|
7
|
+
import { render, screen, cleanup } from "@testing-library/react";
|
|
8
|
+
|
|
9
|
+
afterEach(cleanup);
|
|
10
|
+
|
|
11
|
+
const defaultProps = mock<IRichTextProps>();
|
|
12
|
+
defaultProps.value = "This is the content";
|
|
13
|
+
|
|
14
|
+
describe("RichText component rendering", () => {
|
|
15
|
+
it("should render the component", () => {
|
|
16
|
+
render(
|
|
17
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
18
|
+
<RichText {...defaultProps} />
|
|
19
|
+
</ThemeProvider>
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const richTextContent = screen.getByTestId("rich-text-wrapper");
|
|
23
|
+
|
|
24
|
+
expect(richTextContent).toBeTruthy();
|
|
25
|
+
expect(screen.getAllByText("This is the content")).toBeTruthy();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it("should render the component with html set to true", () => {
|
|
29
|
+
defaultProps.html = true;
|
|
30
|
+
|
|
31
|
+
render(
|
|
32
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
33
|
+
<RichText {...defaultProps} />
|
|
34
|
+
</ThemeProvider>
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const richTextContent = screen.getByTestId("rich-text-wrapper");
|
|
38
|
+
|
|
39
|
+
expect(richTextContent).toBeTruthy();
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
interface IRichTextProps {
|
|
44
|
+
editorID: number;
|
|
45
|
+
value: string;
|
|
46
|
+
error?: boolean;
|
|
47
|
+
placeholder?: string;
|
|
48
|
+
disabled?: boolean;
|
|
49
|
+
onChange: (value: string) => void;
|
|
50
|
+
handleValidation?: (value: string) => void;
|
|
51
|
+
html: boolean;
|
|
52
|
+
}
|