@griddo/ax 1.71.0 → 1.72.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.
- 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/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/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 +265 -0
- package/src/__tests__/components/TableFilters/NameFilter/NameFilter.test.tsx +197 -0
- package/src/__tests__/components/TableFilters/SiteFilter/SiteFilter.test.tsx +317 -0
- package/src/__tests__/components/TableFilters/StatusFilter/StatusFilter.test.tsx +197 -0
- package/src/__tests__/components/TableFilters/TranslationsFilter/TranslationsFilter.test.tsx +157 -0
- package/src/__tests__/components/TableFilters/TypeFilter/TypeFilter.test.tsx +164 -0
- package/src/__tests__/components/TableList/TableList.test.tsx +2 -2
- package/src/__tests__/components/Tabs/Tabs.test.tsx +36 -33
- package/src/__tests__/components/Tag/Tag.test.tsx +4 -2
- package/src/__tests__/components/Toast/Toast.test.tsx +4 -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/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,265 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import axios from "axios";
|
|
3
|
+
import { ThemeProvider } from "styled-components";
|
|
4
|
+
import { CalledWithMock, mock } from "jest-mock-extended";
|
|
5
|
+
import { render, screen, cleanup, act, fireEvent } from "@testing-library/react";
|
|
6
|
+
import { parseTheme } from "@ax/helpers";
|
|
7
|
+
|
|
8
|
+
import LiveFilter, { ILiveFilterProps } from "@ax/components/TableFilters/LiveFilter";
|
|
9
|
+
import globalTheme from "@ax/themes/theme.json";
|
|
10
|
+
|
|
11
|
+
afterEach(cleanup);
|
|
12
|
+
jest.mock("axios");
|
|
13
|
+
const mockedAxios = axios as jest.MockedFunction<typeof axios>;
|
|
14
|
+
const defaultProps = mock<ILiveFilterProps>();
|
|
15
|
+
|
|
16
|
+
describe("LiveFilter component rendering", () => {
|
|
17
|
+
it("should render live filter", async () => {
|
|
18
|
+
defaultProps.isStructuredData = false;
|
|
19
|
+
defaultProps.value = "all";
|
|
20
|
+
const filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
21
|
+
|
|
22
|
+
defaultProps.filterItems = filterItems;
|
|
23
|
+
const data = {
|
|
24
|
+
data: [
|
|
25
|
+
{ id: 1, title: "Offline", status: "offline" },
|
|
26
|
+
{ id: 2, title: "Publication pending", status: "upload-pending" },
|
|
27
|
+
{ id: 3, title: "Live", status: "active" },
|
|
28
|
+
{ id: 4, title: "Offline pending", status: "offline-pending" },
|
|
29
|
+
{ id: 5, title: "Live & modified", status: "modified" },
|
|
30
|
+
{ id: 6, title: "Publication scheduled", status: "scheduled" },
|
|
31
|
+
],
|
|
32
|
+
status: 200,
|
|
33
|
+
statusText: "Ok",
|
|
34
|
+
headers: {},
|
|
35
|
+
config: {},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
mockedAxios.mockResolvedValue(data);
|
|
39
|
+
|
|
40
|
+
await act(async () => {
|
|
41
|
+
render(
|
|
42
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
43
|
+
<LiveFilter {...defaultProps} />
|
|
44
|
+
</ThemeProvider>
|
|
45
|
+
);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const liveFilter = screen.getByTestId("floating-menu");
|
|
49
|
+
expect(liveFilter).toBeTruthy();
|
|
50
|
+
expect(liveFilter.textContent).toEqual("Live");
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("should render the component with no options", async () => {
|
|
54
|
+
defaultProps.isStructuredData = false;
|
|
55
|
+
defaultProps.value = "all";
|
|
56
|
+
const filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
57
|
+
|
|
58
|
+
defaultProps.filterItems = filterItems;
|
|
59
|
+
|
|
60
|
+
const data = {
|
|
61
|
+
data: [],
|
|
62
|
+
status: 500,
|
|
63
|
+
statusText: "Internal Server Error",
|
|
64
|
+
headers: {},
|
|
65
|
+
config: {},
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
mockedAxios.mockResolvedValue(data);
|
|
69
|
+
|
|
70
|
+
await act(async () => {
|
|
71
|
+
render(
|
|
72
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
73
|
+
<LiveFilter {...defaultProps} />
|
|
74
|
+
</ThemeProvider>
|
|
75
|
+
);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
const liveFilterButton = screen.getByTestId("floating-menu-button");
|
|
79
|
+
expect(liveFilterButton).toBeTruthy();
|
|
80
|
+
fireEvent.click(liveFilterButton);
|
|
81
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
82
|
+
expect(floatingMenu).toBeTruthy();
|
|
83
|
+
const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
|
|
84
|
+
expect(checkGroupFieldGroup).toBeTruthy();
|
|
85
|
+
const checkFieldInputs = screen.getAllByTestId<HTMLInputElement>("check-field-input");
|
|
86
|
+
expect(checkFieldInputs).toHaveLength(1);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
describe("LiveFilter events", () => {
|
|
91
|
+
it("should render check group on click", async () => {
|
|
92
|
+
defaultProps.isStructuredData = false;
|
|
93
|
+
defaultProps.value = "all";
|
|
94
|
+
const filterItemsMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
95
|
+
|
|
96
|
+
defaultProps.filterItems = filterItemsMock;
|
|
97
|
+
const data = {
|
|
98
|
+
data: [
|
|
99
|
+
{ id: 1, title: "Offline", status: "offline" },
|
|
100
|
+
{ id: 2, title: "Publication pending", status: "upload-pending" },
|
|
101
|
+
{ id: 3, title: "Live", status: "active" },
|
|
102
|
+
{ id: 4, title: "Offline pending", status: "offline-pending" },
|
|
103
|
+
{ id: 5, title: "Live & modified", status: "modified" },
|
|
104
|
+
{ id: 6, title: "Publication scheduled", status: "scheduled" },
|
|
105
|
+
],
|
|
106
|
+
status: 200,
|
|
107
|
+
statusText: "Ok",
|
|
108
|
+
headers: {},
|
|
109
|
+
config: {},
|
|
110
|
+
};
|
|
111
|
+
mockedAxios.mockResolvedValue(data);
|
|
112
|
+
|
|
113
|
+
await act(async () => {
|
|
114
|
+
render(
|
|
115
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
116
|
+
<LiveFilter {...defaultProps} />
|
|
117
|
+
</ThemeProvider>
|
|
118
|
+
);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const liveFilterButton = screen.getByTestId("floating-menu-button");
|
|
122
|
+
expect(liveFilterButton).toBeTruthy();
|
|
123
|
+
fireEvent.click(liveFilterButton);
|
|
124
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
125
|
+
expect(floatingMenu).toBeTruthy();
|
|
126
|
+
const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
|
|
127
|
+
expect(checkGroupFieldGroup).toBeTruthy();
|
|
128
|
+
const checkFieldLabels = screen.getAllByTestId("check-field-label");
|
|
129
|
+
expect(checkFieldLabels).toHaveLength(7);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it("should check option on click", async () => {
|
|
133
|
+
defaultProps.isStructuredData = false;
|
|
134
|
+
defaultProps.value = "all";
|
|
135
|
+
const filterItemsMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
136
|
+
|
|
137
|
+
defaultProps.filterItems = filterItemsMock;
|
|
138
|
+
const data = {
|
|
139
|
+
data: [
|
|
140
|
+
{ id: 1, title: "Offline", status: "offline" },
|
|
141
|
+
{ id: 2, title: "Publication pending", status: "upload-pending" },
|
|
142
|
+
{ id: 3, title: "Live", status: "active" },
|
|
143
|
+
{ id: 4, title: "Offline pending", status: "offline-pending" },
|
|
144
|
+
{ id: 5, title: "Live & modified", status: "modified" },
|
|
145
|
+
{ id: 6, title: "Publication scheduled", status: "scheduled" },
|
|
146
|
+
],
|
|
147
|
+
status: 200,
|
|
148
|
+
statusText: "Ok",
|
|
149
|
+
headers: {},
|
|
150
|
+
config: {},
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
mockedAxios.mockResolvedValue(data);
|
|
154
|
+
|
|
155
|
+
await act(async () => {
|
|
156
|
+
render(
|
|
157
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
158
|
+
<LiveFilter {...defaultProps} />
|
|
159
|
+
</ThemeProvider>
|
|
160
|
+
);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
const liveFilterButton = screen.getByTestId("floating-menu-button");
|
|
164
|
+
expect(liveFilterButton).toBeTruthy();
|
|
165
|
+
fireEvent.click(liveFilterButton);
|
|
166
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
167
|
+
expect(floatingMenu).toBeTruthy();
|
|
168
|
+
const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
|
|
169
|
+
expect(checkGroupFieldGroup).toBeTruthy();
|
|
170
|
+
const checkFieldInputs = screen.getAllByTestId<HTMLInputElement>("check-field-input");
|
|
171
|
+
expect(checkFieldInputs).toHaveLength(7);
|
|
172
|
+
fireEvent.click(checkFieldInputs[1]);
|
|
173
|
+
expect(checkFieldInputs[1].checked).toBe(true);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it("should uncheck selected option on click and select 'All' option", async () => {
|
|
177
|
+
defaultProps.isStructuredData = false;
|
|
178
|
+
defaultProps.value = "all";
|
|
179
|
+
const filterItemsMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
180
|
+
|
|
181
|
+
defaultProps.filterItems = filterItemsMock;
|
|
182
|
+
const data = {
|
|
183
|
+
data: [
|
|
184
|
+
{ id: 1, title: "Offline", status: "offline" },
|
|
185
|
+
{ id: 2, title: "Publication pending", status: "upload-pending" },
|
|
186
|
+
{ id: 3, title: "Live", status: "active" },
|
|
187
|
+
{ id: 4, title: "Offline pending", status: "offline-pending" },
|
|
188
|
+
{ id: 5, title: "Live & modified", status: "modified" },
|
|
189
|
+
{ id: 6, title: "Publication scheduled", status: "scheduled" },
|
|
190
|
+
],
|
|
191
|
+
status: 200,
|
|
192
|
+
statusText: "Ok",
|
|
193
|
+
headers: {},
|
|
194
|
+
config: {},
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
mockedAxios.mockResolvedValue(data);
|
|
198
|
+
|
|
199
|
+
await act(async () => {
|
|
200
|
+
render(
|
|
201
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
202
|
+
<LiveFilter {...defaultProps} />
|
|
203
|
+
</ThemeProvider>
|
|
204
|
+
);
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
const liveFilterButton = screen.getByTestId("floating-menu-button");
|
|
208
|
+
expect(liveFilterButton).toBeTruthy();
|
|
209
|
+
fireEvent.click(liveFilterButton);
|
|
210
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
211
|
+
expect(floatingMenu).toBeTruthy();
|
|
212
|
+
const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
|
|
213
|
+
expect(checkGroupFieldGroup).toBeTruthy();
|
|
214
|
+
const checkFieldInputs = screen.getAllByTestId<HTMLInputElement>("check-field-input");
|
|
215
|
+
expect(checkFieldInputs).toHaveLength(7);
|
|
216
|
+
fireEvent.click(checkFieldInputs[1]);
|
|
217
|
+
expect(checkFieldInputs[1].checked).toBe(true);
|
|
218
|
+
fireEvent.click(checkFieldInputs[1]);
|
|
219
|
+
expect(checkFieldInputs[1].checked).toBe(false);
|
|
220
|
+
expect(checkFieldInputs[0].checked).toBe(true);
|
|
221
|
+
|
|
222
|
+
expect(filterItemsMock).toHaveBeenCalledTimes(2);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it("should call filterItems action on change", async () => {
|
|
226
|
+
defaultProps.isStructuredData = false;
|
|
227
|
+
defaultProps.value = "all";
|
|
228
|
+
const filterItemsMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
|
|
229
|
+
|
|
230
|
+
defaultProps.filterItems = filterItemsMock;
|
|
231
|
+
const data = {
|
|
232
|
+
data: [
|
|
233
|
+
{ id: 1, title: "Offline", status: "offline" },
|
|
234
|
+
{ id: 2, title: "Publication pending", status: "upload-pending" },
|
|
235
|
+
{ id: 3, title: "Live", status: "active" },
|
|
236
|
+
{ id: 4, title: "Offline pending", status: "offline-pending" },
|
|
237
|
+
{ id: 5, title: "Live & modified", status: "modified" },
|
|
238
|
+
{ id: 6, title: "Publication scheduled", status: "scheduled" },
|
|
239
|
+
],
|
|
240
|
+
status: 200,
|
|
241
|
+
statusText: "Ok",
|
|
242
|
+
headers: {},
|
|
243
|
+
config: {},
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
mockedAxios.mockResolvedValue(data);
|
|
247
|
+
|
|
248
|
+
await act(async () => {
|
|
249
|
+
render(
|
|
250
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
251
|
+
<LiveFilter {...defaultProps} />
|
|
252
|
+
</ThemeProvider>
|
|
253
|
+
);
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
const liveFilterButton = screen.getByTestId("floating-menu-button");
|
|
257
|
+
|
|
258
|
+
expect(liveFilterButton).toBeTruthy();
|
|
259
|
+
fireEvent.click(liveFilterButton);
|
|
260
|
+
const checkFieldInputs = screen.queryAllByTestId("check-field-input");
|
|
261
|
+
fireEvent.click(checkFieldInputs[1]);
|
|
262
|
+
expect(filterItemsMock).toHaveBeenCalledTimes(1);
|
|
263
|
+
expect(filterItemsMock).toBeCalledWith("liveStatus", "offline");
|
|
264
|
+
});
|
|
265
|
+
});
|
|
@@ -0,0 +1,197 @@
|
|
|
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 NameFilter, { INameFilterProps } from "@ax/components/TableFilters/NameFilter";
|
|
12
|
+
|
|
13
|
+
afterEach(cleanup);
|
|
14
|
+
const defaultProps = mock<INameFilterProps>();
|
|
15
|
+
describe("NameFilter component rendering", () => {
|
|
16
|
+
it("should render name filter", () => {
|
|
17
|
+
const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
18
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
19
|
+
defaultProps.sortedState = { isAscending: false, sortedByDate: false, sortedByTitle: false, sortedByURL: false };
|
|
20
|
+
defaultProps.sortItems = onClickMock;
|
|
21
|
+
defaultProps.urlSorting = false;
|
|
22
|
+
|
|
23
|
+
render(
|
|
24
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
25
|
+
<NameFilter {...defaultProps} />
|
|
26
|
+
</ThemeProvider>
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
const nameFilter = screen.getByTestId("name-filter-header");
|
|
30
|
+
expect(nameFilter).toBeTruthy();
|
|
31
|
+
expect(nameFilter.textContent).toEqual("Name");
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it("should render URL on title if it is URL sorting", () => {
|
|
35
|
+
const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
36
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
37
|
+
defaultProps.sortedState = { isAscending: true, sortedByTitle: true };
|
|
38
|
+
defaultProps.sortItems = onClickMock;
|
|
39
|
+
defaultProps.urlSorting = true;
|
|
40
|
+
|
|
41
|
+
render(
|
|
42
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
43
|
+
<NameFilter {...defaultProps} />
|
|
44
|
+
</ThemeProvider>
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const nameFilter = screen.getByTestId("name-filter-header");
|
|
48
|
+
expect(nameFilter).toBeTruthy();
|
|
49
|
+
expect(nameFilter.textContent).toEqual("Name & URL");
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("should render URL sorting option if it is URL sorting", () => {
|
|
53
|
+
const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
54
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
55
|
+
defaultProps.sortedState = { isAscending: true, sortedByTitle: true };
|
|
56
|
+
defaultProps.sortItems = onClickMock;
|
|
57
|
+
defaultProps.urlSorting = true;
|
|
58
|
+
|
|
59
|
+
render(
|
|
60
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
61
|
+
<NameFilter {...defaultProps} />
|
|
62
|
+
</ThemeProvider>
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
const nameFilterButton = screen.getByTestId("floating-menu-button");
|
|
66
|
+
expect(nameFilterButton).toBeTruthy();
|
|
67
|
+
fireEvent.click(nameFilterButton);
|
|
68
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
69
|
+
expect(floatingMenu).toBeTruthy();
|
|
70
|
+
const listItems = screen.getAllByTestId("list-item");
|
|
71
|
+
expect(listItems).toHaveLength(3);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("should render interactive arrow if not filter selected", () => {
|
|
75
|
+
const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
76
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
77
|
+
defaultProps.sortedState = { isAscending: false, sortedByDate: false, sortedByTitle: false, sortedByURL: false };
|
|
78
|
+
defaultProps.sortItems = onClickMock;
|
|
79
|
+
defaultProps.urlSorting = false;
|
|
80
|
+
|
|
81
|
+
render(
|
|
82
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
83
|
+
<NameFilter {...defaultProps} />
|
|
84
|
+
</ThemeProvider>
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
const interactiveArrow = screen.getByTestId("name-filter-interactive-arrow");
|
|
88
|
+
expect(interactiveArrow).toBeTruthy();
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it("should not render interactive arrow if not filter selected", () => {
|
|
92
|
+
const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
93
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
94
|
+
defaultProps.sortedState = { isAscending: false, sortedByTitle: true };
|
|
95
|
+
defaultProps.sortItems = onClickMock;
|
|
96
|
+
defaultProps.urlSorting = false;
|
|
97
|
+
|
|
98
|
+
render(
|
|
99
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
100
|
+
<NameFilter {...defaultProps} />
|
|
101
|
+
</ThemeProvider>
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
const interactiveArrow = screen.queryByTestId("name-filter-interactive-arrow");
|
|
105
|
+
expect(interactiveArrow).toBeFalsy();
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it("should render FullArrowUp icon if is filtered by ascending name", () => {
|
|
109
|
+
const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
110
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
111
|
+
defaultProps.sortedState = { isAscending: true, sortedByTitle: true };
|
|
112
|
+
defaultProps.sortItems = onClickMock;
|
|
113
|
+
defaultProps.urlSorting = false;
|
|
114
|
+
|
|
115
|
+
render(
|
|
116
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
117
|
+
<NameFilter {...defaultProps} />
|
|
118
|
+
</ThemeProvider>
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const arrowIcon = screen.getByTestId("icon-component");
|
|
122
|
+
expect(arrowIcon).toBeTruthy();
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe("NameFilter events", () => {
|
|
127
|
+
it("should render check group on click", () => {
|
|
128
|
+
const onClickMock = jest.fn();
|
|
129
|
+
defaultProps.sortedState = { isAscending: false, sortedByDate: false };
|
|
130
|
+
defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
131
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
132
|
+
|
|
133
|
+
render(
|
|
134
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
135
|
+
<NameFilter {...defaultProps} />
|
|
136
|
+
</ThemeProvider>
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
const nameFilterButton = screen.getByTestId("floating-menu-button");
|
|
140
|
+
expect(nameFilterButton).toBeTruthy();
|
|
141
|
+
fireEvent.click(nameFilterButton);
|
|
142
|
+
const floatingMenu = screen.getByTestId("floating-menu");
|
|
143
|
+
expect(floatingMenu).toBeTruthy();
|
|
144
|
+
const listItems = screen.getAllByTestId("list-item");
|
|
145
|
+
expect(listItems).toHaveLength(2);
|
|
146
|
+
expect(listItems[0].textContent).toEqual("Ascendent");
|
|
147
|
+
expect(listItems[1].textContent).toEqual("Descendent");
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it("should call filterItems with isAscending on click 'Ascendent' option", async () => {
|
|
151
|
+
const onClickMock = jest.fn();
|
|
152
|
+
defaultProps.sortedState = { isAscending: false, sortedByDate: false };
|
|
153
|
+
defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
154
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
155
|
+
|
|
156
|
+
render(
|
|
157
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
158
|
+
<NameFilter {...defaultProps} />
|
|
159
|
+
</ThemeProvider>
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
const nameFilterButton = screen.getByTestId("floating-menu-button");
|
|
163
|
+
|
|
164
|
+
expect(nameFilterButton).toBeTruthy();
|
|
165
|
+
fireEvent.click(nameFilterButton);
|
|
166
|
+
const listItems = screen.getAllByTestId("list-item");
|
|
167
|
+
|
|
168
|
+
fireEvent.click(listItems[0]);
|
|
169
|
+
expect(onClickMock).toHaveBeenCalledTimes(1);
|
|
170
|
+
const isAscending = true;
|
|
171
|
+
expect(onClickMock).toBeCalledWith("title", isAscending);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it("should call filterItems with isAscending false on click 'Descendent' option", async () => {
|
|
175
|
+
const onClickMock = jest.fn();
|
|
176
|
+
defaultProps.sortedState = { isAscending: false, sortedByDate: false };
|
|
177
|
+
defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
|
|
178
|
+
((orderPointer: string, isAscendent: boolean) => any);
|
|
179
|
+
|
|
180
|
+
render(
|
|
181
|
+
<ThemeProvider theme={parseTheme(globalTheme)}>
|
|
182
|
+
<NameFilter {...defaultProps} />
|
|
183
|
+
</ThemeProvider>
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
const nameFilterButton = screen.getByTestId("floating-menu-button");
|
|
187
|
+
|
|
188
|
+
expect(nameFilterButton).toBeTruthy();
|
|
189
|
+
fireEvent.click(nameFilterButton);
|
|
190
|
+
const listItems = screen.getAllByTestId("list-item");
|
|
191
|
+
|
|
192
|
+
fireEvent.click(listItems[1]);
|
|
193
|
+
expect(onClickMock).toHaveBeenCalledTimes(1);
|
|
194
|
+
const isAscending = false;
|
|
195
|
+
expect(onClickMock).toBeCalledWith("title", isAscending);
|
|
196
|
+
});
|
|
197
|
+
});
|