dimsum-e2e-tests 3.57.0-next.4 → 3.57.0-next.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CHANGELOG.md +206 -0
  2. package/ds-accordion/DSAccordionCO.js +1 -2
  3. package/ds-accordion/slots/DSAccordion.slots.func.spec.js +12 -0
  4. package/ds-breadcrumb/DSBreadcrumb.func.spec.js +5 -3
  5. package/ds-card-v3/DSCardV3CO.js +20 -0
  6. package/ds-card-v3/slots/DSCardV3.slots.axe-core.spec.js +22 -0
  7. package/ds-card-v3/slots/DSCardV3.slots.func.spec.js +36 -0
  8. package/ds-card-v3/slots/DSCardV3.slots.visual.spec.js +18 -0
  9. package/ds-chip/DSChipCO.js +24 -0
  10. package/ds-chip/slots/DSChip.slots.axe-core.spec.js +17 -0
  11. package/ds-chip/slots/DSChip.slots.func.spec.js +39 -0
  12. package/ds-chip/slots/DSChip.slots.visual.spec.js +17 -0
  13. package/ds-controlled-form/ds-controlled-large-input-text/DSLargeInputTextCO.js +5 -0
  14. package/ds-controlled-form/ds-controlled-large-input-text/aria-disabled/DSLargeInputText.aria-disabled.func.spec.js +19 -0
  15. package/ds-data-table-async/DSDataTableCO.js +6 -1
  16. package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -45
  17. package/ds-data-table-async/components/FilterBarCO.js +8 -0
  18. package/ds-data-table-async/components/FiltersCO.js +8 -0
  19. package/ds-data-table-async/components/HeaderCO.js +5 -0
  20. package/ds-data-table-async/empty-state/DSDataTable.empty-state.visual.spec.js +1 -1
  21. package/ds-data-table-async/filters/DSDataTable.free-text-search.keyboard.func.spec.js +70 -5
  22. package/ds-data-table-async/filters/DSDataTable.text-filters.func.spec.js +3 -3
  23. package/ds-data-table-async/more/DSDataTable.headers.visual.spec.js +0 -63
  24. package/ds-data-table-async/select/DSDataTable.select.func.spec.js +1 -1
  25. package/ds-data-table-async/slots/DSDataTable.slots.func.spec.js +40 -0
  26. package/ds-data-table-async/slots/DSDataTable.slots.visual.spec.js +19 -0
  27. package/ds-data-table-async/sorting/DSDataTable.sorting.visual.spec.js +118 -0
  28. package/ds-dialog/DSDialog.cases.visual.spec.js +0 -1
  29. package/ds-dialog/DSDialog.visual.spec.js +1 -1
  30. package/ds-dialog/DSDialogCO.js +5 -13
  31. package/ds-dialog/axe-core/DSDialog.error.axe-core.func.spec.js +24 -0
  32. package/ds-dialog/axe-core/DSDialog.info.axe-core.func.spec.js +24 -0
  33. package/ds-dialog/axe-core/DSDialog.scroll-body.axe-core.func.spec.js +24 -0
  34. package/ds-dialog/axe-core/DSDialog.success.axe-core.func.spec.js +24 -0
  35. package/ds-dialog/axe-core/DSDialog.warning.axe-core.spec.func.js +24 -0
  36. package/ds-form-layout-blocks/form-layout-block-item/DSFormLayoutBlockItem.axe-core.func.spec.js +1 -1
  37. package/{ds-toggle → ds-form-toggle}/DSToggle.axe-core.func.spec.js +6 -2
  38. package/{ds-toggle → ds-form-toggle}/DSToggle.func.spec.js +13 -8
  39. package/{ds-toggle → ds-form-toggle}/DSToggle.visual.spec.js +2 -2
  40. package/{ds-toggle → ds-form-toggle}/DSToggleCO.js +1 -1
  41. package/ds-menu-button/DSMenuButtonCO.js +2 -0
  42. package/ds-menu-button/basic/DSMenuButton.basic.func.spec.js +28 -0
  43. package/ds-menu-button/submenu/DSMenuButton.axe-core.subMenu.func.spec.js +1 -2
  44. package/ds-pagination/DSPagination.axe-core.func.spec.js +64 -0
  45. package/ds-pagination/DSPaginationCO.js +12 -0
  46. package/ds-read-more/DSReadMore.width-change.visual.spec.js +85 -0
  47. package/ds-shuttle-v2/basic/DSShuttleV2.keyboard.func.spec.js +0 -95
  48. package/ds-shuttle-v2/filtering/DSShuttleV2.filter.func.spec.js +8 -3
  49. package/ds-shuttle-v2/filtering/DSShuttleV2.filter.kb.func.spec.js +43 -0
  50. package/ds-shuttle-v2/items/DSShuttleV2.items.func.spec.js +1 -1
  51. package/ds-shuttle-v2/items/DSShuttleV2.items.kb.func.spec.js +1 -1
  52. package/ds-shuttle-v2/load-more/DSShuttleV2.load-more.keyboard.func.spec.js +61 -0
  53. package/package.json +193 -189
  54. package/paths.js +1 -0
  55. package/ds-dialog/DSDialog.smoke.spec.js +0 -133
@@ -142,4 +142,12 @@ export default class FiltersCO extends PageObject {
142
142
  static getFilterPopoverContent = async () => $('[data-testid="ds-datatable-filter-popover-content"]');
143
143
 
144
144
  static getFreeTextSearchInput = async () => $('[data-testid="data-table-filter-free-text-search"]');
145
+
146
+ static getFilterMenuContentSlot = async () => $('[data-dimsum-slot="dsDatatableFilterPopoverContent"]');
147
+
148
+ static getFilterPopoverSlot = async () => $('[data-dimsum-slot="dsDatatableFilterPopover"]');
149
+
150
+ static getFreeTextSearchWrapperSlot = async () => $('[data-dimsum-slot="dsDatatableFreeTextSearchWrapper"]');
151
+
152
+ static getFreeTextSearchFilterSlot = async () => $('[data-dimsum-parent-slot="dsDatatableFreeTextSearchFilter"]');
145
153
  }
@@ -43,6 +43,11 @@ export default class HeaderCO extends PageObject {
43
43
 
44
44
  static getFilterBtnByIndex = async (index) => $$('[data-testid="data-table-filter-menu-button"] button')[index];
45
45
 
46
+ static getSortBtnByIndex = async (index) => {
47
+ const headerCell = await this.getHeaderCellByIndex(index);
48
+ return headerCell.$('[data-testid="data-table-sort-button"]');
49
+ };
50
+
46
51
  // Snapshots
47
52
  static snapshotPath(example = 'basic') {
48
53
  return PageObject.getSnapshotPathBuilder('DataTable', example, 'ds-data-table');
@@ -53,7 +53,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
53
53
  await DSDataTableCO.waitForDataTable();
54
54
  });
55
55
  it('01: should correctly display the data table empty state after skeleton animation finished', async () => {
56
- const emptyStateWrapper = await DSDataTableCO.getDataTableEmpyStateWrapper();
56
+ const emptyStateWrapper = await DSDataTableCO.getDataTableEmptyStateWrapper();
57
57
  await emptyStateWrapper.waitForDisplayed({ timeout: 5000 });
58
58
  const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('skeleton-empty-state'));
59
59
  await expect(snapshot).toEqual(0);
@@ -67,7 +67,43 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
67
67
  await expect(isFilteredJJ).toEqual(true);
68
68
  await expect(pill1).toBeDisplayed();
69
69
  });
70
- it('06: should close the filter - Escape', async () => {
70
+ it('06: should not clear the filter when the input is empty and press Enter', async () => {
71
+ await browser.keys(Key.Return);
72
+ // await browser.keys([Key.Backspace, Key.Backspace, Key.Backspace, Key.Backspace, Key.Backspace]);
73
+ if (browser.capabilities.browserName === 'Safari') {
74
+ await browser.keys([Key.Command, 'A']);
75
+ } else {
76
+ await browser.keys([Key.Control, 'A']);
77
+ }
78
+ await browser.keys(Key.Delete);
79
+ await browser.keys(Key.Return);
80
+ const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
81
+ const results = await RowCO.getRows();
82
+ const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
83
+ const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
84
+ const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
85
+ const pill1 = await FilterBarCO.getPillByText('j');
86
+ await expect(freeTextSearchInput).toBeFocused();
87
+ await expect(isFilteredJWick).toEqual(true);
88
+ await expect(isFilteredJJ).toEqual(true);
89
+ await expect(pill1).toBeDisplayed();
90
+ });
91
+ it('07: should not clear the filter when the input has whitespace and press Enter', async () => {
92
+ await browser.keys(Key.Return);
93
+ await type(' ');
94
+ await browser.keys(Key.Return);
95
+ const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
96
+ const results = await RowCO.getRows();
97
+ const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
98
+ const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
99
+ const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
100
+ const pill1 = await FilterBarCO.getPillByText('j');
101
+ await expect(freeTextSearchInput).toBeFocused();
102
+ await expect(isFilteredJWick).toEqual(true);
103
+ await expect(isFilteredJJ).toEqual(true);
104
+ await expect(pill1).toBeDisplayed();
105
+ });
106
+ it('08: should close the filter - Escape', async () => {
71
107
  await browser.keys(Key.Return);
72
108
  const freeTextPopover = await FiltersCO.getFilterPopoverContent();
73
109
  await freeTextPopover.waitForDisplayed();
@@ -77,14 +113,14 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
77
113
  await expect(freeTextPopover).not.toBeDisplayed();
78
114
  await expect(buttonFirstNameColumn).toBeFocused();
79
115
  });
80
- it('07: should display "no results found" when no matching rows are found', async () => {
116
+ it('09: should display "no results found" when no matching rows are found', async () => {
81
117
  await browser.keys(Key.Return);
82
118
  await type('this is a test');
83
119
  await browser.keys(Key.Return);
84
120
  const noResults = await DSDataTableCO.getDataTableEmptyStateWrapper();
85
121
  const FirstNameColumnHeader = await HeaderCO.getHeaderCellByIndex(1);
86
122
  const buttonFirstNameColumn = await FiltersCO.getHeaderCellFilterButtonByHeaderCell(FirstNameColumnHeader, 0);
87
- const pill1 = await FilterBarCO.getPillByText('john this is a test');
123
+ const pill1 = await FilterBarCO.getPillByText('this is a test');
88
124
  await expect(noResults).toBeDisplayedInViewport();
89
125
  await expect(buttonFirstNameColumn).toBeFocused();
90
126
  await expect(pill1).toBeDisplayed();
@@ -151,7 +187,36 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
151
187
  await expect(isFilteredJJ).toEqual(true);
152
188
  await expect(pill1).toBeDisplayed();
153
189
  });
154
- it('06: should close the filter - Escape', async () => {
190
+ it('06: should not clear the filter when the input is empty and press Enter', async () => {
191
+ await browser.keys(Key.Return);
192
+ await browser.keys(Key.Return);
193
+ const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
194
+ const results = await RowCO.getRows();
195
+ const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
196
+ const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
197
+ const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
198
+ const pill1 = await FilterBarCO.getPillByText('j');
199
+ await expect(freeTextSearchInput).toBeFocused();
200
+ await expect(isFilteredJWick).toEqual(true);
201
+ await expect(isFilteredJJ).toEqual(true);
202
+ await expect(pill1).toBeDisplayed();
203
+ });
204
+ it('07: should not clear the filter when the input has whitespace and press Enter', async () => {
205
+ await browser.keys(Key.Return);
206
+ await type(' ');
207
+ await browser.keys(Key.Return);
208
+ const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
209
+ const results = await RowCO.getRows();
210
+ const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
211
+ const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
212
+ const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
213
+ const pill1 = await FilterBarCO.getPillByText('j');
214
+ await expect(freeTextSearchInput).toBeFocused();
215
+ await expect(isFilteredJWick).toEqual(true);
216
+ await expect(isFilteredJJ).toEqual(true);
217
+ await expect(pill1).toBeDisplayed();
218
+ });
219
+ it('08: should close the filter - Escape', async () => {
155
220
  await browser.keys(Key.Return);
156
221
  const freeTextPopover = await FiltersCO.getFilterPopoverContent();
157
222
  await freeTextPopover.waitForDisplayed();
@@ -161,7 +226,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
161
226
  await expect(freeTextPopover).not.toBeDisplayed();
162
227
  await expect(buttonLastNameColumn).toBeFocused();
163
228
  });
164
- it('07: should display "no results found" when no matching rows are found', async () => {
229
+ it('09: should display "no results found" when no matching rows are found', async () => {
165
230
  await browser.keys(Key.Return);
166
231
  await type('this is a test');
167
232
  await browser.keys(Key.Return);
@@ -248,9 +248,9 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
248
248
  await pill2.waitForDisplayed();
249
249
  const filterBarMenuBtn = await FilterBarCO.getFilterBarDropdownMenuButton();
250
250
  await filterBarMenuBtn.click();
251
- const filterBarMenu = await FilterBarCO.getFilterBarDropdownMenu();
251
+ const filterBarMenu = await FilterBarCO.getFilterBarMenuListBox();
252
252
  await filterBarMenu.waitForDisplayed();
253
- const clearFilters = await FilterBarCO.getFilterBarDropDownOption('Clear Filters');
253
+ const clearFilters = await FilterBarCO.getFilterBarDropDownMenuItemByIndex(0);
254
254
  await clearFilters.click();
255
255
  await expect(pill1).not.toBeDisplayed();
256
256
  await expect(pill2).not.toBeDisplayed();
@@ -272,7 +272,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
272
272
  await browser.keys([Key.Shift, Key.Tab]);
273
273
  await browser.keys([Key.Shift, Key.Tab]);
274
274
  await browser.keys(Key.Enter);
275
- const filterBarMenu = await FilterBarCO.getFilterBarDropdownMenu();
275
+ const filterBarMenu = await FilterBarCO.getFilterBarMenuListBox();
276
276
  await filterBarMenu.waitForDisplayed();
277
277
  await browser.keys(Key.Return);
278
278
  await expect(pill1).not.toBeDisplayed();
@@ -1,49 +1,6 @@
1
- import { Key } from 'webdriverio';
2
1
  import DSDataTableCO from '../DSDataTableCO';
3
- import { HeaderCO } from '../components';
4
- import { mouseOver } from '../../helpers';
5
2
 
6
3
  if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
7
- describe('PUI-7205 - DataTable, Header, Sort by Column - Visual Test', () => {
8
- // PUI-7054
9
- before('loading page', async () => {
10
- const errorOnGo = await DSDataTableCO.sortByColumn.go();
11
- if (errorOnGo) throw errorOnGo;
12
- await DSDataTableCO.waitForDataTable();
13
- });
14
- it('01: should focus position header and show its icons properly', async () => {
15
- await browser.keys(Key.Tab);
16
- await browser.keys(Key.Tab);
17
- await browser.keys(Key.Tab);
18
- const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-focus-header'));
19
- await expect(snapshot).toEqual(0);
20
- });
21
- it('02: should hover country header and show its icons properly', async () => {
22
- const positionHeader = await HeaderCO.getHeaderCellByIndex(3);
23
- await mouseOver(positionHeader);
24
- const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-hover-header'));
25
- await expect(snapshot).toEqual(0);
26
- });
27
- it('03: should hover truncated name header and show its icons and tooltip properly', async () => {
28
- const nameLongHeader = await HeaderCO.getHeaderCellByIndex(1);
29
- await mouseOver(nameLongHeader, 50, 10);
30
- const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-hover-longheader-wtooltip'));
31
- await expect(snapshot).toEqual(0);
32
- });
33
- it('04: should sort descending by first column and get the proper sort icon', async () => {
34
- const idHeader = await HeaderCO.getHeaderCellByIndex(0);
35
- await idHeader.click();
36
- const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-descending-icon-id'));
37
- await expect(snapshot).toEqual(0);
38
- });
39
- it('05: should sort ascending by first column and get the proper sort icon', async () => {
40
- const idHeader = await HeaderCO.getHeaderCellByIndex(0);
41
- await idHeader.click();
42
- const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-ascending-icon-id'));
43
- await expect(snapshot).toEqual(0);
44
- });
45
- });
46
-
47
4
  describe('PUI-6978 - DataTable, Header, Required Column - Visual Test', () => {
48
5
  before('loading page', async () => {
49
6
  const errorOnGo = await DSDataTableCO.requiredColumns.go();
@@ -67,24 +24,4 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
67
24
  await expect(snapshot).toEqual(0);
68
25
  });
69
26
  });
70
- describe('PUI-14735 - [DataTable] Header - Sort icon visibility - keyboard navigation - visual test', () => {
71
- before('loading page', async () => {
72
- const errorOnGo = await DSDataTableCO.sortByColumn.go();
73
- if (errorOnGo) throw errorOnGo;
74
- await DSDataTableCO.waitForDataTable();
75
- });
76
- it('01: column position focused, all the controls including filter and sort icons are displayed', async () => {
77
- await browser.keys(Key.Tab);
78
- await browser.keys(Key.Tab);
79
- await browser.keys(Key.Tab);
80
- const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-header-kb-focus'));
81
- await expect(snapshot).toEqual(0);
82
- });
83
- it('02: column position focused, all the controls including filter and sort icons are displayed', async () => {
84
- await browser.keys(Key.Enter);
85
- await browser.keys(Key.Enter);
86
- const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-header-kb-option-selected'));
87
- await expect(snapshot).toEqual(0);
88
- });
89
- });
90
27
  }
@@ -5,7 +5,7 @@ import DSDataTableCO from '../DSDataTableCO';
5
5
  import { HeaderCO, RowCO, FiltersCO } from '../components';
6
6
  import { getRadioValue } from '../helpers';
7
7
  import { tabStops, isChecked, type } from '../../helpers';
8
- import DSToggleCO from '../../ds-toggle/DSToggleCO';
8
+ import DSToggleCO from '../../ds-form-toggle/DSToggleCO';
9
9
 
10
10
  if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
11
11
  describe('PUI-7043 - DataTable, Single select disabled selection', () => {
@@ -0,0 +1,40 @@
1
+ /* eslint-disable max-lines */
2
+ import DSDataTableCO from '../DSDataTableCO';
3
+ import DSFiltersCO from '../components/FiltersCO';
4
+
5
+ if (
6
+ (!browser.capabilities['ice:options'].isPhone &&
7
+ !browser.capabilities['ice:options'].isTablet &&
8
+ browser.capabilities.browserName === 'chrome') ||
9
+ browser.capabilities.browserName === 'Chrome'
10
+ ) {
11
+ describe('PUI-17326 - DataTable:: FreeTextSearch Slots - Func', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await DSDataTableCO.slotsFilters.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+ it('01: should have custom aria-* for each slot', async () => {
17
+ await DSFiltersCO.openFilterPopperByColumnName('name');
18
+ const dataTableFilterPopoverSlot = await DSFiltersCO.getFilterPopoverSlot();
19
+ const dataTableFilterPopoverContent = await DSFiltersCO.getFilterMenuContentSlot();
20
+ const dataTableFreeTextSearchWrapperSlot = await DSFiltersCO.getFreeTextSearchWrapperSlot();
21
+ const dataTableFreeTextSearchFilterSlot = await DSFiltersCO.getFreeTextSearchFilterSlot();
22
+
23
+ await expect(dataTableFilterPopoverSlot).toHaveAttribute('aria-label', 'Filter popover aria');
24
+ await expect(dataTableFilterPopoverContent).toHaveAttribute('aria-label', 'Filter popover content aria');
25
+ await expect(dataTableFreeTextSearchWrapperSlot).toHaveAttribute('aria-label', 'Free text search wrapper aria');
26
+ await expect(dataTableFreeTextSearchFilterSlot).toHaveAttribute('aria-label', 'Free text search input aria');
27
+ });
28
+ it('02: should have custom data-* for each slot', async () => {
29
+ const dataTableFilterPopoverSlot = await DSFiltersCO.getFilterPopoverSlot();
30
+ const dataTableFilterPopoverContent = await DSFiltersCO.getFilterMenuContentSlot();
31
+ const dataTableFreeTextSearchWrapperSlot = await DSFiltersCO.getFreeTextSearchWrapperSlot();
32
+ const dataTableFreeTextSearchFilterSlot = await DSFiltersCO.getFreeTextSearchFilterSlot();
33
+
34
+ await expect(dataTableFilterPopoverSlot).toHaveAttribute('data-testid', 'Filter popover data');
35
+ await expect(dataTableFilterPopoverContent).toHaveAttribute('data-testid', 'Filter popover content data');
36
+ await expect(dataTableFreeTextSearchWrapperSlot).toHaveAttribute('data-testid', 'Free text search wrapper data');
37
+ await expect(dataTableFreeTextSearchFilterSlot).toHaveAttribute('data-testid', 'Free text search input data');
38
+ });
39
+ });
40
+ }
@@ -0,0 +1,19 @@
1
+ /* eslint-disable max-lines */
2
+ import DSDataTableCO from '../DSDataTableCO';
3
+ import FiltersCO from '../components/FiltersCO';
4
+
5
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
6
+ describe('PUI-17327 - DataTable:: FreeTextSearch Slots -Visual', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSDataTableCO.slotsFilters.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+ it('01: should display FreeTextSearch with customized slots', async () => {
12
+ await browser.eyesOpen();
13
+ await FiltersCO.openFilterPopperByColumnName('name');
14
+
15
+ const snapshot = await browser.eyesCheckSnapshot(DSDataTableCO.snapshotPath('free-text-search-slots'));
16
+ await expect(snapshot).toEqual(0);
17
+ });
18
+ });
19
+ }
@@ -0,0 +1,118 @@
1
+ /* eslint-disable max-len */
2
+ import { Key } from 'webdriverio';
3
+ import DSDataTableCO from '../DSDataTableCO';
4
+ import { FiltersCO, HeaderCO } from '../components';
5
+ import { asyncMouseOver, mouseOver } from '../../helpers';
6
+
7
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
8
+ describe('PUI-6983 - DataTable, Column header when sorting -visual', async () => {
9
+ before('loading page', async () => {
10
+ const errorOnGo = await DSDataTableCO.sortByColumn.go();
11
+ if (errorOnGo) throw errorOnGo;
12
+ await DSDataTableCO.waitForDataTable();
13
+ });
14
+ it('01: should hover on position header and show the unsorted icon for the column', async () => {
15
+ const positionHeader = await HeaderCO.getHeaderCellByIndex(2);
16
+ await asyncMouseOver(positionHeader);
17
+ const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-column-header-unsorted'));
18
+ await expect(snapshot).toEqual(0);
19
+ });
20
+ it('02: should click on position header and sort the rows descending by this column changing the headers icon', async () => {
21
+ await browser.keys(Key.Tab);
22
+ await browser.keys(Key.Tab);
23
+ await browser.keys(Key.Tab);
24
+ await browser.keys(Key.ArrowDown);
25
+ const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-column-header-descending'));
26
+ await expect(snapshot).toEqual(0);
27
+ });
28
+ it('03: should click on position header and sort the rows ascending by this column changing the headers icon', async () => {
29
+ await browser.keys(Key.ArrowUp);
30
+ const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-column-header-ascending'));
31
+ await expect(snapshot).toEqual(0);
32
+ });
33
+ });
34
+ describe('PUI-7041 - DataTable, Column header truncated -visual', async () => {
35
+ before('loading page', async () => {
36
+ const errorOnGo = await DSDataTableCO.sortByColumn.go();
37
+ if (errorOnGo) throw errorOnGo;
38
+ await DSDataTableCO.waitForDataTable();
39
+ });
40
+ it('Should click on name header and sort the rows ascending by this column changing the headers icon', async () => {
41
+ const countryHeader = await HeaderCO.getHeaderCellByIndex(1);
42
+ await countryHeader.click();
43
+ await asyncMouseOver(countryHeader);
44
+ // eslint-disable-next-line wdio/no-pause
45
+ await browser.pause(1000);
46
+ const snapshot = await browser.checkSnapshot(
47
+ DSDataTableCO.snapshotPath('datatable-column-header-truncated-wtooltip'),
48
+ );
49
+ await expect(snapshot).toEqual(0);
50
+ });
51
+ });
52
+ describe('PUI-14735 - [DataTable] Header - Sort icon visibility - keyboard navigation - visual test', () => {
53
+ before('loading page', async () => {
54
+ const errorOnGo = await DSDataTableCO.sortByColumn.go();
55
+ if (errorOnGo) throw errorOnGo;
56
+ await DSDataTableCO.waitForDataTable();
57
+ });
58
+ it('01: column position focused, all the controls including filter and sort icons are displayed', async () => {
59
+ await browser.keys(Key.Tab);
60
+ await browser.keys(Key.Tab);
61
+ await browser.keys(Key.Tab);
62
+ const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-header-kb-focus'));
63
+ await expect(snapshot).toEqual(0);
64
+ });
65
+ it('02: column position focused, all the controls including filter and sort icons are displayed', async () => {
66
+ await browser.keys(Key.Enter);
67
+ await browser.keys(Key.Enter);
68
+ const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('datatable-header-kb-option-selected'));
69
+ await expect(snapshot).toEqual(0);
70
+ });
71
+ });
72
+ describe('PUI-7054 - DataTable, Header, Sort by Column - Visual Test', () => {
73
+ before('loading page', async () => {
74
+ const errorOnGo = await DSDataTableCO.sortByColumn.go();
75
+ if (errorOnGo) throw errorOnGo;
76
+ await DSDataTableCO.waitForDataTable();
77
+ });
78
+ it('01: should focus position header and show its icons properly', async () => {
79
+ await browser.keys(Key.Tab);
80
+ await browser.keys(Key.Tab);
81
+ await browser.keys(Key.Tab);
82
+ const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-focus-header'));
83
+ await expect(snapshot).toEqual(0);
84
+ });
85
+ it('02: should hover country header and show its icons properly', async () => {
86
+ const positionHeader = await HeaderCO.getHeaderCellByIndex(3);
87
+ await mouseOver(positionHeader);
88
+ const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-hover-header'));
89
+ await expect(snapshot).toEqual(0);
90
+ });
91
+ it('03: should hover truncated name header and show its icons and tooltip properly', async () => {
92
+ const nameLongHeader = await HeaderCO.getHeaderCellByIndex(1);
93
+ await mouseOver(nameLongHeader, 50, 10);
94
+ const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-hover-longheader-wtooltip'));
95
+ await expect(snapshot).toEqual(0);
96
+ });
97
+ it('04: should sort descending by first column and get the proper sort icon', async () => {
98
+ const idHeader = await HeaderCO.getHeaderCellByIndex(0);
99
+ await idHeader.click();
100
+ const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-descending-icon-id'));
101
+ await expect(snapshot).toEqual(0);
102
+ });
103
+ it('05: should sort ascending by first column and get the proper sort icon', async () => {
104
+ const idHeader = await HeaderCO.getHeaderCellByIndex(0);
105
+ await idHeader.click();
106
+ const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('headers-ascending-icon-id'));
107
+ await expect(snapshot).toEqual(0);
108
+ });
109
+ it('06: should sort correctly with the filter opened', async () => {
110
+ await FiltersCO.openFilterPopperByColumnName('position');
111
+ const sortIconHeader = await HeaderCO.getSortBtnByIndex(2);
112
+ await sortIconHeader.waitForDisplayed();
113
+ await sortIconHeader.click();
114
+ const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('sort-with-filter-opened'));
115
+ await expect(snapshot).toEqual(0);
116
+ });
117
+ });
118
+ }
@@ -61,7 +61,6 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
61
61
  const dialog = await DSDialog.getDialog();
62
62
  await dialog.waitForDisplayed();
63
63
  await browser.keys(Key.Tab);
64
- await browser.keys(Key.Tab);
65
64
  await browser.keys(Key.ArrowDown);
66
65
  await browser.keys(Key.ArrowDown);
67
66
  await browser.keys(Key.ArrowDown);
@@ -38,7 +38,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
38
38
  });
39
39
  describe('PUI-7878 - DSDialog, ScrollBody layout -visual', () => {
40
40
  before('loading page', async () => {
41
- const errorOnGo = await DSDialog.scrollBodyURL.go();
41
+ const errorOnGo = await DSDialog.scrollBodyContent.go();
42
42
  if (errorOnGo) throw errorOnGo;
43
43
  });
44
44
  it('should display scrollable DSDialog correctly', async () => {
@@ -1,32 +1,24 @@
1
1
  /* eslint-disable import/no-relative-packages */
2
2
  import { getElementByIndex } from './helpers/getElementByIndex';
3
- import { PATH_DIALOG_EXAMPLES, PATH_E2E_DIALOG } from '../paths';
3
+ import { PATH_E2E_DIALOG } from '../paths';
4
4
  import { PageObject, Urlbuilder } from '../helpers';
5
5
 
6
6
  export default class DSDialog extends PageObject {
7
7
  static basicURL = new Urlbuilder(PATH_E2E_DIALOG, 'basic');
8
8
 
9
- static centeredURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'centered');
9
+ static centeredURL = new Urlbuilder(PATH_E2E_DIALOG, 'centered-test');
10
10
 
11
11
  static withPopperjs = new Urlbuilder(PATH_E2E_DIALOG, 'with-popperjs');
12
12
 
13
13
  static decisionURL = new Urlbuilder(PATH_E2E_DIALOG, 'decision-test');
14
14
 
15
- static formDialogURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'form-dialog');
16
-
17
15
  static informationURL = new Urlbuilder(PATH_E2E_DIALOG, 'informational-test');
18
16
 
19
- static manageFocusURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'manage-focus-after-close');
20
-
21
- static removeFocusURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'remove-auto-focus');
22
-
23
- static scrollBodyURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'scroll-body');
24
-
25
- static shuttleURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'shuttle');
17
+ static removeFocusURL = new Urlbuilder(PATH_E2E_DIALOG, 'remove-auto-focus-test');
26
18
 
27
- static tabloopURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'tab-loop');
19
+ static shuttleURL = new Urlbuilder(PATH_E2E_DIALOG, 'shuttle-test');
28
20
 
29
- static wizardURL = new Urlbuilder(PATH_DIALOG_EXAMPLES, 'wizard');
21
+ static wizardURL = new Urlbuilder(PATH_E2E_DIALOG, 'wizard-test');
30
22
 
31
23
  static preventBackgroundShifting = new Urlbuilder(PATH_E2E_DIALOG, 'prevent-background-shifting');
32
24
 
@@ -0,0 +1,24 @@
1
+ import DSDialog from '../DSDialogCO';
2
+ import { axeCoreCheck } from '../../helpers';
3
+
4
+ if (
5
+ (!browser.capabilities['ice:options'].isPhone &&
6
+ !browser.capabilities['ice:options'].isTablet &&
7
+ browser.capabilities.browserName === 'chrome') ||
8
+ browser.capabilities.browserName === 'Chrome'
9
+ ) {
10
+ describe('PUI-17332 - DSDialog:: Error dialog - axe-core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSDialog.errorURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+ it('should display Error DSDialog correctly and pass axe-core scan', async () => {
16
+ const triggerBtn = await DSDialog.getTriggerBtn();
17
+ await triggerBtn.click();
18
+ const dialog = await DSDialog.getDialog();
19
+ await dialog.waitForDisplayed();
20
+ const result = await axeCoreCheck();
21
+ expect(result.length).toBe(0);
22
+ });
23
+ });
24
+ }
@@ -0,0 +1,24 @@
1
+ import DSDialog from '../DSDialogCO';
2
+ import { axeCoreCheck } from '../../helpers';
3
+
4
+ if (
5
+ (!browser.capabilities['ice:options'].isPhone &&
6
+ !browser.capabilities['ice:options'].isTablet &&
7
+ browser.capabilities.browserName === 'chrome') ||
8
+ browser.capabilities.browserName === 'Chrome'
9
+ ) {
10
+ describe('PUI-17330 - DSDialog:: Information dialog - axe-core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSDialog.informationURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+ it('should display Information DSDialog correctly and pass axe-core scan', async () => {
16
+ const triggerBtn = await DSDialog.getTriggerBtn();
17
+ await triggerBtn.click();
18
+ const dialog = await DSDialog.getDialog();
19
+ await dialog.waitForDisplayed();
20
+ const result = await axeCoreCheck();
21
+ expect(result.length).toBe(0);
22
+ });
23
+ });
24
+ }
@@ -0,0 +1,24 @@
1
+ import DSDialog from '../DSDialogCO';
2
+ import { axeCoreCheck } from '../../helpers';
3
+
4
+ if (
5
+ (!browser.capabilities['ice:options'].isPhone &&
6
+ !browser.capabilities['ice:options'].isTablet &&
7
+ browser.capabilities.browserName === 'chrome') ||
8
+ browser.capabilities.browserName === 'Chrome'
9
+ ) {
10
+ describe('PUI-17329 - DSDialog:: ScrollBody layout - axe-core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSDialog.scrollBodyContent.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+ it('should display scrollable DSDialog correctly and pass axe-core scan', async () => {
16
+ const triggerBtn = await DSDialog.getTriggerBtn();
17
+ await triggerBtn.click();
18
+ const dialog = await DSDialog.getDialog();
19
+ await dialog.waitForDisplayed();
20
+ const result = await axeCoreCheck();
21
+ expect(result.length).toBe(0);
22
+ });
23
+ });
24
+ }
@@ -0,0 +1,24 @@
1
+ import DSDialog from '../DSDialogCO';
2
+ import { axeCoreCheck } from '../../helpers';
3
+
4
+ if (
5
+ (!browser.capabilities['ice:options'].isPhone &&
6
+ !browser.capabilities['ice:options'].isTablet &&
7
+ browser.capabilities.browserName === 'chrome') ||
8
+ browser.capabilities.browserName === 'Chrome'
9
+ ) {
10
+ describe('PUI-17333 - DSDialog, Success dialog - axe-core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSDialog.successURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+ it('should display Success DSDialog correctly and pass axe-core scan', async () => {
16
+ const triggerBtn = await DSDialog.getTriggerBtn();
17
+ await triggerBtn.click();
18
+ const dialog = await DSDialog.getDialog();
19
+ await dialog.waitForDisplayed();
20
+ const result = await axeCoreCheck();
21
+ expect(result.length).toBe(0);
22
+ });
23
+ });
24
+ }
@@ -0,0 +1,24 @@
1
+ import DSDialog from '../DSDialogCO';
2
+ import { axeCoreCheck } from '../../helpers';
3
+
4
+ if (
5
+ (!browser.capabilities['ice:options'].isPhone &&
6
+ !browser.capabilities['ice:options'].isTablet &&
7
+ browser.capabilities.browserName === 'chrome') ||
8
+ browser.capabilities.browserName === 'Chrome'
9
+ ) {
10
+ describe('PUI-17331 - DSDialog:: Warning dialog - axe-core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSDialog.warningURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+ it('should display Warning DSDialog correctly and pass axe-core scan', async () => {
16
+ const triggerBtn = await DSDialog.getTriggerBtn();
17
+ await triggerBtn.click();
18
+ const dialog = await DSDialog.getDialog();
19
+ await dialog.waitForDisplayed();
20
+ const result = await axeCoreCheck();
21
+ expect(result.length).toBe(0);
22
+ });
23
+ });
24
+ }
@@ -145,7 +145,7 @@ if (
145
145
  it('02: should have required attribute and aria-hidden for required formLayoutBlock label', async () => {
146
146
  const formLayout = await DSFormLayoutBlockItemCO.getBlockContainersByIndex(0);
147
147
  await formLayout.waitForDisplayed();
148
- const star = await DSFormLayoutBlockItemCO.getRequiredStarFromindex();
148
+ const star = await DSFormLayoutBlockItemCO.getRequiredStarFromIndex();
149
149
  const ariaHidden = await star.getAttribute('aria-hidden');
150
150
  const isRequired = await formLayout.getAttribute('required');
151
151
  expect(ariaHidden).toEqual('true');