Skip to content

Commit 8ab6bdf

Browse files
DataGrid: fix Tab press handler in filter range (T1312521) (#32199)
1 parent 5e47317 commit 8ab6bdf

File tree

7 files changed

+255
-176
lines changed

7 files changed

+255
-176
lines changed

e2e/testcafe-devextreme/tests/dataGrid/common/filterRow/T1163100_changeFIlterIcon.ts renamed to e2e/testcafe-devextreme/tests/dataGrid/common/filterRow/T1163100_changeFIlterIcon.visual_matrix.ts

File renamed without changes.
5.88 KB
Loading

e2e/testcafe-devextreme/tests/dataGrid/common/filterRow/filterRow.ts renamed to e2e/testcafe-devextreme/tests/dataGrid/common/filterRow/functional.ts

Lines changed: 93 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
import { createScreenshotsComparer } from 'devextreme-screenshot-comparer';
21
import DataGrid from 'devextreme-testcafe-models/dataGrid';
32
import FilterTextBox from 'devextreme-testcafe-models/dataGrid/editors/filterTextBox';
43
import url from '../../../../helpers/getPageUrl';
54
import { createWidget } from '../../../../helpers/createWidget';
6-
import { getNumberData, getData } from '../../helpers/generateDataSourceData';
7-
import { testScreenshot } from '../../../../helpers/themeUtils';
5+
import { getData } from '../../helpers/generateDataSourceData';
86

97
fixture`FilterRow`
108
.page(url(__dirname, '../../../container.html'));
@@ -15,19 +13,19 @@ test('Filter should reset if the filter row editor text is cleared (T1257261)',
1513
const filterPanelText = dataGrid.getFilterPanel().getFilterText();
1614

1715
await t
18-
// assert
16+
// assert
1917
.expect(filterPanelText.element.textContent)
2018
.eql('[Text] Equals \'i\'')
21-
// act
19+
// act
2220
.click(filterEditor.input)
2321
.pressKey('backspace')
2422
.wait(100) // updateValueTimeout
25-
// assert
23+
// assert
2624
.expect(filterPanelText.element.textContent)
2725
.eql('Create Filter')
28-
// act
26+
// act
2927
.click(dataGrid.element)
30-
// assert
28+
// assert
3129
.expect(filterPanelText.element.textContent)
3230
.eql('Create Filter');
3331
}).before(async () => createWidget('dxDataGrid', {
@@ -52,60 +50,6 @@ test('Filter should reset if the filter row editor text is cleared (T1257261)',
5250
},
5351
}));
5452

55-
// visual: material.blue.light
56-
test('Filter row\'s height should be adjusted by content (T1072609)', async (t) => {
57-
const dataGrid = new DataGrid('#container');
58-
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
59-
60-
await testScreenshot(t, takeScreenshot, 'T1072609.png', { element: dataGrid.element });
61-
await t
62-
.expect(compareResults.isValid())
63-
.ok(compareResults.errorMessages());
64-
}).before(async () => createWidget('dxDataGrid', {
65-
columns: [{
66-
dataField: 'Date',
67-
dataType: 'date',
68-
width: 140,
69-
selectedFilterOperation: 'between',
70-
filterValue: [new Date(2022, 2, 28), new Date(2022, 2, 29)],
71-
}],
72-
filterRow: { visible: true },
73-
wordWrapEnabled: true,
74-
showBorders: true,
75-
}));
76-
77-
test('FilterRow range overlay screenshot', async (t) => {
78-
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
79-
const dataGrid = new DataGrid('#container');
80-
const filterEditor = dataGrid.getFilterEditor(1, FilterTextBox);
81-
82-
await t
83-
.click(filterEditor.menuButton);
84-
await t
85-
.click(filterEditor.menu.getItemByText('Between'));
86-
// act
87-
await testScreenshot(t, takeScreenshot, 'filter-row-overlay.png', { element: dataGrid.element });
88-
await t
89-
.expect(compareResults.isValid())
90-
.ok()
91-
// assert
92-
.expect(dataGrid.getFilterRangeOverlay().exists)
93-
.ok()
94-
.expect(compareResults.isValid())
95-
.ok(compareResults.errorMessages());
96-
}).before(async () => createWidget('dxDataGrid', {
97-
dataSource: getNumberData(20, 2),
98-
height: 400,
99-
showBorders: true,
100-
filterRow: {
101-
visible: true,
102-
applyFilter: 'auto',
103-
},
104-
scrolling: {
105-
showScrollbar: 'never',
106-
},
107-
}));
108-
10953
// T1267481
11054
test('Filter Row\'s Reset button does not work after a custom filter is set in Filter Builder', async (t) => {
11155
const dataGrid = new DataGrid('#container');
@@ -157,35 +101,37 @@ test('Filter Row\'s Reset button does not work after a custom filter is set in F
157101
});
158102
});
159103

160-
// T1287288
161-
// visual: fluent.blue.light
162-
test('Focus overlay should be visible in filter row when focusedRowEnabled is enabled', async (t) => {
163-
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
104+
// T1290381
105+
test('DataGrid - filter row\'s search-box\'s aria-label should be customizable via localization', async (t) => {
164106
const dataGrid = new DataGrid('#container');
165-
const filterEditor = dataGrid.getFilterEditor(1, FilterTextBox);
107+
const filterEditor = dataGrid.getFilterEditor(0, FilterTextBox);
108+
109+
await dataGrid.isReady();
110+
111+
const ariaLabel = await filterEditor.menuButton.getAttribute('aria-label');
166112

167113
await t
168-
.click(dataGrid.getDataCell(0, 0).element)
169-
.click(filterEditor.input)
170-
// assert
171-
.expect(filterEditor.input.focused)
172-
.ok();
173-
await testScreenshot(t, takeScreenshot, 'filter-row-focus-overlay.png', { element: dataGrid.element });
174-
await t
175-
.expect(compareResults.isValid())
176-
.ok(compareResults.errorMessages());
177-
}).before(async () => createWidget('dxDataGrid', {
178-
dataSource: [
179-
{ ID: 1, Field: 'Item 1' },
180-
{ ID: 2, Field: 'Item 2' },
181-
{ ID: 3, Field: 'Item 3' },
182-
],
183-
keyExpr: 'ID',
184-
focusedRowEnabled: true,
185-
filterRow: { visible: true },
186-
showBorders: true,
187-
columns: ['ID', 'Field'],
188-
}));
114+
.expect(ariaLabel)
115+
.eql('custom text');
116+
}).before(async (t) => {
117+
await t.eval(() => {
118+
(window as any).DevExpress.localization.loadMessages({
119+
en: {
120+
'dxDataGrid-ariaSearchBox': 'custom text',
121+
},
122+
});
123+
});
124+
125+
return createWidget('dxDataGrid', {
126+
columns: [{
127+
dataField: 'test',
128+
dataType: 'string',
129+
}],
130+
filterRow: {
131+
visible: true,
132+
},
133+
});
134+
});
189135

190136
test('DataGrid - NVDA reads filter menu items as "Search box 1 of 8" (T1290386)', async (t) => {
191137
const dataGrid = new DataGrid('#container');
@@ -219,67 +165,68 @@ test('DataGrid - NVDA reads filter menu items as "Search box 1 of 8" (T1290386)'
219165
},
220166
}));
221167

222-
test('DataGrid - The `between` filter dropdown sticks to the viewport edge during horizontal scrolling (T1280071)', async (t) => {
223-
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
224-
const dataGrid = new DataGrid('#container');
225-
const filterEditor = dataGrid.getFilterEditor(0, FilterTextBox);
226-
227-
await dataGrid.isReady();
168+
// T1312521
169+
[true, false].forEach((grouped) => {
170+
test('DataGrid - filter range overlay in last column on Tab pressed moves focus to next tabbable element (T1312521)', async (t) => {
171+
const dataGrid = new DataGrid('#container');
172+
const filterCell = dataGrid.getFilterCell(2);
173+
const expectedFocusedElement = grouped ? dataGrid.getGroupRow(0) : dataGrid.getDataCell(0, 0);
174+
175+
await t
176+
.click(filterCell)
177+
.expect(dataGrid.getFilterRangeOverlay().exists)
178+
.ok('Filter range overlay is shown')
179+
.pressKey('tab')
180+
.pressKey('tab')
181+
.expect(dataGrid.getFilterRangeOverlay().exists)
182+
.notOk('Filter range overlay is closed')
183+
.expect(expectedFocusedElement.isFocused)
184+
.ok('First cell of first row is focused');
185+
}).before(async () => createWidget('dxDataGrid', {
186+
dataSource: [
187+
{ Group: 'group1', Value: 'field1', Range: 10 },
188+
{ Group: 'group1', Value: 'field2', Range: 20 },
189+
{ Group: 'group2', Value: 'field3', Range: 30 },
190+
{ Group: 'group2', Value: 'field4', Range: 40 },
191+
],
192+
filterRow: { visible: true },
193+
columns: [
194+
{
195+
dataField: 'Group',
196+
groupIndex: grouped ? 0 : undefined,
197+
},
198+
'Value',
199+
{
200+
dataField: 'Range',
201+
selectedFilterOperation: 'between',
202+
},
203+
],
204+
}));
205+
});
228206

229-
await t
230-
.click(filterEditor.menuButton)
231-
.click(filterEditor.menu.getItemByText('Between'));
207+
test('DataGrid - filter range overlay in last column on Tab pressed moves focus to next tabbable element with empty data (T1312521)', async (t) => {
208+
const dataGrid = new DataGrid('#container');
209+
const filterCell = dataGrid.getFilterCell(2);
232210

233-
await dataGrid.scrollBy(t, { x: 999 });
234-
await testScreenshot(t, takeScreenshot, 'filter-row-filter-range-hide-on-scroll.png');
235211
await t
236-
.expect(compareResults.isValid())
237-
.ok(compareResults.errorMessages());
212+
.click(filterCell)
213+
.expect(dataGrid.getFilterRangeOverlay().exists)
214+
.ok('Filter range overlay is shown')
215+
.pressKey('tab')
216+
.pressKey('tab')
217+
.expect(dataGrid.getFilterRangeOverlay().exists)
218+
.notOk('Filter range overlay is closed')
219+
.expect(dataGrid.getRowsView().focused)
220+
.ok('Empty rows view is focused');
238221
}).before(async () => createWidget('dxDataGrid', {
239-
dataSource: [
240-
{ ID: 1, Text: 'Item 1' },
241-
{ ID: 2, Text: '' },
242-
{ ID: 3, Text: 'Item 3' },
222+
dataSource: [],
223+
filterRow: { visible: true },
224+
columns: [
225+
'Group',
226+
'Value',
227+
{
228+
dataField: 'Range',
229+
selectedFilterOperation: 'between',
230+
},
243231
],
244-
keyExpr: 'ID',
245-
filterRow: {
246-
visible: true,
247-
},
248-
scrolling: {
249-
useNative: true,
250-
},
251-
columnWidth: 400,
252-
width: 500,
253232
}));
254-
255-
// T1290381
256-
test('DataGrid - filter row\'s search-box\'s aria-label should be customizable via localization', async (t) => {
257-
const dataGrid = new DataGrid('#container');
258-
const filterEditor = dataGrid.getFilterEditor(0, FilterTextBox);
259-
260-
await dataGrid.isReady();
261-
262-
const ariaLabel = await filterEditor.menuButton.getAttribute('aria-label');
263-
264-
await t
265-
.expect(ariaLabel)
266-
.eql('custom text');
267-
}).before(async (t) => {
268-
await t.eval(() => {
269-
(window as any).DevExpress.localization.loadMessages({
270-
en: {
271-
'dxDataGrid-ariaSearchBox': 'custom text',
272-
},
273-
});
274-
});
275-
276-
return createWidget('dxDataGrid', {
277-
columns: [{
278-
dataField: 'test',
279-
dataType: 'string',
280-
}],
281-
filterRow: {
282-
visible: true,
283-
},
284-
});
285-
});

0 commit comments

Comments
 (0)