@griddo/ax 1.71.0 → 1.72.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.
- package/package.json +2 -2
- package/src/Style/index.tsx +1 -1
- package/src/__tests__/components/ElementsTooltip/ElementsTooltip.test.tsx +1 -1
- package/src/__tests__/components/EmptyState/EmptyState.test.tsx +1 -1
- package/src/__tests__/components/ErrorToast/ErrorToast.test.tsx +56 -0
- package/src/__tests__/components/FieldContainer/FieldContainer.test.tsx +82 -0
- package/src/__tests__/components/Fields/AnalyticsField/AnalyticsField.test.tsx +1 -1
- package/src/__tests__/components/Fields/AnalyticsField/PageAnalytics/PageAnalytics.test.tsx +1 -1
- package/src/__tests__/components/Fields/AnalyticsField/StructuredDataAnalytics/StructuredDataAnalytics.test.tsx +1 -1
- package/src/__tests__/components/Fields/ArrayFieldGroup/ArrayFieldGroup.test.tsx +2 -2
- package/src/__tests__/components/Fields/AsyncCheckGroup/AsyncCheckGroup.test.tsx +3 -3
- package/src/__tests__/components/Fields/AsyncSelect/AsyncSelect.test.tsx +1 -1
- package/src/__tests__/components/Fields/CheckField/CheckField.test.tsx +6 -6
- package/src/__tests__/components/Fields/CheckGroup/CheckGroup.test.tsx +15 -15
- package/src/__tests__/components/Fields/ColorPicker/ColorPicker.test.tsx +6 -6
- package/src/__tests__/components/Fields/ComponentArray/ComponentArray.test.tsx +1 -1
- package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/MixableComponentArray.test.tsx +7 -7
- package/src/__tests__/components/Fields/ComponentArray/MixableComponentArray/PasteModuleButton/PasteModuleButton.test.tsx +9 -9
- package/src/__tests__/components/Fields/ComponentArray/SameComponentArray/SameComponentArray.test.tsx +5 -5
- package/src/__tests__/components/Fields/ComponentContainer/ComponentContainer.test.tsx +1 -1
- package/src/__tests__/components/Fields/ConditionalField/ConditionalField.test.tsx +1 -1
- package/src/__tests__/components/Fields/DateField/DateField.test.tsx +1 -1
- package/src/__tests__/components/Fields/FieldGroup/FieldGroup.test.tsx +1 -1
- package/src/__tests__/components/Fields/FieldsDivider/FieldsDivider.test.tsx +1 -1
- package/src/__tests__/components/Fields/FileField/FileField.test.tsx +3 -3
- package/src/__tests__/components/Fields/HeadingField/HeadingField.test.tsx +6 -6
- package/src/__tests__/components/Fields/HiddenField/HiddenField.test.tsx +1 -1
- package/src/__tests__/components/Fields/ImageField/ImageField.test.tsx +3 -3
- package/src/__tests__/components/Fields/MultiCheckSelect/MultiCheckSelect.test.tsx +1 -1
- package/src/__tests__/components/Fields/MultiCheckSelectGroup/MultiCheckSelectGroup.test.tsx +2 -2
- package/src/__tests__/components/Fields/NoteField/NoteField.test.tsx +1 -1
- package/src/__tests__/components/Fields/NumberField/NumberField.test.tsx +1 -1
- package/src/__tests__/components/Fields/RadioField/RadioField.test.tsx +1 -1
- package/src/__tests__/components/Fields/ReferenceField/ReferenceField.test.tsx +96 -8
- package/src/__tests__/components/Fields/RichText/RichText.test.tsx +1 -1
- package/src/__tests__/components/Fields/Select/Select.test.tsx +2 -2
- package/src/__tests__/components/Fields/SliderField/SliderField.test.tsx +1 -1
- package/src/__tests__/components/Fields/TagField/TagField.test.tsx +1 -1
- package/src/__tests__/components/Fields/TextArea/TextArea.test.tsx +1 -1
- package/src/__tests__/components/Fields/TextField/TextField.test.tsx +6 -6
- package/src/__tests__/components/Fields/TimeField/HourInput/HourInput.test.tsx +1 -1
- package/src/__tests__/components/Fields/TimeField/TimeField.test.tsx +1 -1
- package/src/__tests__/components/Fields/ToggleField/ToggleField.test.tsx +1 -1
- package/src/__tests__/components/Fields/Tooltip/Tooltip.test.tsx +3 -2
- package/src/__tests__/components/Fields/UniqueCheck/UniqueCheck.test.tsx +3 -3
- package/src/__tests__/components/Fields/UrlField/UrlField.test.tsx +4 -4
- package/src/__tests__/components/Fields/VisualUniqueSelection/ImageSelection/ImageSelection.test.tsx +1 -1
- package/src/__tests__/components/Fields/VisualUniqueSelection/ScrollableSelection/ScrollableSelection.test.tsx +3 -3
- package/src/__tests__/components/Fields/VisualUniqueSelection/VisualUniqueSelection.test.tsx +1 -1
- package/src/__tests__/components/Fields/Wysiwyg/Wysiwyg.test.tsx +1 -1
- package/src/__tests__/components/FieldsBehavior/FieldsBehavior.test.tsx +149 -0
- package/src/__tests__/components/Pagination/Pagination.test.tsx +243 -0
- package/src/__tests__/components/SubNav/SubNav.test.tsx +37 -0
- package/src/__tests__/components/TableCounter/TableCounter.test.tsx +51 -0
- package/src/__tests__/components/TableFilters/CategoryFilter/CategoryFilter.test.tsx +241 -0
- package/src/__tests__/components/TableFilters/CustomizeFilters/CustomizeFilters.test.tsx +131 -0
- package/src/__tests__/components/TableFilters/DateFilter/DateFilter.test.tsx +148 -0
- package/src/__tests__/components/TableFilters/LiveFilter/LiveFilter.test.tsx +266 -0
- package/src/__tests__/components/TableFilters/NameFilter/NameFilter.test.tsx +196 -0
- package/src/__tests__/components/TableFilters/SiteFilter/SiteFilter.test.tsx +318 -0
- package/src/__tests__/components/TableFilters/StatusFilter/StatusFilter.test.tsx +195 -0
- package/src/__tests__/components/TableFilters/TranslationsFilter/TranslationsFilter.test.tsx +157 -0
- package/src/__tests__/components/TableFilters/TypeFilter/TypeFilter.test.tsx +165 -0
- package/src/__tests__/components/TableList/TableList.test.tsx +2 -2
- package/src/__tests__/components/Tabs/Tabs.test.tsx +42 -36
- package/src/__tests__/components/Tag/Tag.test.tsx +4 -2
- package/src/__tests__/components/Toast/Toast.test.tsx +4 -2
- package/src/components/ErrorToast/index.tsx +2 -2
- package/src/components/FieldContainer/index.tsx +3 -3
- package/src/components/Fields/CheckField/index.tsx +3 -3
- package/src/components/Fields/CheckGroup/index.tsx +2 -2
- package/src/components/Fields/HeadingField/index.tsx +1 -1
- package/src/components/Fields/Select/index.tsx +1 -1
- package/src/components/Fields/TextField/index.tsx +2 -7
- package/src/components/FieldsBehavior/index.tsx +1 -1
- package/src/components/FloatingMenu/index.tsx +1 -1
- package/src/components/IconAction/index.tsx +1 -1
- package/src/components/Lists/index.tsx +1 -1
- package/src/components/Pagination/index.tsx +4 -4
- package/src/components/SubNav/index.tsx +3 -3
- package/src/components/SubNav/style.tsx +1 -3
- package/src/components/TableCounter/index.tsx +7 -2
- package/src/components/TableFilters/CategoryFilter/index.tsx +2 -2
- package/src/components/TableFilters/CategoryFilter/style.tsx +1 -10
- package/src/components/TableFilters/CustomizeFilters/index.tsx +2 -3
- package/src/components/TableFilters/DateFilter/index.tsx +4 -4
- package/src/components/TableFilters/LiveFilter/index.tsx +1 -1
- package/src/components/TableFilters/LiveFilter/style.tsx +2 -10
- package/src/components/TableFilters/NameFilter/index.tsx +4 -4
- package/src/components/TableFilters/SiteFilter/index.tsx +16 -13
- package/src/components/TableFilters/SiteFilter/style.tsx +1 -10
- package/src/components/TableFilters/StatusFilter/index.tsx +3 -3
- package/src/components/TableFilters/TranslationsFilter/index.tsx +4 -7
- package/src/components/TableFilters/TranslationsFilter/style.tsx +1 -10
- package/src/components/TableFilters/TypeFilter/index.tsx +2 -2
- package/src/components/TableFilters/TypeFilter/style.tsx +1 -10
- package/src/components/Tooltip/index.tsx +1 -1
- package/src/helpers/index.tsx +3 -0
- package/src/helpers/parseTheme.js +456 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
import axios from "axios";
|
|
4
|
+
import { ThemeProvider } from "styled-components";
|
|
5
|
+
import { CalledWithMock, mock } from "jest-mock-extended";
|
|
6
|
+
|
|
7
|
+
import { render, screen, cleanup, fireEvent, act } from "@testing-library/react";
|
|
8
|
+
import { parseTheme } from "@ax/helpers";
|
|
9
|
+
import CategoryFilter, { ICategoryFilterProps } from "@ax/components/TableFilters/CategoryFilter";
|
|
10
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
11
|
+
|
|
12
|
+
afterEach(cleanup);
|
|
13
|
+
|
|
14
|
+
jest.mock("axios");
|
|
15
|
+
const mockedAxios = axios as jest.MockedFunction<typeof axios>;
|
|
16
|
+
|
|
17
|
+
const defaultProps = mock<ICategoryFilterProps>();
|
|
18
|
+
|
|
19
|
+
describe("Category filter component rendering", () => {
|
|
20
|
+
it("should render category filter", async () => {
|
|
21
|
+
const filterItemsMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
22
|
+
defaultProps.filterItems = filterItemsMock;
|
|
23
|
+
defaultProps.value = "all";
|
|
24
|
+
defaultProps.structuredData = {
|
|
25
|
+
from: "profile",
|
|
26
|
+
indexable: true,
|
|
27
|
+
key: "profile",
|
|
28
|
+
showList: true,
|
|
29
|
+
source: "STORY_PROFILE",
|
|
30
|
+
title: "Profile",
|
|
31
|
+
type: "AsyncCheckGroup",
|
|
32
|
+
};
|
|
33
|
+
const data = {
|
|
34
|
+
data: [
|
|
35
|
+
{ name: 1, title: "Mentor", value: 1 },
|
|
36
|
+
{ name: 2, title: "Professor", value: 2 },
|
|
37
|
+
{ name: 3, title: "Student", value: 3 },
|
|
38
|
+
],
|
|
39
|
+
status: 200,
|
|
40
|
+
statusText: "Ok",
|
|
41
|
+
headers: {},
|
|
42
|
+
config: {},
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
mockedAxios.mockResolvedValue(data);
|
|
46
|
+
|
|
47
|
+
await act(async () => {
|
|
48
|
+
render(
|
|
49
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
50
|
+
<CategoryFilter {...defaultProps} />
|
|
51
|
+
</ThemeProvider>
|
|
52
|
+
);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const categoryFilter = screen.getByTestId("floating-menu");
|
|
56
|
+
expect(categoryFilter).toBeTruthy();
|
|
57
|
+
expect(categoryFilter.textContent).toEqual("Profile");
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("should render the component with no options", async () => {
|
|
61
|
+
const filterItemsMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
62
|
+
defaultProps.filterItems = filterItemsMock;
|
|
63
|
+
defaultProps.value = "all";
|
|
64
|
+
defaultProps.structuredData = {
|
|
65
|
+
from: "profile",
|
|
66
|
+
indexable: true,
|
|
67
|
+
key: "profile",
|
|
68
|
+
showList: true,
|
|
69
|
+
source: "STORY_PROFILE",
|
|
70
|
+
title: "Profile",
|
|
71
|
+
type: "AsyncCheckGroup",
|
|
72
|
+
};
|
|
73
|
+
const data = {
|
|
74
|
+
data: [],
|
|
75
|
+
status: 500,
|
|
76
|
+
statusText: "Internal Server Error",
|
|
77
|
+
headers: {},
|
|
78
|
+
config: {},
|
|
79
|
+
};
|
|
80
|
+
mockedAxios.mockResolvedValue(data);
|
|
81
|
+
|
|
82
|
+
await act(async () => {
|
|
83
|
+
render(
|
|
84
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
85
|
+
<CategoryFilter {...defaultProps} />
|
|
86
|
+
</ThemeProvider>
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
const categoryFilterButton = screen.getByTestId("floating-menu-button");
|
|
91
|
+
expect(categoryFilterButton).toBeTruthy();
|
|
92
|
+
fireEvent.click(categoryFilterButton);
|
|
93
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
94
|
+
expect(floatingMenu).toBeTruthy();
|
|
95
|
+
const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
|
|
96
|
+
expect(checkGroupFieldGroup).toBeTruthy();
|
|
97
|
+
const checkFieldInputs = screen.getAllByTestId<HTMLInputElement>("check-field-input");
|
|
98
|
+
expect(checkFieldInputs).toHaveLength(1);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
describe("CategoryFilter events", () => {
|
|
103
|
+
it("should render check group on click floating menu button", async () => {
|
|
104
|
+
const filterItemsMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
105
|
+
defaultProps.filterItems = filterItemsMock;
|
|
106
|
+
defaultProps.value = "all";
|
|
107
|
+
defaultProps.structuredData = {
|
|
108
|
+
from: "profile",
|
|
109
|
+
indexable: true,
|
|
110
|
+
key: "profile",
|
|
111
|
+
showList: true,
|
|
112
|
+
source: "STORY_PROFILE",
|
|
113
|
+
title: "Profile",
|
|
114
|
+
type: "AsyncCheckGroup",
|
|
115
|
+
};
|
|
116
|
+
const data = {
|
|
117
|
+
data: [
|
|
118
|
+
{ name: 1, title: "Mentor", value: 1 },
|
|
119
|
+
{ name: 2, title: "Professor", value: 2 },
|
|
120
|
+
{ name: 3, title: "Student", value: 3 },
|
|
121
|
+
],
|
|
122
|
+
status: 200,
|
|
123
|
+
statusText: "Ok",
|
|
124
|
+
headers: {},
|
|
125
|
+
config: {},
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
mockedAxios.mockResolvedValue(data);
|
|
129
|
+
|
|
130
|
+
await act(async () => {
|
|
131
|
+
render(
|
|
132
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
133
|
+
<CategoryFilter {...defaultProps} />
|
|
134
|
+
</ThemeProvider>
|
|
135
|
+
);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
const typeFilterButton = screen.getByTestId("floating-menu-button");
|
|
139
|
+
expect(typeFilterButton).toBeTruthy();
|
|
140
|
+
fireEvent.click(typeFilterButton);
|
|
141
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
142
|
+
expect(floatingMenu).toBeTruthy();
|
|
143
|
+
const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
|
|
144
|
+
expect(checkGroupFieldGroup).toBeTruthy();
|
|
145
|
+
const checkFieldLabels = screen.getAllByTestId("check-field-label");
|
|
146
|
+
expect(checkFieldLabels).toHaveLength(4);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it("should check option on click", async () => {
|
|
150
|
+
const filterItemsMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
151
|
+
defaultProps.filterItems = filterItemsMock;
|
|
152
|
+
defaultProps.value = "all";
|
|
153
|
+
defaultProps.structuredData = {
|
|
154
|
+
from: "profile",
|
|
155
|
+
indexable: true,
|
|
156
|
+
key: "profile",
|
|
157
|
+
showList: true,
|
|
158
|
+
source: "STORY_PROFILE",
|
|
159
|
+
title: "Profile",
|
|
160
|
+
type: "AsyncCheckGroup",
|
|
161
|
+
};
|
|
162
|
+
const data = {
|
|
163
|
+
data: [
|
|
164
|
+
{ name: 1, title: "Mentor", value: 1 },
|
|
165
|
+
{ name: 2, title: "Professor", value: 2 },
|
|
166
|
+
{ name: 3, title: "Student", value: 3 },
|
|
167
|
+
],
|
|
168
|
+
status: 200,
|
|
169
|
+
statusText: "Ok",
|
|
170
|
+
headers: {},
|
|
171
|
+
config: {},
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
mockedAxios.mockResolvedValue(data);
|
|
175
|
+
|
|
176
|
+
await act(async () => {
|
|
177
|
+
render(
|
|
178
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
179
|
+
<CategoryFilter {...defaultProps} />
|
|
180
|
+
</ThemeProvider>
|
|
181
|
+
);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
const typeFilterButton = screen.getByTestId("floating-menu-button");
|
|
185
|
+
expect(typeFilterButton).toBeTruthy();
|
|
186
|
+
fireEvent.click(typeFilterButton);
|
|
187
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
188
|
+
expect(floatingMenu).toBeTruthy();
|
|
189
|
+
const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
|
|
190
|
+
expect(checkGroupFieldGroup).toBeTruthy();
|
|
191
|
+
const checkFieldInputs = screen.getAllByTestId<HTMLInputElement>("check-field-input");
|
|
192
|
+
expect(checkFieldInputs).toHaveLength(4);
|
|
193
|
+
fireEvent.change(checkFieldInputs[1], { target: { checked: true, value: "1" } });
|
|
194
|
+
expect(checkFieldInputs[1].checked).toBe(true);
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
it("should call filterItems action on change", async () => {
|
|
198
|
+
const filterItemsMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
199
|
+
defaultProps.filterItems = filterItemsMock;
|
|
200
|
+
defaultProps.value = "all";
|
|
201
|
+
defaultProps.structuredData = {
|
|
202
|
+
from: "profile",
|
|
203
|
+
indexable: true,
|
|
204
|
+
key: "profile",
|
|
205
|
+
showList: true,
|
|
206
|
+
source: "STORY_PROFILE",
|
|
207
|
+
title: "Profile",
|
|
208
|
+
type: "AsyncCheckGroup",
|
|
209
|
+
};
|
|
210
|
+
const data = {
|
|
211
|
+
data: [
|
|
212
|
+
{ name: 1, title: "Mentor", value: 1 },
|
|
213
|
+
{ name: 2, title: "Professor", value: 2 },
|
|
214
|
+
{ name: 3, title: "Student", value: 3 },
|
|
215
|
+
],
|
|
216
|
+
status: 200,
|
|
217
|
+
statusText: "Ok",
|
|
218
|
+
headers: {},
|
|
219
|
+
config: {},
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
mockedAxios.mockResolvedValue(data);
|
|
223
|
+
|
|
224
|
+
await act(async () => {
|
|
225
|
+
render(
|
|
226
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
227
|
+
<CategoryFilter {...defaultProps} />
|
|
228
|
+
</ThemeProvider>
|
|
229
|
+
);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
const typeFilterButton = screen.getByTestId("floating-menu-button");
|
|
233
|
+
|
|
234
|
+
expect(typeFilterButton).toBeTruthy();
|
|
235
|
+
fireEvent.click(typeFilterButton);
|
|
236
|
+
const checkFieldInputs = screen.queryAllByTestId("check-field-input");
|
|
237
|
+
fireEvent.click(checkFieldInputs[1]);
|
|
238
|
+
expect(filterItemsMock).toHaveBeenCalledTimes(1);
|
|
239
|
+
expect(filterItemsMock).toBeCalledWith("categories", "1");
|
|
240
|
+
});
|
|
241
|
+
});
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
import { ThemeProvider } from "styled-components";
|
|
4
|
+
import { CalledWithMock, mock } from "jest-mock-extended";
|
|
5
|
+
import { render, screen, cleanup, fireEvent } from "@testing-library/react";
|
|
6
|
+
|
|
7
|
+
import { parseTheme } from "@ax/helpers";
|
|
8
|
+
|
|
9
|
+
import CustomizeFilters, { ICustomizeFiltersProps } from "@ax/components/TableFilters/CustomizeFilters";
|
|
10
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
11
|
+
|
|
12
|
+
afterEach(cleanup);
|
|
13
|
+
|
|
14
|
+
const defaultProps = mock<ICustomizeFiltersProps>();
|
|
15
|
+
|
|
16
|
+
describe("CustomizeFilters component rendering", () => {
|
|
17
|
+
it("should render customize filter", () => {
|
|
18
|
+
defaultProps.columns = {
|
|
19
|
+
live: { title: "Live", show: true },
|
|
20
|
+
profile: { title: "Profile", show: true },
|
|
21
|
+
site: { title: "Site", show: true },
|
|
22
|
+
status: { title: "Status", show: true },
|
|
23
|
+
translation: { title: "Trans.", show: true },
|
|
24
|
+
};
|
|
25
|
+
defaultProps.value = ["site", "profile", "live", "status", "translation"];
|
|
26
|
+
defaultProps.setColumns = jest.fn() as CalledWithMock<void, [newValue: any]> & ((newValue: any) => void);
|
|
27
|
+
|
|
28
|
+
render(
|
|
29
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
30
|
+
<CustomizeFilters {...defaultProps} />
|
|
31
|
+
</ThemeProvider>
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
const customizeFilters = screen.getByTestId("customize-filters-wrapper");
|
|
35
|
+
expect(customizeFilters).toBeTruthy();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
describe("CustomizeFilters events", () => {
|
|
40
|
+
it("should render check group on click floating menu button", () => {
|
|
41
|
+
defaultProps.columns = {
|
|
42
|
+
live: { title: "Live", show: true },
|
|
43
|
+
profile: { title: "Profile", show: true },
|
|
44
|
+
site: { title: "Site", show: true },
|
|
45
|
+
status: { title: "Status", show: true },
|
|
46
|
+
translation: { title: "Trans.", show: true },
|
|
47
|
+
};
|
|
48
|
+
defaultProps.value = ["site", "profile", "live", "status", "translation"];
|
|
49
|
+
defaultProps.setColumns = jest.fn() as CalledWithMock<void, [newValue: any]> & ((newValue: any) => void);
|
|
50
|
+
|
|
51
|
+
render(
|
|
52
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
53
|
+
<CustomizeFilters {...defaultProps} />
|
|
54
|
+
</ThemeProvider>
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const customizeFilterButton = screen.getByTestId("floating-menu-button");
|
|
58
|
+
expect(customizeFilterButton).toBeTruthy();
|
|
59
|
+
fireEvent.click(customizeFilterButton);
|
|
60
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
61
|
+
expect(floatingMenu).toBeTruthy();
|
|
62
|
+
const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
|
|
63
|
+
expect(checkGroupFieldGroup).toBeTruthy();
|
|
64
|
+
const checkFieldLabels = screen.getAllByTestId("check-field-label");
|
|
65
|
+
expect(checkFieldLabels).toHaveLength(5);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("should check option on click", () => {
|
|
69
|
+
defaultProps.columns = {
|
|
70
|
+
live: { title: "Live", show: true },
|
|
71
|
+
profile: { title: "Profile", show: true },
|
|
72
|
+
site: { title: "Site", show: true },
|
|
73
|
+
status: { title: "Status", show: true },
|
|
74
|
+
translation: { title: "Trans.", show: true },
|
|
75
|
+
};
|
|
76
|
+
defaultProps.value = ["site", "profile", "live", "status", "translation"];
|
|
77
|
+
defaultProps.setColumns = jest.fn() as CalledWithMock<void, [newValue: any]> & ((newValue: any) => void);
|
|
78
|
+
|
|
79
|
+
render(
|
|
80
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
81
|
+
<CustomizeFilters {...defaultProps} />
|
|
82
|
+
</ThemeProvider>
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
const customizeFilterButton = screen.getByTestId("floating-menu-button");
|
|
86
|
+
expect(customizeFilterButton).toBeTruthy();
|
|
87
|
+
fireEvent.click(customizeFilterButton);
|
|
88
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
89
|
+
expect(floatingMenu).toBeTruthy();
|
|
90
|
+
const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
|
|
91
|
+
expect(checkGroupFieldGroup).toBeTruthy();
|
|
92
|
+
const checkFieldInputs = screen.getAllByTestId<HTMLInputElement>("check-field-input");
|
|
93
|
+
expect(checkFieldInputs).toHaveLength(5);
|
|
94
|
+
fireEvent.change(checkFieldInputs[0], { target: { checked: false, value: "site" } });
|
|
95
|
+
expect(checkFieldInputs[0].checked).toBe(false);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it("should call setColumns action on change", async () => {
|
|
99
|
+
defaultProps.columns = {
|
|
100
|
+
live: { title: "Live", show: true },
|
|
101
|
+
profile: { title: "Profile", show: true },
|
|
102
|
+
site: { title: "Site", show: true },
|
|
103
|
+
status: { title: "Status", show: true },
|
|
104
|
+
translation: { title: "Trans.", show: true },
|
|
105
|
+
};
|
|
106
|
+
defaultProps.value = ["site", "profile", "live", "status", "translation"];
|
|
107
|
+
const onChangeMock = jest.fn() as CalledWithMock<void, [newValue: any]> & ((newValue: any) => void);
|
|
108
|
+
defaultProps.setColumns = onChangeMock;
|
|
109
|
+
|
|
110
|
+
render(
|
|
111
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
112
|
+
<CustomizeFilters {...defaultProps} />
|
|
113
|
+
</ThemeProvider>
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
const customizeFilterButton = screen.getByTestId("floating-menu-button");
|
|
117
|
+
|
|
118
|
+
expect(customizeFilterButton).toBeTruthy();
|
|
119
|
+
fireEvent.click(customizeFilterButton);
|
|
120
|
+
const checkFieldInputs = screen.queryAllByTestId("check-field-input");
|
|
121
|
+
fireEvent.click(checkFieldInputs[0]);
|
|
122
|
+
expect(onChangeMock).toHaveBeenCalledTimes(1);
|
|
123
|
+
expect(onChangeMock).toBeCalledWith({
|
|
124
|
+
live: { title: "Live", show: false },
|
|
125
|
+
profile: { title: "Profile", show: true },
|
|
126
|
+
site: { title: "Site", show: true },
|
|
127
|
+
status: { title: "Status", show: true },
|
|
128
|
+
translation: { title: "Trans.", show: true },
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
});
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
import { ThemeProvider } from "styled-components";
|
|
4
|
+
import { CalledWithMock, mock } from "jest-mock-extended";
|
|
5
|
+
|
|
6
|
+
import { render, screen, cleanup, fireEvent } from "@testing-library/react";
|
|
7
|
+
|
|
8
|
+
import { parseTheme } from "@ax/helpers";
|
|
9
|
+
|
|
10
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
11
|
+
import DateFilter, { IDateFilterProps } from "@ax/components/TableFilters/DateFilter";
|
|
12
|
+
|
|
13
|
+
afterEach(cleanup);
|
|
14
|
+
const defaultProps = mock<IDateFilterProps>();
|
|
15
|
+
describe("DateFilter component rendering", () => {
|
|
16
|
+
it("should render date filter", () => {
|
|
17
|
+
const sortItemsMock = jest.fn();
|
|
18
|
+
defaultProps.sortedState = { isAscending: false, sortedByDate: false };
|
|
19
|
+
defaultProps.sortItems = sortItemsMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
20
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
21
|
+
render(
|
|
22
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
23
|
+
<DateFilter {...defaultProps} />
|
|
24
|
+
</ThemeProvider>
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
const dateFilter = screen.getByTestId("date-filter");
|
|
28
|
+
expect(dateFilter).toBeTruthy();
|
|
29
|
+
expect(dateFilter.textContent).toEqual("Date");
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("should render interactive arrow if not filter selected", () => {
|
|
33
|
+
const sortItemsMock = jest.fn();
|
|
34
|
+
defaultProps.sortedState = { isAscending: false, sortedByDate: false };
|
|
35
|
+
defaultProps.sortItems = sortItemsMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
36
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
37
|
+
render(
|
|
38
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
39
|
+
<DateFilter {...defaultProps} />
|
|
40
|
+
</ThemeProvider>
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
const interactiveArrow = screen.getByTestId("date-filter-interactive-arrow");
|
|
44
|
+
expect(interactiveArrow).toBeTruthy();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("should not render interactive arrow if filter selected", () => {
|
|
48
|
+
const sortItemsMock = jest.fn();
|
|
49
|
+
defaultProps.sortedState = { isAscending: false, sortedByDate: true };
|
|
50
|
+
defaultProps.sortItems = sortItemsMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
51
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
52
|
+
render(
|
|
53
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
54
|
+
<DateFilter {...defaultProps} />
|
|
55
|
+
</ThemeProvider>
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
const interactiveArrow = screen.queryByTestId("date-filter-interactive-arrow");
|
|
59
|
+
expect(interactiveArrow).toBeFalsy();
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it("should render FullArrowUp icon if is filtered by ascending date", () => {
|
|
63
|
+
const sortItemsMock = jest.fn();
|
|
64
|
+
defaultProps.sortedState = { isAscending: true, sortedByDate: true };
|
|
65
|
+
defaultProps.sortItems = sortItemsMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
66
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
67
|
+
|
|
68
|
+
render(
|
|
69
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
70
|
+
<DateFilter {...defaultProps} />
|
|
71
|
+
</ThemeProvider>
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
const arrowIcon = screen.getByTestId("icon-component");
|
|
75
|
+
expect(arrowIcon).toBeTruthy();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
describe("DateFilter events", () => {
|
|
80
|
+
it("should render check group on click floating menu", () => {
|
|
81
|
+
const sortItemsMock = jest.fn();
|
|
82
|
+
defaultProps.sortedState = { isAscending: false, sortedByDate: false };
|
|
83
|
+
defaultProps.sortItems = sortItemsMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
84
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
85
|
+
render(
|
|
86
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
87
|
+
<DateFilter {...defaultProps} />
|
|
88
|
+
</ThemeProvider>
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
const dateFilterButton = screen.getByTestId("floating-menu-button");
|
|
92
|
+
expect(dateFilterButton).toBeTruthy();
|
|
93
|
+
fireEvent.click(dateFilterButton);
|
|
94
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
95
|
+
expect(floatingMenu).toBeTruthy();
|
|
96
|
+
const listItems = screen.getAllByTestId("list-item");
|
|
97
|
+
expect(listItems).toHaveLength(2);
|
|
98
|
+
expect(listItems[0].textContent).toEqual("Most recent");
|
|
99
|
+
expect(listItems[1].textContent).toEqual("Oldest");
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it("should call sortItems on click 'Most recent' option", async () => {
|
|
103
|
+
const sortItemsMock = jest.fn();
|
|
104
|
+
defaultProps.sortedState = { isAscending: false, sortedByDate: false };
|
|
105
|
+
defaultProps.sortItems = sortItemsMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
106
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
107
|
+
|
|
108
|
+
render(
|
|
109
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
110
|
+
<DateFilter {...defaultProps} />
|
|
111
|
+
</ThemeProvider>
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
const dateFilterButton = screen.getByTestId("floating-menu-button");
|
|
115
|
+
|
|
116
|
+
expect(dateFilterButton).toBeTruthy();
|
|
117
|
+
fireEvent.click(dateFilterButton);
|
|
118
|
+
const listItems = screen.getAllByTestId("list-item");
|
|
119
|
+
expect(listItems).toHaveLength(2);
|
|
120
|
+
fireEvent.click(listItems[0]);
|
|
121
|
+
expect(sortItemsMock).toHaveBeenCalledTimes(1);
|
|
122
|
+
const isAscending = false;
|
|
123
|
+
expect(sortItemsMock).toBeCalledWith("date", isAscending);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("should call sortItems ascending on click 'Oldest' option", async () => {
|
|
127
|
+
const sortItemsMock = jest.fn();
|
|
128
|
+
defaultProps.sortedState = { isAscending: false, sortedByDate: false };
|
|
129
|
+
defaultProps.sortItems = sortItemsMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
130
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
131
|
+
|
|
132
|
+
render(
|
|
133
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
134
|
+
<DateFilter {...defaultProps} />
|
|
135
|
+
</ThemeProvider>
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
const dateFilterButton = screen.getByTestId("floating-menu-button");
|
|
139
|
+
|
|
140
|
+
expect(dateFilterButton).toBeTruthy();
|
|
141
|
+
fireEvent.click(dateFilterButton);
|
|
142
|
+
const listItems = screen.getAllByTestId("list-item");
|
|
143
|
+
fireEvent.click(listItems[1]);
|
|
144
|
+
expect(sortItemsMock).toHaveBeenCalledTimes(1);
|
|
145
|
+
const isAscending = true;
|
|
146
|
+
expect(sortItemsMock).toBeCalledWith("date", isAscending);
|
|
147
|
+
});
|
|
148
|
+
});
|