dimsum-e2e-tests 3.53.0-alpha.1 → 3.53.0-alpha.3
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/CHANGELOG.md +8 -0
- package/ds-accordion/DSAccordionCO.js +15 -11
- package/ds-accordion/role/DSAccordion.role-heading.func.spec.js +21 -0
- package/ds-accordion/scrollable-content/DSAccordion.scrollable-content.visual.spec.js +42 -0
- package/ds-accordion/slots/DSAccordion.slots.func.spec.js +12 -0
- package/ds-accordion/wrapLabel/DSAccordion.wrap-label.visual.spec.js +20 -0
- package/ds-autocomplete/DSAutocompleteCO.js +18 -0
- package/ds-autocomplete/slots/DSAutocomplete.slots.axe-core.func.spec.js +20 -0
- package/ds-autocomplete/slots/DSAutocomplete.slots.func.spec.js +45 -0
- package/ds-autocomplete/slots/DSAutocomplete.slots.visual.spec.js +21 -0
- package/ds-banner/DSBanner.func.spec.js +4 -60
- package/ds-banner/DSBanner.text-resize.visual.spec.js +15 -0
- package/ds-banner/DSBanner.text-wrapping.visual.spec.js +31 -0
- package/ds-banner/DSBanner.visual.spec.js +0 -29
- package/ds-banner/DSBannerCO.js +24 -2
- package/ds-banner/aria-and-role/DSBanner.aria-and-role.func.spec.js +63 -0
- package/ds-banner/slots/DSBanner.slots.func.spec.js +65 -0
- package/ds-banner/slots/DSBanner.slots.visual.spec.js +17 -0
- package/ds-breadcrumb/DSBreadcrumb.func.spec.js +5 -3
- package/ds-button-v3/DSButtonV3.type-submit.func.spec.js +28 -0
- package/ds-button-v3/DSButtonV3.visual.spec.js +7 -2
- package/ds-button-v3/DSButtonV3CO.js +2 -0
- package/ds-card-navigation/CardNavigationCO.js +56 -0
- package/ds-card-navigation/DSCardNavigation.func.spec.js +50 -1
- package/ds-card-navigation/DSCardNavigation.slots.func.spec.js +127 -0
- package/ds-card-navigation/DSCardNavigation.slots.visual.spec.js +26 -0
- package/ds-card-navigation/DSCardNavigation.visual.spec.js +16 -0
- package/ds-card-v3/DSCardV3CO.js +20 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.visual.spec.js +1 -1
- package/ds-card-v3/slots/DSCardV3.slots.axe-core.spec.js +22 -0
- package/ds-card-v3/slots/DSCardV3.slots.func.spec.js +36 -0
- package/ds-card-v3/slots/DSCardV3.slots.visual.spec.js +18 -0
- package/ds-chat/DSChat.func.spec.js +3 -2
- package/ds-chat/DSChat.visual.spec.js +3 -2
- package/ds-chat/DSChatCO.js +0 -8
- package/ds-chat/floatingbutton/DSChat-floating-button.visual.spec.js +1 -1
- package/ds-chip/DSChipCO.js +24 -0
- package/ds-chip/slots/DSChip.slots.axe-core.spec.js +17 -0
- package/ds-chip/slots/DSChip.slots.func.spec.js +39 -0
- package/ds-chip/slots/DSChip.slots.visual.spec.js +17 -0
- package/ds-circular-indeterminate-indicator/DSCircularIndicator.visual.spec.js +2 -1
- package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable.visual.spec.js +6 -4
- package/ds-controlled-form/ds-controlled-large-input-text/DSLargeInputTextCO.js +5 -0
- package/ds-controlled-form/ds-controlled-large-input-text/aria-disabled/DSLargeInputText.aria-disabled.func.spec.js +19 -0
- package/ds-controlled-form/ds-controlled-radio-group/DSControlledRadioGroup.axe-core.func.spec.js +31 -0
- package/ds-controlled-form/react-hook-form/ReactHook.visual.spec.js +1 -0
- package/ds-data-table-async/DSDataTableCO.js +173 -108
- package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -45
- package/ds-data-table-async/components/FilterBarCO.js +8 -0
- package/ds-data-table-async/components/FiltersCO.js +12 -0
- package/ds-data-table-async/components/HeaderCO.js +5 -0
- package/ds-data-table-async/components/PaginationNavCO.js +1 -1
- package/ds-data-table-async/date-filters/DSDataTable.date-switcher.single.func.spec.js +1 -1
- package/ds-data-table-async/date-filters/DSDataTable.date-switcher.visual.spec.js +18 -8
- package/ds-data-table-async/dnd/DSDataTable.dnd.visual.spec.js +3 -1
- package/ds-data-table-async/dnd/DSDataTable.dnd_fixed-width.visual.spec.js +33 -0
- package/ds-data-table-async/empty-state/DSDataTable.empty-state.visual.spec.js +13 -0
- package/ds-data-table-async/filters/DSDataTable.filters-creatable.func.spec.js +5 -5
- package/ds-data-table-async/filters/DSDataTable.filters-creatable.visual.spec.js +1 -0
- package/ds-data-table-async/filters/DSDataTable.filters.visual.spec.js +18 -1
- package/ds-data-table-async/filters/DSDataTable.free-text-search.keyboard.func.spec.js +242 -0
- package/ds-data-table-async/filters/DSDataTable.free-text-search.visual.spec.js +54 -0
- package/ds-data-table-async/filters/DSDataTable.text-filters.func.spec.js +3 -3
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.keyboard.func.spec.js +56 -0
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.mouse.func.spec.js +55 -0
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.visual.spec.js +27 -0
- package/ds-data-table-async/more/DSDataTable.headers.visual.spec.js +0 -63
- package/ds-data-table-async/select/DSDataTable.select.func.spec.js +1 -1
- package/ds-data-table-async/slots/DSDataTable.slots.func.spec.js +40 -0
- package/ds-data-table-async/slots/DSDataTable.slots.visual.spec.js +19 -0
- package/ds-data-table-async/sorting/DSDataTable.sorting.visual.spec.js +118 -0
- package/ds-dataviz/DSDataViz.axis.visual.spec.js +2 -1
- package/ds-dataviz/DSDataViz.scroll.visual.spec.js +1 -0
- package/ds-dataviz/DSDataViz.ticks.visual.spec.js +2 -1
- package/ds-dialog/DSDialog.cases.visual.spec.js +3 -4
- package/ds-dialog/DSDialog.visual.spec.js +7 -14
- package/ds-dialog/DSDialogCO.js +5 -13
- package/ds-dialog/axe-core/DSDialog.error.axe-core.func.spec.js +24 -0
- package/ds-dialog/axe-core/DSDialog.info.axe-core.func.spec.js +24 -0
- package/ds-dialog/axe-core/DSDialog.scroll-body.axe-core.func.spec.js +24 -0
- package/ds-dialog/axe-core/DSDialog.success.axe-core.func.spec.js +24 -0
- package/ds-dialog/axe-core/DSDialog.warning.axe-core.spec.func.js +24 -0
- package/ds-dropdownmenu-v2/DSDDMenuV2.visual.spec.js +5 -5
- package/ds-form-combobox-multi/DSComboboxMultiCO.js +96 -1
- package/ds-form-combobox-multi/aria-disabled/DSComboboxMulti.aria-disabled.visual.spec.js +7 -3
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.mouse.func.spec.js +25 -0
- package/ds-form-combobox-multi/menu-position/DSComboboxMulti.menu-position.visual.spec.js +42 -0
- package/ds-form-combobox-multi/slots/DSComboboxMulti.slots.func.spec.js +100 -0
- package/ds-form-combobox-multi/slots/DSComboboxMulti.slots.visual.spec.js +51 -0
- package/ds-form-combobox-single/DSComboboxSingleCO.js +97 -1
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.mouse.func.spec.js +25 -0
- package/ds-form-combobox-single/menu-position/DSComboboxSingle.menu-position.visual.spec.js +93 -0
- package/ds-form-combobox-single/slots/DSComboboxSingle.slots.func.spec.js +100 -0
- package/ds-form-combobox-single/slots/DSComboboxSingle.slots.visual.spec.js +53 -0
- package/ds-form-date-range-picker/aria-disabled/DateRangePicker.applyAriaDisabled.keyboard-nav.func.spec.js +31 -5
- package/ds-form-date-time-picker/DSControlledDateTimePickerCO.js +7 -5
- package/ds-form-date-time-picker/date-input/DateInput.keyboard-nav.func.spec.js +2 -2
- package/ds-form-date-time-picker/date-time-full/DateTimeFull.applyAriaDisabled.axe-core.func.spec.js +1 -1
- package/ds-form-date-time-picker/date-time-full/DateTimeFull.axe-core.func.spec.js +25 -0
- package/ds-form-date-time-picker/date-time-full/DateTimePicker.applyAriaDisabled.keyboard-nav.func.spec.js +6 -1
- package/ds-form-date-time-picker/date-time-full/DateTimePicker.func.spec.js +32 -2
- package/ds-form-date-time-picker/date-time-full/DateTimePicker.keyboard-nav.func.spec.js +6 -1
- package/ds-form-date-time-picker/date-time-full/DateTimePicker.readOnly.keyboard-nav.func.spec.js +6 -1
- package/ds-form-date-time-picker/date-time-input/DateTimeInput.applyAriaDisabled.keyboard-nav.func.spec.js +40 -4
- package/ds-form-date-time-picker/showcase/DateTimePicker.applyAriaDisabled-showcase.visual.spec.js +2 -2
- package/ds-form-date-time-picker/showcase/DateTimePicker.readOnly-showcase.visual.spec.js +2 -2
- package/ds-form-layout-blocks/form-layout-block-item/DSFormLayoutBlockItem.axe-core.func.spec.js +4 -1
- package/ds-form-layout-blocks/form-layout-block-item/DSFormLayoutBlockItemCO.js +4 -0
- package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +57 -0
- package/ds-form-native-select/NativeSelectCO.js +35 -0
- package/{ds-toggle → ds-form-toggle}/DSToggle.axe-core.func.spec.js +6 -2
- package/{ds-toggle → ds-form-toggle}/DSToggle.func.spec.js +13 -8
- package/{ds-toggle → ds-form-toggle}/DSToggle.visual.spec.js +2 -2
- package/{ds-toggle → ds-form-toggle}/DSToggleCO.js +1 -1
- package/ds-global-header/GlobalHeader.axe-core.func.spec.js +13 -0
- package/ds-global-header/GlobalHeaderCO.js +2 -0
- package/{ds-controlled-form → ds-hooks}/useMask/Number/UseNumberMask.func.spec.js +25 -12
- package/{ds-controlled-form → ds-hooks}/useMask/Number/UseNumberMask.visual.spec.js +4 -1
- package/{ds-controlled-form → ds-hooks}/useMask/Phone/UsePhoneMask.func.spec.js +1 -1
- package/{ds-controlled-form → ds-hooks}/useMask/Phone/UsePhoneMask.visual.spec.js +1 -1
- package/{ds-controlled-form → ds-hooks}/useMask/ReackHookFormWithMask/ReactHookFormWithMask.func.spec.js +1 -1
- package/{ds-controlled-form → ds-hooks}/useMask/ReackHookFormWithMask/ReactHookFormWithMask.visual.spec.js +1 -1
- package/{ds-controlled-form → ds-hooks}/useMask/RegExp/UseRegExpMask.func.spec.js +1 -1
- package/{ds-controlled-form → ds-hooks}/useMask/SSN/UseSsnMask.func.spec.js +1 -1
- package/{ds-controlled-form → ds-hooks}/useMask/ZipCode/UseZipCodeMask.func.spec.js +1 -1
- package/ds-indeterminate-progress-indicator/DSIndetermintateProgressIndicator.axe-core.func.spec.js +31 -0
- package/ds-menu-button/DSMenuButtonCO.js +2 -0
- package/ds-menu-button/basic/DSMenuButton.basic.func.spec.js +28 -0
- package/ds-menu-button/multiselect/DSMenuButton.axe-core.multiselect.func.spec.js +6 -1
- package/ds-menu-button/singleSelect/DSMenuButton.axe-core.singleSelect.func.spec.js +6 -1
- package/ds-menu-button/submenu/DSMenuButton.axe-core.subMenu.func.spec.js +7 -2
- package/ds-menu-item/DSMenuItems.visual.spec.js +8 -32
- package/ds-mobile/MobileDatePicker/MobileDatePicker.visual.spec.js +0 -13
- package/ds-modal-slide/ModalSlideCO.js +2 -0
- package/ds-notification-badge/DSNotificationBadge.axe-core.func.spec.js +1 -1
- package/ds-pagination/DSPagination.axe-core.func.spec.js +64 -0
- package/ds-pagination/DSPaginationCO.js +12 -0
- package/ds-pills-v2/DSPills.visual.spec.js +3 -1
- package/ds-pills-v2/selection/DSPills.axe-core.func.spec.js +6 -1
- package/ds-pills-v2/selection/DSPills.func.spec.js +32 -30
- package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +31 -0
- package/ds-progress-indicator/DSProgressIndicator.func.spec.js +8 -3
- package/ds-progress-indicator/DSProgressIndicator.visual.spec.js +12 -2
- package/ds-progress-indicator/DSProgressIndicatorCO.js +5 -3
- package/ds-query-builder/DSQueryBuilder.visual.spec.js +10 -3
- package/ds-read-more/DSReadMore.func.spec.js +0 -58
- package/ds-read-more/DSReadMore.keyboard-nav.func.spec.js +66 -0
- package/ds-read-more/DSReadMore.slots.func.spec.js +58 -0
- package/ds-read-more/DSReadMore.slots.visual.spec.js +23 -0
- package/ds-read-more/DSReadMore.visual.spec.js +41 -17
- package/ds-read-more/DSReadMore.width-change.visual.spec.js +85 -0
- package/ds-read-more/DSReadMore.with-tooltip.func.spec.js +63 -0
- package/ds-read-more/DSReadMoreCO.js +20 -0
- package/ds-shuttle-v2/Dnd/DSShuttleV2.DnD.visual.spec.js +3 -0
- package/ds-shuttle-v2/basic/DSShuttleV2.keyboard.func.spec.js +0 -79
- package/ds-shuttle-v2/extra/DSShuttleV2.extra.func.spec.js +6 -2
- package/ds-shuttle-v2/extra/DSShuttleV2.extra.visual.spec.js +21 -0
- package/ds-shuttle-v2/filtering/DSShuttleV2.filter.func.spec.js +8 -3
- package/ds-shuttle-v2/filtering/DSShuttleV2.filter.kb.func.spec.js +43 -0
- package/ds-shuttle-v2/items/DSShuttleV2.items.func.spec.js +3 -2
- package/ds-shuttle-v2/items/DSShuttleV2.items.kb.func.spec.js +1 -1
- package/ds-shuttle-v2/load-more/DSShuttleV2.load-more.keyboard.func.spec.js +61 -0
- package/ds-slider-v2/DSSliderV2.extra.func.spec.js +44 -0
- package/ds-slider-v2/DSSliderV2.func.spec.js +98 -0
- package/ds-slider-v2/DSSliderV2CO.js +8 -0
- package/ds-svg/DSSvg.axe-core.func.spec.js +32 -0
- package/ds-svg/DSSvgCO.js +2 -3
- package/ds-tabs/DSTabs.onTabChange.func.spec.js +33 -0
- package/ds-tabs/DSTabsCO.js +29 -1
- package/ds-tabs/slots/DSTabs.slots.func.spec.js +77 -0
- package/ds-tabs/slots/DSTabs.slots.visual.spec.js +49 -0
- package/ds-tabs/with-carousel/DSTabs.with-carousel.visual.spec.js +5 -4
- package/ds-tooltip-v3/DSTooltipV3CO.js +6 -2
- package/ds-treeview/DSTreeViewCO.js +8 -0
- package/ds-treeview/dragAndDrop/TreeView-dnd.func.spec.js +0 -50
- package/ds-treeview/dragAndDrop/TreeView-dnd_mouse.func.spec.js +61 -0
- package/package.json +188 -187
- package/paths.js +17 -1
- package/ds-dialog/DSDialog.smoke.spec.js +0 -133
- package/ds-slider-v2/DSSliderV2.skipped.js +0 -46
- /package/ds-form-combobox-multi/iframe/{DSComboboxMulti.insideIframe.func.spec.js → DSComboboxMulti.insideIframe.visual.spec.js} +0 -0
- /package/{ds-controlled-form → ds-hooks}/useMask/useMaskCO.js +0 -0
- /package/ds-indeterminate-progress-indicator/{DSIndetermintateProgressIndicator.func.spec.js → DSIndetermintateProgressIndicator.func.spec copy.js} +0 -0
|
@@ -46,4 +46,17 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
46
46
|
await expect(snapshot).toEqual(0);
|
|
47
47
|
});
|
|
48
48
|
});
|
|
49
|
+
describe('PUI-16584 - DataTable:: skeleton and No results - Visual Test', async () => {
|
|
50
|
+
before('loading page', async () => {
|
|
51
|
+
const errorOnGo = await DSDataTableCO.pui16461SkeletonAndNoResults.go();
|
|
52
|
+
if (errorOnGo) throw errorOnGo;
|
|
53
|
+
await DSDataTableCO.waitForDataTable();
|
|
54
|
+
});
|
|
55
|
+
it('01: should correctly display the data table empty state after skeleton animation finished', async () => {
|
|
56
|
+
const emptyStateWrapper = await DSDataTableCO.getDataTableEmptyStateWrapper();
|
|
57
|
+
await emptyStateWrapper.waitForDisplayed({ timeout: 5000 });
|
|
58
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('skeleton-empty-state'));
|
|
59
|
+
await expect(snapshot).toEqual(0);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
49
62
|
}
|
|
@@ -9,7 +9,7 @@ import DSComboboxCO from '../../ds-controlled-form/ds-combobox/DSComboboxCO';
|
|
|
9
9
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
10
10
|
describe('PUI-9203 - DataTable, Filter, Creatable single select filter', () => {
|
|
11
11
|
before('loading page', async () => {
|
|
12
|
-
const errorOnGo = await DSDataTableCO.
|
|
12
|
+
const errorOnGo = await DSDataTableCO.filterCreatableMulti.go();
|
|
13
13
|
if (errorOnGo) throw errorOnGo;
|
|
14
14
|
await DSDataTableCO.waitForDataTable();
|
|
15
15
|
});
|
|
@@ -40,14 +40,14 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
40
40
|
await type('John');
|
|
41
41
|
await browser.keys(Key.Enter);
|
|
42
42
|
const results = await RowCO.getRows();
|
|
43
|
-
const filteredNames = await DSDataTableCO.getAllColumnResults(results,
|
|
43
|
+
const filteredNames = await DSDataTableCO.getAllColumnResults(results, 2);
|
|
44
44
|
const isFiltered = filteredNames.every((name) => name.toLowerCase() === 'john');
|
|
45
45
|
await expect(isFiltered).toBeTruthy();
|
|
46
46
|
});
|
|
47
47
|
});
|
|
48
48
|
describe('PUI-9204 - DataTable, Filter, Creatable multi select filter', () => {
|
|
49
49
|
before('loading page', async () => {
|
|
50
|
-
const errorOnGo = await DSDataTableCO.
|
|
50
|
+
const errorOnGo = await DSDataTableCO.filterCreatableMulti.go();
|
|
51
51
|
if (errorOnGo) throw errorOnGo;
|
|
52
52
|
await DSDataTableCO.waitForDataTable();
|
|
53
53
|
});
|
|
@@ -78,14 +78,14 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
78
78
|
await browser.keys(Key.ArrowDown);
|
|
79
79
|
await browser.keys(Key.Enter);
|
|
80
80
|
const results = await RowCO.getRows();
|
|
81
|
-
const filteredNames = await DSDataTableCO.getAllColumnResults(results,
|
|
81
|
+
const filteredNames = await DSDataTableCO.getAllColumnResults(results, 3);
|
|
82
82
|
const isFiltered = filteredNames.every((position) => position.toLowerCase() === 'react dev');
|
|
83
83
|
await expect(isFiltered).toBeTruthy();
|
|
84
84
|
});
|
|
85
85
|
});
|
|
86
86
|
describe('PUI-11241 - DataTable, Filter, Creatable multi select filter and focus interaction', () => {
|
|
87
87
|
before('loading page', async () => {
|
|
88
|
-
const errorOnGo = await DSDataTableCO.
|
|
88
|
+
const errorOnGo = await DSDataTableCO.filterCreatableMulti.go();
|
|
89
89
|
if (errorOnGo) throw errorOnGo;
|
|
90
90
|
await DSDataTableCO.waitForDataTable();
|
|
91
91
|
});
|
|
@@ -12,6 +12,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
12
12
|
const errorOnGo = await DSDataTableCO.filteredCreatable.go();
|
|
13
13
|
if (errorOnGo) throw errorOnGo;
|
|
14
14
|
await DSDataTableCO.waitForDataTable();
|
|
15
|
+
await browser.maximizeWindow();
|
|
15
16
|
});
|
|
16
17
|
it('01: should open the popup and focus the text input', async () => {
|
|
17
18
|
await browser.eyesOpen();
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/* eslint-disable max-lines */
|
|
5
5
|
import { Key } from 'webdriverio';
|
|
6
6
|
import DSDataTableCO from '../DSDataTableCO';
|
|
7
|
-
import { FiltersCO, FilterBarCO } from '../components';
|
|
7
|
+
import { FiltersCO, FilterBarCO, HeaderCO } from '../components';
|
|
8
8
|
import { type } from '../../helpers';
|
|
9
9
|
import DSComboboxCO from '../../ds-controlled-form/ds-combobox/DSComboboxCO';
|
|
10
10
|
|
|
@@ -186,4 +186,21 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
186
186
|
await expect(snapshot).toEqual(0);
|
|
187
187
|
});
|
|
188
188
|
});
|
|
189
|
+
|
|
190
|
+
describe('PUI-17182 - DataTable: Filterbar:: Filter not to collapse with fixed width - Visual Test', async () => {
|
|
191
|
+
before('loading page', async () => {
|
|
192
|
+
const errorOnGo = await DSDataTableCO.filterWidthCollapse.go();
|
|
193
|
+
if (errorOnGo) throw errorOnGo;
|
|
194
|
+
await DSDataTableCO.waitForDataTable();
|
|
195
|
+
});
|
|
196
|
+
it('01: number range filter popover should be correctly displayed', async () => {
|
|
197
|
+
await browser.eyesOpen();
|
|
198
|
+
const filterHeader = await HeaderCO.getHeaderCellByIndex(8);
|
|
199
|
+
await filterHeader.scrollIntoView();
|
|
200
|
+
await FiltersCO.openFilterPopperByColumnName('number range');
|
|
201
|
+
await browser.keys('3');
|
|
202
|
+
const snapshot = await browser.eyesCheckSnapshot(DSDataTableCO.snapshotPath('filter-number-range-width-collase'));
|
|
203
|
+
await expect(snapshot).toEqual(0);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
189
206
|
}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/* eslint-disable max-statements */
|
|
2
|
+
/* eslint-env mocha */
|
|
3
|
+
/* eslint-disable max-lines */
|
|
4
|
+
import { Key } from 'webdriverio';
|
|
5
|
+
import DSDataTableCO from '../DSDataTableCO';
|
|
6
|
+
import { FilterBarCO, FiltersCO, HeaderCO, RowCO } from '../components';
|
|
7
|
+
import { type } from '../../helpers';
|
|
8
|
+
|
|
9
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
10
|
+
describe('PUI-17113 - [DataTable] FreeTextSearch - input retain previous value - functional', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSDataTableCO.freeTextSearchFilter.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
await DSDataTableCO.waitForDataTable();
|
|
15
|
+
});
|
|
16
|
+
it('01: should open the free text search filter popover and focus the input', async () => {
|
|
17
|
+
await browser.keys(Key.Tab);
|
|
18
|
+
await browser.keys(Key.Tab);
|
|
19
|
+
await browser.keys(Key.Return);
|
|
20
|
+
await browser.keys(Key.Return);
|
|
21
|
+
const freeTextPopover = await FiltersCO.getFilterPopoverContent();
|
|
22
|
+
const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
|
|
23
|
+
await expect(freeTextPopover).toBeDisplayedInViewport();
|
|
24
|
+
await expect(freeTextSearchInput).toBeFocused();
|
|
25
|
+
});
|
|
26
|
+
it('02: should allow typing in the input without autofiltering', async () => {
|
|
27
|
+
await type('j');
|
|
28
|
+
const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
|
|
29
|
+
const inputValue = await freeTextSearchInput.getValue();
|
|
30
|
+
const results = await RowCO.getRows();
|
|
31
|
+
const filteredNames = await DSDataTableCO.getAllColumnResults(results, 1);
|
|
32
|
+
const isNotFiltered = filteredNames.some((name) => name.toLowerCase() === 'francisco');
|
|
33
|
+
await expect(inputValue).toEqual('j');
|
|
34
|
+
await expect(isNotFiltered).toEqual(true);
|
|
35
|
+
});
|
|
36
|
+
it('03: should apply the filter after pressing Enter', async () => {
|
|
37
|
+
await type('ohn j');
|
|
38
|
+
await browser.keys(Key.Return);
|
|
39
|
+
const FirstNameColumnHeader = await HeaderCO.getHeaderCellByIndex(1);
|
|
40
|
+
const buttonFirstNameColumn = await FiltersCO.getHeaderCellFilterButtonByHeaderCell(FirstNameColumnHeader, 0);
|
|
41
|
+
const results = await RowCO.getRows();
|
|
42
|
+
const filteredNames = await DSDataTableCO.getAllColumnResults(results, 1);
|
|
43
|
+
const isFiltered = filteredNames.every((name) => name.toLowerCase() === 'john johnson');
|
|
44
|
+
const pill1 = await FilterBarCO.getPillByText('john j');
|
|
45
|
+
await expect(buttonFirstNameColumn).toBeFocused();
|
|
46
|
+
await expect(isFiltered).toEqual(true);
|
|
47
|
+
await expect(pill1).toBeDisplayed();
|
|
48
|
+
});
|
|
49
|
+
it('04: should retain the previous filter value', async () => {
|
|
50
|
+
await browser.keys(Key.Return);
|
|
51
|
+
const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
|
|
52
|
+
const inputValue = await freeTextSearchInput.getValue();
|
|
53
|
+
await expect(inputValue).toEqual('john j');
|
|
54
|
+
});
|
|
55
|
+
it('05: should apply a new filter', async () => {
|
|
56
|
+
await browser.keys(Key.Backspace);
|
|
57
|
+
await browser.keys(Key.Return);
|
|
58
|
+
const FirstNameColumnHeader = await HeaderCO.getHeaderCellByIndex(1);
|
|
59
|
+
const buttonFirstNameColumn = await FiltersCO.getHeaderCellFilterButtonByHeaderCell(FirstNameColumnHeader, 0);
|
|
60
|
+
const results = await RowCO.getRows();
|
|
61
|
+
const filteredNames = await DSDataTableCO.getAllColumnResults(results, 1);
|
|
62
|
+
const isFilteredJWick = filteredNames.some((name) => name.toLowerCase() === 'john wick');
|
|
63
|
+
const isFilteredJJ = filteredNames.some((name) => name.toLowerCase() === 'john wick');
|
|
64
|
+
const pill1 = await FilterBarCO.getPillByText('john ');
|
|
65
|
+
await expect(buttonFirstNameColumn).toBeFocused();
|
|
66
|
+
await expect(isFilteredJWick).toEqual(true);
|
|
67
|
+
await expect(isFilteredJJ).toEqual(true);
|
|
68
|
+
await expect(pill1).toBeDisplayed();
|
|
69
|
+
});
|
|
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 () => {
|
|
107
|
+
await browser.keys(Key.Return);
|
|
108
|
+
const freeTextPopover = await FiltersCO.getFilterPopoverContent();
|
|
109
|
+
await freeTextPopover.waitForDisplayed();
|
|
110
|
+
await browser.keys(Key.Escape);
|
|
111
|
+
const FirstNameColumnHeader = await HeaderCO.getHeaderCellByIndex(1);
|
|
112
|
+
const buttonFirstNameColumn = await FiltersCO.getHeaderCellFilterButtonByHeaderCell(FirstNameColumnHeader, 0);
|
|
113
|
+
await expect(freeTextPopover).not.toBeDisplayed();
|
|
114
|
+
await expect(buttonFirstNameColumn).toBeFocused();
|
|
115
|
+
});
|
|
116
|
+
it('09: should display "no results found" when no matching rows are found', async () => {
|
|
117
|
+
await browser.keys(Key.Return);
|
|
118
|
+
await type('this is a test');
|
|
119
|
+
await browser.keys(Key.Return);
|
|
120
|
+
const noResults = await DSDataTableCO.getDataTableEmptyStateWrapper();
|
|
121
|
+
const FirstNameColumnHeader = await HeaderCO.getHeaderCellByIndex(1);
|
|
122
|
+
const buttonFirstNameColumn = await FiltersCO.getHeaderCellFilterButtonByHeaderCell(FirstNameColumnHeader, 0);
|
|
123
|
+
const pill1 = await FilterBarCO.getPillByText('this is a test');
|
|
124
|
+
await expect(noResults).toBeDisplayedInViewport();
|
|
125
|
+
await expect(buttonFirstNameColumn).toBeFocused();
|
|
126
|
+
await expect(pill1).toBeDisplayed();
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe("PUI-17114 - [DataTable] FreeTextSearch - input doesn't retain previous value - functional", () => {
|
|
130
|
+
before('loading page', async () => {
|
|
131
|
+
const errorOnGo = await DSDataTableCO.freeTextSearchFilter.go();
|
|
132
|
+
if (errorOnGo) throw errorOnGo;
|
|
133
|
+
await DSDataTableCO.waitForDataTable();
|
|
134
|
+
});
|
|
135
|
+
it('01: should open the free text search filter popover and focus the input', async () => {
|
|
136
|
+
await browser.keys(Key.Tab);
|
|
137
|
+
await browser.keys(Key.Tab);
|
|
138
|
+
await browser.keys(Key.Tab);
|
|
139
|
+
await browser.keys(Key.Return);
|
|
140
|
+
await browser.keys(Key.Return);
|
|
141
|
+
const freeTextPopover = await FiltersCO.getFilterPopoverContent();
|
|
142
|
+
const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
|
|
143
|
+
await expect(freeTextPopover).toBeDisplayedInViewport();
|
|
144
|
+
await expect(freeTextSearchInput).toBeFocused();
|
|
145
|
+
});
|
|
146
|
+
it('02: should allow typing in the input without autofiltering', async () => {
|
|
147
|
+
await type('m');
|
|
148
|
+
const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
|
|
149
|
+
const inputValue = await freeTextSearchInput.getValue();
|
|
150
|
+
const results = await RowCO.getRows();
|
|
151
|
+
const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
|
|
152
|
+
const isNotFiltered = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
|
|
153
|
+
await expect(inputValue).toEqual('m');
|
|
154
|
+
await expect(isNotFiltered).toEqual(true);
|
|
155
|
+
});
|
|
156
|
+
it('03: should apply the filter after pressing Enter', async () => {
|
|
157
|
+
await type('a');
|
|
158
|
+
await browser.keys(Key.Return);
|
|
159
|
+
const LastNameColumnHeader = await HeaderCO.getHeaderCellByIndex(2);
|
|
160
|
+
const buttonLastNameColumn = await FiltersCO.getHeaderCellFilterButtonByHeaderCell(LastNameColumnHeader, 0);
|
|
161
|
+
const results = await RowCO.getRows();
|
|
162
|
+
const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
|
|
163
|
+
const isFiltered = filteredLastNames.every((name) => name.toLowerCase() === 'maria');
|
|
164
|
+
const pill1 = await FilterBarCO.getPillByText('ma');
|
|
165
|
+
await expect(buttonLastNameColumn).toBeFocused();
|
|
166
|
+
await expect(isFiltered).toEqual(true);
|
|
167
|
+
await expect(pill1).toBeDisplayed();
|
|
168
|
+
});
|
|
169
|
+
it('04: should do not retain the previous filter value', async () => {
|
|
170
|
+
await browser.keys(Key.Return);
|
|
171
|
+
const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
|
|
172
|
+
const inputValue = await freeTextSearchInput.getValue();
|
|
173
|
+
await expect(inputValue).toEqual('');
|
|
174
|
+
});
|
|
175
|
+
it('05: should apply a new filter', async () => {
|
|
176
|
+
await type('j');
|
|
177
|
+
await browser.keys(Key.Return);
|
|
178
|
+
const LastNameColumnHeader = await HeaderCO.getHeaderCellByIndex(2);
|
|
179
|
+
const buttonLastNameColumn = await FiltersCO.getHeaderCellFilterButtonByHeaderCell(LastNameColumnHeader, 0);
|
|
180
|
+
const results = await RowCO.getRows();
|
|
181
|
+
const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
|
|
182
|
+
const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
|
|
183
|
+
const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
|
|
184
|
+
const pill1 = await FilterBarCO.getPillByText('j');
|
|
185
|
+
await expect(buttonLastNameColumn).toBeFocused();
|
|
186
|
+
await expect(isFilteredJWick).toEqual(true);
|
|
187
|
+
await expect(isFilteredJJ).toEqual(true);
|
|
188
|
+
await expect(pill1).toBeDisplayed();
|
|
189
|
+
});
|
|
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 () => {
|
|
220
|
+
await browser.keys(Key.Return);
|
|
221
|
+
const freeTextPopover = await FiltersCO.getFilterPopoverContent();
|
|
222
|
+
await freeTextPopover.waitForDisplayed();
|
|
223
|
+
await browser.keys(Key.Escape);
|
|
224
|
+
const LastNameColumnHeader = await HeaderCO.getHeaderCellByIndex(2);
|
|
225
|
+
const buttonLastNameColumn = await FiltersCO.getHeaderCellFilterButtonByHeaderCell(LastNameColumnHeader, 0);
|
|
226
|
+
await expect(freeTextPopover).not.toBeDisplayed();
|
|
227
|
+
await expect(buttonLastNameColumn).toBeFocused();
|
|
228
|
+
});
|
|
229
|
+
it('09: should display "no results found" when no matching rows are found', async () => {
|
|
230
|
+
await browser.keys(Key.Return);
|
|
231
|
+
await type('this is a test');
|
|
232
|
+
await browser.keys(Key.Return);
|
|
233
|
+
const noResults = await DSDataTableCO.getDataTableEmptyStateWrapper();
|
|
234
|
+
const LastNameColumnHeader = await HeaderCO.getHeaderCellByIndex(2);
|
|
235
|
+
const buttonLastNameColumn = await FiltersCO.getHeaderCellFilterButtonByHeaderCell(LastNameColumnHeader, 0);
|
|
236
|
+
const pill1 = await FilterBarCO.getPillByText('this is a test');
|
|
237
|
+
await expect(noResults).toBeDisplayedInViewport();
|
|
238
|
+
await expect(buttonLastNameColumn).toBeFocused();
|
|
239
|
+
await expect(pill1).toBeDisplayed();
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import DSDataTableCO from '../DSDataTableCO';
|
|
2
|
+
import { FiltersCO, FilterBarCO } from '../components';
|
|
3
|
+
import { type } from '../../helpers';
|
|
4
|
+
|
|
5
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
+
describe('PUI-17255 - DataTable:: FreeTextSearch Integration - Visual Test', () => {
|
|
7
|
+
before('loading page', async () => {
|
|
8
|
+
const errorOnGo = await DSDataTableCO.integratedExampleWithFilters.go();
|
|
9
|
+
if (errorOnGo) throw errorOnGo;
|
|
10
|
+
await DSDataTableCO.waitForDataTable();
|
|
11
|
+
});
|
|
12
|
+
it('01: should display freeTextSearch opened', async () => {
|
|
13
|
+
await FiltersCO.openFilterPopperByColumnName('messages');
|
|
14
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('free-text-search-opened'));
|
|
15
|
+
await expect(snapshot).toEqual(0);
|
|
16
|
+
});
|
|
17
|
+
it('02: should display the value typed in the freeTextSearch', async () => {
|
|
18
|
+
await type('random');
|
|
19
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('free-text-search-typed'));
|
|
20
|
+
await expect(snapshot).toEqual(0);
|
|
21
|
+
});
|
|
22
|
+
it('03: should display the search results', async () => {
|
|
23
|
+
await browser.keys('Return');
|
|
24
|
+
const pill1 = await FilterBarCO.getPillByText('Messages');
|
|
25
|
+
await expect(pill1).toBeDisplayed();
|
|
26
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('free-text-search-results'));
|
|
27
|
+
await expect(snapshot).toEqual(0);
|
|
28
|
+
});
|
|
29
|
+
it('04: should display the search results for second free text search', async () => {
|
|
30
|
+
await FiltersCO.openFilterPopperByColumnName('borrower name');
|
|
31
|
+
await type('Ron');
|
|
32
|
+
await browser.keys('Return');
|
|
33
|
+
const pill2 = await FilterBarCO.getPillByText('Borrower Name');
|
|
34
|
+
await expect(pill2).toBeDisplayed();
|
|
35
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('free-text-search-results-two-filters'));
|
|
36
|
+
await expect(snapshot).toEqual(0);
|
|
37
|
+
});
|
|
38
|
+
it('05: should display the last typed value in the filter', async () => {
|
|
39
|
+
await FiltersCO.openFilterPopperByColumnName('borrower name');
|
|
40
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('free-text-search-retain-value'));
|
|
41
|
+
await expect(snapshot).toEqual(0);
|
|
42
|
+
});
|
|
43
|
+
it('06: should search a new value', async () => {
|
|
44
|
+
await FiltersCO.openFilterPopperByColumnName('borrower name');
|
|
45
|
+
await browser.keys('Backspace');
|
|
46
|
+
await browser.keys('Backspace');
|
|
47
|
+
await browser.keys('Backspace');
|
|
48
|
+
await type('Harry');
|
|
49
|
+
await browser.keys('Return');
|
|
50
|
+
const snapshot = await browser.checkSnapshot(DSDataTableCO.snapshotPath('free-text-search-new-value'));
|
|
51
|
+
await expect(snapshot).toEqual(0);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
@@ -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.
|
|
251
|
+
const filterBarMenu = await FilterBarCO.getFilterBarMenuListBox();
|
|
252
252
|
await filterBarMenu.waitForDisplayed();
|
|
253
|
-
const clearFilters = await FilterBarCO.
|
|
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.
|
|
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();
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSDataTableCO from '../DSDataTableCO';
|
|
3
|
+
import DSMenuButtonCO from '../../ds-menu-button/DSMenuButtonCO';
|
|
4
|
+
|
|
5
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
+
describe('PUI-16414 - DataTable, MenuButton (keyboard) - Functional Test', async () => {
|
|
7
|
+
before('loading page', async () => {
|
|
8
|
+
const errorOnGo = await DSDataTableCO.withMenuButton.go();
|
|
9
|
+
if (errorOnGo) throw errorOnGo;
|
|
10
|
+
await DSDataTableCO.waitForDataTable();
|
|
11
|
+
});
|
|
12
|
+
it('01: should focus menuTrigger with keyboard', async () => {
|
|
13
|
+
await browser.keys(Key.Tab);
|
|
14
|
+
await browser.keys(Key.Tab);
|
|
15
|
+
await browser.keys(Key.Tab);
|
|
16
|
+
await browser.keys(Key.Tab);
|
|
17
|
+
await browser.keys(Key.Return);
|
|
18
|
+
const menuButtonTrigger = await DSDataTableCO.getButtons(0);
|
|
19
|
+
await expect(menuButtonTrigger).toBeFocused();
|
|
20
|
+
});
|
|
21
|
+
it('02: should expand menuButton for datatable row with keyboard', async () => {
|
|
22
|
+
await browser.keys(Key.Return);
|
|
23
|
+
const submenuTriggerItem = await DSMenuButtonCO.getMenuItemWrapper(1);
|
|
24
|
+
const menuItems = (await DSMenuButtonCO.getMenuItems()).length;
|
|
25
|
+
await expect(menuItems).toEqual(5);
|
|
26
|
+
await expect(submenuTriggerItem).toBeDisplayedInViewport();
|
|
27
|
+
});
|
|
28
|
+
it('03: should trigger menuButton item with keyboard', async () => {
|
|
29
|
+
await browser.keys(Key.ArrowUp);
|
|
30
|
+
await browser.keys(Key.Return);
|
|
31
|
+
const alertText = await browser.getAlertText();
|
|
32
|
+
await expect(alertText).toEqual('item selected: log actions - undefined');
|
|
33
|
+
});
|
|
34
|
+
it('03: should expand menuButton submenu for datatable row with keyboard', async () => {
|
|
35
|
+
await browser.dismissAlert();
|
|
36
|
+
await browser.keys(Key.Return);
|
|
37
|
+
await browser.keys(Key.ArrowDown);
|
|
38
|
+
const menuItems = (await DSMenuButtonCO.getMenuItems()).length;
|
|
39
|
+
await expect(menuItems).toEqual(6);
|
|
40
|
+
});
|
|
41
|
+
it('04: should trigger menuButton submenu item with keyboard', async () => {
|
|
42
|
+
await browser.keys(Key.ArrowRight);
|
|
43
|
+
await browser.keys(Key.Return);
|
|
44
|
+
const alertText = await browser.getAlertText();
|
|
45
|
+
await expect(alertText).toEqual('item selected: Realtor Phone - (424) 000-0000');
|
|
46
|
+
});
|
|
47
|
+
it('05: should close menuButton menu with keyboard', async () => {
|
|
48
|
+
await browser.dismissAlert();
|
|
49
|
+
await browser.keys(Key.Return);
|
|
50
|
+
const menu = await DSMenuButtonCO.getMenuRoot();
|
|
51
|
+
await menu.waitForDisplayed();
|
|
52
|
+
await browser.keys(Key.Escape);
|
|
53
|
+
await expect(menu).not.toBeDisplayedInViewport();
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import DSDataTableCO from '../DSDataTableCO';
|
|
2
|
+
import { mouseOver } from '../../helpers';
|
|
3
|
+
import CellCO from '../components/CellCO';
|
|
4
|
+
import DSMenuButtonCO from '../../ds-menu-button/DSMenuButtonCO';
|
|
5
|
+
|
|
6
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
7
|
+
describe('PUI-16413 - DataTable, MenuButton (mouse) - Functional Test', async () => {
|
|
8
|
+
before('loading page', async () => {
|
|
9
|
+
const errorOnGo = await DSDataTableCO.withMenuButton.go();
|
|
10
|
+
if (errorOnGo) throw errorOnGo;
|
|
11
|
+
await DSDataTableCO.waitForDataTable();
|
|
12
|
+
});
|
|
13
|
+
it('01: should expand menuButton for datatable row', async () => {
|
|
14
|
+
const menuButtonTrigger = await DSDataTableCO.getButtons(2);
|
|
15
|
+
await menuButtonTrigger.click();
|
|
16
|
+
const submenuTriggerItem = await DSMenuButtonCO.getMenuItemWrapper(1);
|
|
17
|
+
const menuItems = (await DSMenuButtonCO.getMenuItems()).length;
|
|
18
|
+
await expect(menuItems).toEqual(5);
|
|
19
|
+
await expect(submenuTriggerItem).toBeDisplayedInViewport();
|
|
20
|
+
});
|
|
21
|
+
it('02: should trigger menuButton item', async () => {
|
|
22
|
+
const thirdItem = await DSMenuButtonCO.getMenuItemWrapper(2);
|
|
23
|
+
await thirdItem.click();
|
|
24
|
+
const alertText = await browser.getAlertText();
|
|
25
|
+
await expect(alertText).toEqual('item selected: sms - undefined');
|
|
26
|
+
});
|
|
27
|
+
it('03: should expand menuButton submenu for datatable row', async () => {
|
|
28
|
+
await browser.dismissAlert();
|
|
29
|
+
const menuButtonTrigger = await DSDataTableCO.getButtons(2);
|
|
30
|
+
await menuButtonTrigger.click();
|
|
31
|
+
const submenuTriggerItem = await DSMenuButtonCO.getMenuItemWrapper(1);
|
|
32
|
+
await submenuTriggerItem.waitForDisplayed();
|
|
33
|
+
await mouseOver(submenuTriggerItem);
|
|
34
|
+
const menuItems = (await DSMenuButtonCO.getMenuItems()).length;
|
|
35
|
+
await expect(menuItems).toEqual(8);
|
|
36
|
+
await expect(submenuTriggerItem).toBeDisplayedInViewport();
|
|
37
|
+
});
|
|
38
|
+
it('04: should trigger menuButton submenu item', async () => {
|
|
39
|
+
const submenuItem = await DSMenuButtonCO.getMenuItemWrapper(5);
|
|
40
|
+
await submenuItem.click();
|
|
41
|
+
const alertText = await browser.getAlertText();
|
|
42
|
+
await expect(alertText).toEqual('item selected: Realtor Phone - (424) 000-0000');
|
|
43
|
+
});
|
|
44
|
+
it('05: should close menuButton flyout clicking outside the menu (cell for example)', async () => {
|
|
45
|
+
await browser.dismissAlert();
|
|
46
|
+
const menuButtonTrigger = await DSDataTableCO.getButtons(2);
|
|
47
|
+
await menuButtonTrigger.click();
|
|
48
|
+
const menu = await DSMenuButtonCO.getMenuRoot();
|
|
49
|
+
await menu.waitForDisplayed();
|
|
50
|
+
const datatableCell = await CellCO.getCellByIndex(1);
|
|
51
|
+
await datatableCell.click();
|
|
52
|
+
await expect(menu).not.toBeDisplayedInViewport();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import DSDataTableCO from '../DSDataTableCO';
|
|
2
|
+
import DSMenuButtonCO from '../../ds-menu-button/DSMenuButtonCO';
|
|
3
|
+
import { mouseOver } from '../../helpers';
|
|
4
|
+
|
|
5
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
+
describe('PUI-16415 - DataTable, with menu button - Visual', () => {
|
|
7
|
+
before('loading page', async () => {
|
|
8
|
+
const errorOnGo = await DSDataTableCO.withMenuButton.go();
|
|
9
|
+
if (errorOnGo) throw errorOnGo;
|
|
10
|
+
await DSDataTableCO.waitForDataTable();
|
|
11
|
+
});
|
|
12
|
+
it('01: should have datatable with expanded menubutton and match baseline', async () => {
|
|
13
|
+
await browser.eyesOpen();
|
|
14
|
+
const menuButtonTrigger = await DSDataTableCO.getButtons(2);
|
|
15
|
+
await menuButtonTrigger.click();
|
|
16
|
+
const snapshot = await browser.eyesCheckSnapshot(DSDataTableCO.snapshotPath('datatable-menubutton-menu'));
|
|
17
|
+
await expect(snapshot).toEqual(0);
|
|
18
|
+
});
|
|
19
|
+
it('02: should have datatable with expanded menubutton submenu and match baseline', async () => {
|
|
20
|
+
await browser.eyesOpen();
|
|
21
|
+
const submenuTriggerItem = await DSMenuButtonCO.getMenuItemWrapper(1);
|
|
22
|
+
await mouseOver(submenuTriggerItem);
|
|
23
|
+
const snapshot = await browser.eyesCheckSnapshot(DSDataTableCO.snapshotPath('datatable-menubutton-submenu'));
|
|
24
|
+
await expect(snapshot).toEqual(0);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
@@ -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', () => {
|