dimsum-e2e-tests 3.70.0-next.4 → 3.70.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.
- package/CHANGELOG.md +210 -0
- package/ds-accordion/DSAccordion.visual.spec.js +6 -0
- package/ds-accordion/DSAccordionCO.js +11 -3
- package/ds-accordion/controlled/DSAccordion.controlled.func.spec.js +23 -0
- package/ds-accordion/header-structure/DSAccordion.header-structure.func.spec.js +49 -0
- package/ds-accordion/input-inside/DSAccordion.input-inside.func.spec.js +17 -0
- package/ds-accordion-native/DSAccordionNative.axe-core.func.spec.js +135 -0
- package/ds-accordion-native/DSAccordionNative.func.spec.js +200 -0
- package/ds-accordion-native/DSAccordionNative.visual.spec.js +158 -0
- package/ds-accordion-native/DSAccordionNativeCO.js +161 -0
- package/ds-accordion-native/QA_NOTES.md +88 -0
- package/ds-accordion-native/aria-disabled/DSAccordionNative.aria-disabled.axe-core.func.spec.js +25 -0
- package/ds-accordion-native/aria-disabled/DSAccordionNative.aria-disabled.visual.spec.js +28 -0
- package/ds-accordion-native/controlled/DSAccordionNative.controlled.func.spec.js +22 -0
- package/ds-accordion-native/header-structure/DSAccordionNative.header-structure.func.spec.js +53 -0
- package/ds-accordion-native/input-inside/DSAccordionNative.input-inside.func.spec.js +16 -0
- package/ds-accordion-native/role/DSAccordionNative.role-heading.func.spec.js +27 -0
- package/ds-accordion-native/scrollable-content/DSAccordionNative.scrollable-content.visual.spec.js +49 -0
- package/ds-accordion-native/slots/DSAccordionNative.slots.axe-core.func.spec.js +25 -0
- package/ds-accordion-native/slots/DSAccordionNative.slots.func.spec.js +73 -0
- package/ds-accordion-native/slots/DSAccordionNative.slots.visual.spec.js +21 -0
- package/ds-accordion-native/wrapLabel/DSAccordionNative.wrap-label.visual.spec.js +21 -0
- package/ds-apppicker/DSAppPickerCO.js +1 -1
- package/ds-autocomplete/DSAutocomplete.visual.spec.js +34 -0
- package/ds-autocomplete/DSAutocompleteCO.js +2 -0
- package/ds-card-v3/DSCardV3CO.js +14 -0
- package/ds-card-v3/accordion/DSCardV3.accordion-aria-structure.func.spec.js +41 -0
- package/ds-card-v3/disabled/DSCardV3.disabled-non-interactive.func.spec.js +25 -0
- package/ds-card-v3/multi-select/DSCardV3.multi-select.aria-grouping.func.spec.js +24 -0
- package/ds-card-v3/single-select/DSCardV3.single-select.aria-grouping.func.spec.js +24 -0
- package/ds-chat/DSChat.axe-core.func.spec.js +2 -2
- package/ds-chat/DSChat.visual.spec.js +3 -3
- package/ds-chat/DSChatCO.js +17 -23
- package/ds-chat/bubbles/slots/DSChatBubble.slots.axe-core.func.spec.js +24 -0
- package/ds-chat/bubbles/slots/DSChatBubble.slots.func.spec.js +49 -0
- package/ds-chat/bubbles/slots/DSChatBubble.slots.visual.spec.js +25 -0
- package/ds-chat/card/slots/DSChatCard.slots.axe-core.func.spec.js +24 -0
- package/ds-chat/card/slots/DSChatCard.slots.func.spec.js +47 -0
- package/ds-chat/card/slots/DSChatCard.slots.visual.spec.js +18 -0
- package/ds-chat/card/truncated-text/DSChatCard.truncated-text.func.spec.js +32 -0
- package/ds-chat/card/truncated-text/DSChatCard.truncated-text.visual.spec.js +26 -0
- package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.axe-core.func.spec.js +23 -0
- package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.visual.spec.js +17 -0
- package/ds-chat/components/BubbleCO.js +46 -3
- package/ds-chat/components/CardCO.js +77 -0
- package/ds-chat/components/ComposerCO.js +6 -6
- package/ds-chat/components/FloatingButtonCO.js +2 -2
- package/ds-chat/components/HeaderCO.js +2 -2
- package/ds-chat/components/TileCO.js +82 -0
- package/ds-chat/components/index.js +3 -2
- package/ds-chat/loadmore/DSChat-loadmore.func.spec.js +1 -1
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.axe-core.func.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.func.spec.js +1 -1
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.visual.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.axe-core.func.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.visual.spec.js +1 -1
- package/ds-chat/tile/slots/DSChatTile.slots.func.spec.js +53 -0
- package/ds-chat/tile/slots/DSChatTile.slots.visual.spec.js +18 -0
- package/ds-controlled-form/ds-combobox/DSComboboxCO.js +2 -2
- package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +1 -1
- package/ds-controlled-form/ds-controlled-inputgroup/DSControlledInputGroupCO.js +1 -1
- package/ds-data-table-async/DSDataTableCO.js +18 -12
- package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -1
- package/ds-data-table-async/components/FiltersCO.js +1 -1
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.keyboard.func.spec.js +8 -7
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.mouse.func.spec.js +6 -7
- package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.axe-core.func.spec.js +23 -0
- package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.visual.spec.js +106 -0
- package/ds-data-table-async/textwrapping/DSDataTable.text-wrap-toolbar.visual.spec.js +27 -0
- package/ds-floating-context/DSFloatingContextCO.js +10 -0
- package/ds-floating-context/placement/DSFloatingContext.placement.visual.spec.js +48 -0
- package/ds-form-combobox-multi/DSComboboxMultiCO.js +11 -3
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +55 -0
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
- package/ds-form-combobox-multi/aria-disabled/DSComboboxMulti.aria-disabled.visual.spec.js +15 -0
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.visual.spec.js +22 -0
- package/ds-form-combobox-multi/grouped/DSComboboxMulti.grouped.visual.spec.js +42 -0
- package/ds-form-combobox-multi/inline/DSComboboxMulti.inline.visual.spec.js +21 -0
- package/ds-form-combobox-multi/skeleton/DSComboboxMulti.skeleton.visual.spec.js +25 -0
- package/ds-form-combobox-single/DSComboboxSingleCO.js +11 -3
- package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.axe-core.func.spec.js +49 -0
- package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js +54 -0
- package/ds-form-combobox-single/aria-disabled/DSComboboxSingle.aria-disabled.visual.spec.js +18 -0
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.visual.spec.js +22 -0
- package/ds-form-combobox-single/grouped/DSComboboxSingle.grouped.visual.spec.js +45 -0
- package/ds-form-combobox-single/inline/DSComboboxSingle.inline.visual.spec.js +23 -0
- package/ds-form-combobox-single/skeleton/DSComboboxSingle.skeleton.visual.spec.js +25 -0
- package/ds-form-date-range-picker/date-segment-aria-labels/DateRangePicker.date-segment-aria-labels.func.spec.js +64 -0
- package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
- package/ds-form-native-select/NativeSelect.visual.spec.js +33 -0
- package/ds-form-native-select/NativeSelectCO.js +6 -0
- package/ds-form-native-select/option-selection/NativeSelect.option-selection.func.spec.js +25 -0
- package/ds-leftnavigation/LeftNavigationCO.js +2 -2
- package/ds-menu-button/DSMenuButtonCO.js +23 -0
- package/ds-menu-button/slots/DSMenuButton.slots.func.spec.js +40 -0
- package/ds-menu-button/slots/DSMenuButton.slots.visual.spec.js +26 -0
- package/ds-modal-slide/ModalSlideCO.js +39 -0
- package/ds-modal-slide/custom-header/ModalSlide.customHeader.focusRing.visual.spec.js +2 -1
- package/ds-modal-slide/slots/ModalSlide.slots.func.spec.js +74 -0
- package/ds-modal-slide/slots/ModalSlide.slots.visual.spec.js +27 -0
- package/ds-notification-badge/DSNotificationBadge.visual.spec.js +17 -20
- package/ds-page-layout/PageLayoutCO.js +4 -4
- package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +2 -0
- package/ds-progress-indicator/DSProgressIndicatorCO.js +1 -1
- package/ds-shuttle-v2/DSShuttleV2CO.js +11 -1
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.func.spec.js +37 -0
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.visual.spec.js +27 -0
- package/ds-shuttle-v2/skipped/DSShuttleV2.extra.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.filter.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.globalcheckbox.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.items.axe-core.skipped.js +3 -3
- package/ds-shuttle-v2/skipped/DSShuttleV2.skipped.js +5 -5
- package/ds-tab-button/DSTabButton.func.spec.js +1 -1
- package/ds-tooltip-v3/DSTooltipV3CO.js +21 -0
- package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js +23 -0
- package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.func.spec.js +29 -0
- package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.func.spec.js +45 -0
- package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.visual.spec.js +29 -0
- package/ds-treeview/DSTreeViewCO.js +25 -2
- package/ds-treeview/dragAndDrop/TreeView-dnd_keyboard.func.spec.js +96 -0
- package/package.json +150 -153
- package/paths.js +9 -1
- package/ds-chat-tile/TileCO.js +0 -35
- package/ds-treeview/dragAndDrop/TreeView-dnd_mouse.func.spec.js +0 -61
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import BubbleCO from './BubbleCO';
|
|
2
|
+
import CardCO from './CardCO';
|
|
2
3
|
import FloatingButtonCO from './FloatingButtonCO';
|
|
3
|
-
import TileCO from '
|
|
4
|
+
import TileCO from './TileCO';
|
|
4
5
|
import HeaderCO from './HeaderCO';
|
|
5
6
|
import ComposerCO from './ComposerCO';
|
|
6
7
|
import ChatCO from '../DSChatCO';
|
|
7
8
|
import StoryBtnsCO from './StoryBtnsCO';
|
|
8
|
-
export { BubbleCO, FloatingButtonCO, TileCO, HeaderCO, ComposerCO, ChatCO, StoryBtnsCO };
|
|
9
|
+
export { BubbleCO, CardCO, FloatingButtonCO, TileCO, HeaderCO, ComposerCO, ChatCO, StoryBtnsCO };
|
|
@@ -21,7 +21,7 @@ if (!browser.capabilities['ice:options'].isPhone) {
|
|
|
21
21
|
await browser.pause(2000);
|
|
22
22
|
const howManyMsgs = (await DSChatCO.getBubbleContainers()).length;
|
|
23
23
|
await expect(howManyMsgs).toEqual(20);
|
|
24
|
-
await expect(bubble0).
|
|
24
|
+
await expect(bubble0).toBeDisplayed();
|
|
25
25
|
});
|
|
26
26
|
});
|
|
27
27
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Key } from 'webdriverio';
|
|
2
|
-
import TileCO from '
|
|
2
|
+
import { TileCO } from '../components';
|
|
3
3
|
|
|
4
4
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
5
|
describe('PUI-6684 - Chat, Tile, Keyboard Navigation', () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Key } from 'webdriverio';
|
|
2
|
-
import TileCO from '
|
|
3
|
-
import { mouseOver, keyboardActions, tickActions, performKeyboardAction } from '
|
|
2
|
+
import { TileCO } from '../components';
|
|
3
|
+
import { mouseOver, keyboardActions, tickActions, performKeyboardAction } from '../../helpers';
|
|
4
4
|
|
|
5
5
|
if (!browser.capabilities['ice:options'].isPhone) {
|
|
6
6
|
describe('PUI-6674 - Chat, Tile, Visual Tests', () => {
|
package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.visual.spec.js
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable max-len */
|
|
2
2
|
import { Key } from 'webdriverio';
|
|
3
|
-
import TileCO from '
|
|
3
|
+
import { TileCO } from '../../components';
|
|
4
4
|
|
|
5
5
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
6
|
describe('PUI-14368 - [Tile] applyAriaDisabled prop - visual Test', () => {
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Tests for PUI-17908 (ds-chat-tile slots implementation)
|
|
2
|
+
import { TileCO } from '../../components';
|
|
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-18465 - DSChatTile:: slot wiring - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await TileCO.slotsTestURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should have custom aria-* for each slot', async () => {
|
|
17
|
+
await (await TileCO.getRootSlot()).waitForDisplayed();
|
|
18
|
+
await expect(await TileCO.getRootSlot()).toHaveAttribute('aria-label', 'root aria');
|
|
19
|
+
await expect(await TileCO.getTooltipWrapperSlot()).toHaveAttribute('aria-label', 'tooltip-wrapper aria');
|
|
20
|
+
await expect(await TileCO.getWrapperSlot()).toHaveAttribute('aria-label', 'wrapper aria');
|
|
21
|
+
await expect(await TileCO.getLeftBorderSlot()).toHaveAttribute('aria-label', 'left-border aria');
|
|
22
|
+
await expect(await TileCO.getCentralContentSlot()).toHaveAttribute('aria-label', 'central-content aria');
|
|
23
|
+
await expect(await TileCO.getIconSlot()).toHaveAttribute('aria-label', 'icon aria');
|
|
24
|
+
await expect(await TileCO.getLabelSlot()).toHaveAttribute('aria-label', 'label aria');
|
|
25
|
+
await expect(await TileCO.getBadgeSlot()).toHaveAttribute('aria-label', 'badge aria');
|
|
26
|
+
await expect(await TileCO.getCloseButtonSlot()).toHaveAttribute('aria-label', 'close-button aria');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('02: should have custom data-testid for each slot', async () => {
|
|
30
|
+
await expect(await TileCO.getRootSlot()).toHaveAttribute('data-testid', 'root data');
|
|
31
|
+
await expect(await TileCO.getTooltipWrapperSlot()).toHaveAttribute('data-testid', 'tooltip-wrapper data');
|
|
32
|
+
await expect(await TileCO.getWrapperSlot()).toHaveAttribute('data-testid', 'wrapper data');
|
|
33
|
+
await expect(await TileCO.getLeftBorderSlot()).toHaveAttribute('data-testid', 'left-border data');
|
|
34
|
+
await expect(await TileCO.getCentralContentSlot()).toHaveAttribute('data-testid', 'central-content data');
|
|
35
|
+
await expect(await TileCO.getIconSlot()).toHaveAttribute('data-testid', 'icon data');
|
|
36
|
+
await expect(await TileCO.getLabelSlot()).toHaveAttribute('data-testid', 'label data');
|
|
37
|
+
await expect(await TileCO.getBadgeSlot()).toHaveAttribute('data-testid', 'badge data');
|
|
38
|
+
await expect(await TileCO.getCloseButtonSlot()).toHaveAttribute('data-testid', 'close-button data');
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('03: should have custom lang for each slot', async () => {
|
|
42
|
+
await expect(await TileCO.getRootSlot()).toHaveAttribute('lang', 'pt');
|
|
43
|
+
await expect(await TileCO.getTooltipWrapperSlot()).toHaveAttribute('lang', 'es');
|
|
44
|
+
await expect(await TileCO.getWrapperSlot()).toHaveAttribute('lang', 'de');
|
|
45
|
+
await expect(await TileCO.getLeftBorderSlot()).toHaveAttribute('lang', 'en');
|
|
46
|
+
await expect(await TileCO.getCentralContentSlot()).toHaveAttribute('lang', 'fr');
|
|
47
|
+
await expect(await TileCO.getIconSlot()).toHaveAttribute('lang', 'it');
|
|
48
|
+
await expect(await TileCO.getLabelSlot()).toHaveAttribute('lang', 'nl');
|
|
49
|
+
await expect(await TileCO.getBadgeSlot()).toHaveAttribute('lang', 'sv');
|
|
50
|
+
await expect(await TileCO.getCloseButtonSlot()).toHaveAttribute('lang', 'ja');
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Tests for PUI-17908 (ds-chat-tile slots implementation)
|
|
2
|
+
import { TileCO } from '../../components';
|
|
3
|
+
|
|
4
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
+
describe('PUI-18464 - DSChatTile:: slot variants - Visual', () => {
|
|
6
|
+
before(async () => {
|
|
7
|
+
const errorOnGo = await TileCO.slotsTestURL.go();
|
|
8
|
+
if (errorOnGo) throw errorOnGo;
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('01: should display all tile slot variants', async () => {
|
|
12
|
+
const firstTile = await TileCO.getRootSlot();
|
|
13
|
+
await firstTile.waitForDisplayed();
|
|
14
|
+
const snapshot = await browser.percyCheckScreenshot(TileCO.snapshotPath('tile-slot-variants'));
|
|
15
|
+
await expect(snapshot).toEqual(0);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
}
|
|
@@ -134,7 +134,7 @@ export default class DSComboboxCO extends PageObject {
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
static async getSimpleTruncateText() {
|
|
137
|
-
return $('[data-testid="
|
|
137
|
+
return $('[data-testid="combobox-selected-values"]');
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
static async getNumberOptions() {
|
|
@@ -183,7 +183,7 @@ export default class DSComboboxCO extends PageObject {
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
static async getTooltip() {
|
|
186
|
-
return $('[data-testid="
|
|
186
|
+
return $('[data-testid="ds-floating-wrapper-root"]');
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
// actions
|
|
@@ -58,7 +58,7 @@ export default class DSControlledCheckboxCO extends PageObject {
|
|
|
58
58
|
static getCheckboxByIndex = async (index) => getElementByIndex(this.getCheckboxes, index);
|
|
59
59
|
|
|
60
60
|
static async getCheckboxLabels() {
|
|
61
|
-
return $$('[data-testid="
|
|
61
|
+
return $$('[data-testid="ds-checkbox-label"]');
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
static getCheckboxLabelByIndex = async (index) => getElementByIndex(this.getCheckboxLabels, index);
|
|
@@ -47,7 +47,7 @@ export default class DSControlledInputGroupCO extends PageObject {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
static async getComboSelectedOptText() {
|
|
50
|
-
return $('[data-testid="
|
|
50
|
+
return $('[data-testid="combobox-selected-values"]');
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
static async getComboboxInput() {
|
|
@@ -142,10 +142,6 @@ export default class DataTableCO extends PageObject {
|
|
|
142
142
|
|
|
143
143
|
static performance = new Urlbuilder(PATH_E2E_DATATABLE_ADVANCED, 'performance');
|
|
144
144
|
|
|
145
|
-
static emptyStateFullCustom = new Urlbuilder(PATH_E2E_DATATABLE_ADVANCED, 'empty-state-full-custom');
|
|
146
|
-
|
|
147
|
-
static customCellRowHeader = new Urlbuilder(PATH_E2E_DATATABLE_ADVANCED, 'custom-cell-row-and-header');
|
|
148
|
-
|
|
149
145
|
static responsive = new Urlbuilder(PATH_E2E_DATATABLE_ADVANCED, 'responsive');
|
|
150
146
|
|
|
151
147
|
// ROW
|
|
@@ -162,10 +158,15 @@ export default class DataTableCO extends PageObject {
|
|
|
162
158
|
|
|
163
159
|
static singleSelectDisabledSelectionUC = new Urlbuilder(PATH_E2E_DATATABLE, 'single-select-disabled-selection');
|
|
164
160
|
|
|
165
|
-
static multiSelectDisabledSelectionUC = new Urlbuilder(
|
|
161
|
+
static multiSelectDisabledSelectionUC = new Urlbuilder(PATH_E2E_DATATABLE_ROW, 'multi-select-disabled-selection');
|
|
166
162
|
|
|
167
163
|
static multiSelectEmpty = new Urlbuilder(PATH_E2E_DATATABLE_ROW, 'multi-select-empty');
|
|
168
164
|
|
|
165
|
+
static multiSelectDisabledWithUniqueRowAccessor = new Urlbuilder(
|
|
166
|
+
PATH_E2E_DATATABLE_ROW,
|
|
167
|
+
'multi-select-disabled-selection-with-unique-row-accessor',
|
|
168
|
+
);
|
|
169
|
+
|
|
169
170
|
// Column
|
|
170
171
|
|
|
171
172
|
static columnLayout = new Urlbuilder(PATH_E2E_DATATABLE_COLUMN, 'basic-column-layout');
|
|
@@ -198,6 +199,10 @@ export default class DataTableCO extends PageObject {
|
|
|
198
199
|
|
|
199
200
|
static textWrapTruncColumn = new Urlbuilder(PATH_E2E_DATATABLE_TEXT_WRAPPING, 'text-wrap-truncate-column');
|
|
200
201
|
|
|
202
|
+
static headerWrapAlignment = new Urlbuilder(PATH_E2E_DATATABLE_TEXT_WRAPPING, 'header-wrap-alignment-test');
|
|
203
|
+
|
|
204
|
+
static textWrapGlobalWithToolbar = new Urlbuilder(PATH_E2E_DATATABLE_TEXT_WRAPPING, 'text-wrap-global');
|
|
205
|
+
|
|
201
206
|
// Toolbar
|
|
202
207
|
|
|
203
208
|
static toolbarIntegration = new Urlbuilder(PATH_E2E_DATATABLE_TOOLBAR, 'toolbar-integration');
|
|
@@ -242,6 +247,8 @@ export default class DataTableCO extends PageObject {
|
|
|
242
247
|
|
|
243
248
|
static pui16461SkeletonAndNoResults = new Urlbuilder(PATH_E2E_DATATABLE_STATES, 'pui-16461-skeleton-and-no-results');
|
|
244
249
|
|
|
250
|
+
static emptyStateFullCustom = new Urlbuilder(PATH_E2E_DATATABLE_STATES, 'empty-state-full-custom');
|
|
251
|
+
|
|
245
252
|
// Cell
|
|
246
253
|
static editableCells = new Urlbuilder(PATH_E2E_DATATABLE_CELL, 'editable-cells');
|
|
247
254
|
|
|
@@ -297,11 +304,6 @@ export default class DataTableCO extends PageObject {
|
|
|
297
304
|
|
|
298
305
|
// eslint-disable-next-line max-len
|
|
299
306
|
|
|
300
|
-
static multiSelectDisabledWithUniqueRowAccessor = new Urlbuilder(
|
|
301
|
-
PATH_E2E_DATATABLE,
|
|
302
|
-
'multi-select-disabled-selection-with-unique-row-accessor',
|
|
303
|
-
);
|
|
304
|
-
|
|
305
307
|
static resizableWithConstrains = new Urlbuilder(PATH_E2E_DATATABLE, 'pui-8896-resizable-with-constrains');
|
|
306
308
|
|
|
307
309
|
static memoizedSearchFilterTest = new Urlbuilder(PATH_E2E_DATATABLE, 'pui-12253-memoized-filter-component');
|
|
@@ -392,17 +394,21 @@ export default class DataTableCO extends PageObject {
|
|
|
392
394
|
}
|
|
393
395
|
|
|
394
396
|
static getPopoverContainer() {
|
|
395
|
-
return $('[data-testid="
|
|
397
|
+
return $('[data-testid="ds-floating-wrapper-root"]');
|
|
396
398
|
}
|
|
397
399
|
|
|
398
400
|
static getPopoverContainers() {
|
|
399
|
-
return $$('[data-testid="
|
|
401
|
+
return $$('[data-testid="ds-floating-wrapper-root"]');
|
|
400
402
|
}
|
|
401
403
|
|
|
402
404
|
static getButtons(index) {
|
|
403
405
|
return $$('[data-testid="ds-button"]')[index];
|
|
404
406
|
}
|
|
405
407
|
|
|
408
|
+
static getRowActionResult() {
|
|
409
|
+
return $('[data-testid="datatable-row-action-result"]');
|
|
410
|
+
}
|
|
411
|
+
|
|
406
412
|
static async getSkipToButton() {
|
|
407
413
|
return $(`[id="storybook-root"] button`);
|
|
408
414
|
}
|
|
@@ -20,7 +20,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
20
20
|
});
|
|
21
21
|
describe('PUI-6988 - DataTable, Custom cell and row header -visual.', async () => {
|
|
22
22
|
before('loading page', async () => {
|
|
23
|
-
const errorOnGo = await DSDataTableCO.
|
|
23
|
+
const errorOnGo = await DSDataTableCO.customCellRowAndHeaderTest.go();
|
|
24
24
|
if (errorOnGo) throw errorOnGo;
|
|
25
25
|
await DSDataTableCO.waitForDataTable();
|
|
26
26
|
});
|
|
@@ -145,7 +145,7 @@ export default class FiltersCO extends PageObject {
|
|
|
145
145
|
|
|
146
146
|
static getFilterMenuContentSlot = async () => $('[data-dimsum-slot="dsDatatableFilterPopoverContent"]');
|
|
147
147
|
|
|
148
|
-
static getFilterPopoverSlot = async () => $('[data-dimsum-slot="dsDatatableFilterPopover"]');
|
|
148
|
+
static getFilterPopoverSlot = async () => $('[data-dimsum-parent-slot="dsDatatableFilterPopover"]');
|
|
149
149
|
|
|
150
150
|
static getFreeTextSearchWrapperSlot = async () => $('[data-dimsum-slot="dsDatatableFreeTextSearchWrapper"]');
|
|
151
151
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Key } from 'webdriverio';
|
|
2
2
|
import DSDataTableCO from '../DSDataTableCO';
|
|
3
3
|
import DSMenuButtonCO from '../../ds-menu-button/DSMenuButtonCO';
|
|
4
|
-
import { safeDismissAlert } from '../../helpers';
|
|
5
4
|
|
|
6
5
|
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
7
6
|
describe('PUI-16414 - DataTable, MenuButton (keyboard) - Functional Test', async () => {
|
|
@@ -29,12 +28,14 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
29
28
|
it('03: should trigger menuButton item with keyboard', async () => {
|
|
30
29
|
await browser.keys(Key.ArrowUp);
|
|
31
30
|
await browser.keys(Key.Return);
|
|
32
|
-
const
|
|
33
|
-
await
|
|
31
|
+
const result = await DSDataTableCO.getRowActionResult();
|
|
32
|
+
await result.waitForDisplayed();
|
|
33
|
+
await expect(result).toHaveText('item selected: log actions');
|
|
34
34
|
});
|
|
35
35
|
it('03: should expand menuButton submenu for datatable row with keyboard', async () => {
|
|
36
|
-
await safeDismissAlert();
|
|
37
36
|
await browser.keys(Key.Return);
|
|
37
|
+
const menuRoot = await DSMenuButtonCO.getMenuRoot();
|
|
38
|
+
await menuRoot.waitForDisplayed();
|
|
38
39
|
await browser.keys(Key.ArrowDown);
|
|
39
40
|
const menuItems = (await DSMenuButtonCO.getMenuItems()).length;
|
|
40
41
|
await expect(menuItems).toEqual(6);
|
|
@@ -42,11 +43,11 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
42
43
|
it('04: should trigger menuButton submenu item with keyboard', async () => {
|
|
43
44
|
await browser.keys(Key.ArrowRight);
|
|
44
45
|
await browser.keys(Key.Return);
|
|
45
|
-
const
|
|
46
|
-
await
|
|
46
|
+
const result = await DSDataTableCO.getRowActionResult();
|
|
47
|
+
await result.waitForDisplayed();
|
|
48
|
+
await expect(result).toHaveText('item selected: Realtor Phone - (424) 000-0000');
|
|
47
49
|
});
|
|
48
50
|
it('05: should close menuButton menu with keyboard', async () => {
|
|
49
|
-
await safeDismissAlert();
|
|
50
51
|
await browser.keys(Key.Return);
|
|
51
52
|
const menu = await DSMenuButtonCO.getMenuRoot();
|
|
52
53
|
await menu.waitForDisplayed();
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import DSDataTableCO from '../DSDataTableCO';
|
|
2
|
-
import { safeDismissAlert } from '../../helpers';
|
|
3
2
|
import CellCO from '../components/CellCO';
|
|
4
3
|
import DSMenuButtonCO from '../../ds-menu-button/DSMenuButtonCO';
|
|
5
4
|
|
|
@@ -21,11 +20,11 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
21
20
|
it('02: should trigger menuButton item', async () => {
|
|
22
21
|
const thirdItem = await DSMenuButtonCO.getMenuItemWrapper(2);
|
|
23
22
|
await thirdItem.click();
|
|
24
|
-
const
|
|
25
|
-
await
|
|
23
|
+
const result = await DSDataTableCO.getRowActionResult();
|
|
24
|
+
await result.waitForDisplayed();
|
|
25
|
+
await expect(result).toHaveText('item selected: sms');
|
|
26
26
|
});
|
|
27
27
|
it('03: should expand menuButton submenu for datatable row', async () => {
|
|
28
|
-
await safeDismissAlert();
|
|
29
28
|
const menuButtonTrigger = await DSDataTableCO.getButtons(2);
|
|
30
29
|
await menuButtonTrigger.click();
|
|
31
30
|
const submenuTriggerItem = await DSMenuButtonCO.getMenuItemWrapper(1);
|
|
@@ -39,11 +38,11 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
39
38
|
it('04: should trigger menuButton submenu item', async () => {
|
|
40
39
|
const submenuItem = await DSMenuButtonCO.getMenuItemWrapper(5);
|
|
41
40
|
await submenuItem.click();
|
|
42
|
-
const
|
|
43
|
-
await
|
|
41
|
+
const result = await DSDataTableCO.getRowActionResult();
|
|
42
|
+
await result.waitForDisplayed();
|
|
43
|
+
await expect(result).toHaveText('item selected: Realtor Phone - (424) 000-0000');
|
|
44
44
|
});
|
|
45
45
|
it('05: should close menuButton flyout clicking outside the menu (cell for example)', async () => {
|
|
46
|
-
await safeDismissAlert();
|
|
47
46
|
const menuButtonTrigger = await DSDataTableCO.getButtons(2);
|
|
48
47
|
await menuButtonTrigger.click();
|
|
49
48
|
const menu = await DSMenuButtonCO.getMenuRoot();
|
package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.axe-core.func.spec.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import DSDataTableCO from '../DSDataTableCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
// Accessibility coverage for the PUI-17819 header wrap/alignment showcase.
|
|
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-18681 - DSDataTable:: header text wrap rules and alignment - axe-core', () => {
|
|
12
|
+
before('loading page', async () => {
|
|
13
|
+
const errorOnGo = await DSDataTableCO.headerWrapAlignment.go();
|
|
14
|
+
if (errorOnGo) throw errorOnGo;
|
|
15
|
+
await DSDataTableCO.waitForDataTable();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('01: should have no accessibility violations', async () => {
|
|
19
|
+
const result = await axeCoreCheck();
|
|
20
|
+
await expect(result.length).toBe(0);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSDataTableCO from '../DSDataTableCO';
|
|
3
|
+
import { HeaderCO, RowCO } from '../components';
|
|
4
|
+
|
|
5
|
+
// Column indices in the HeaderWrapAlignment story:
|
|
6
|
+
// 0=id, 1=name, 2=wrap ('wrap'), 3=wrapAll ('wrap-all'), 4=truncate ('truncate')
|
|
7
|
+
const WRAP_ALL_COL = 3;
|
|
8
|
+
// Filter buttons render only on searchable columns (wrap, wrapAll, truncate) → wrapAll is index 1
|
|
9
|
+
const WRAP_ALL_FILTER = 1;
|
|
10
|
+
|
|
11
|
+
// Header control focus order (Enter on the focused header → then Tab):
|
|
12
|
+
// 1. DnD handle 2. search/filter button 3. sort caret 4. resize handle
|
|
13
|
+
// Tests for PUI-17819 (header wrap rules + alignment fix). Unblocks PUI-17814 (name/search-icon overlap).
|
|
14
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
15
|
+
describe('PUI-18680 - DSDataTable:: header text wrap rules and alignment - visual', () => {
|
|
16
|
+
before('loading page', async () => {
|
|
17
|
+
const errorOnGo = await DSDataTableCO.headerWrapAlignment.go();
|
|
18
|
+
if (errorOnGo) throw errorOnGo;
|
|
19
|
+
await DSDataTableCO.waitForDataTable();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('01: should render wrap / wrap-all / truncate headers top-aligned', async () => {
|
|
23
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
24
|
+
await expect(snapshot).toEqual(0);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('02: should keep header title top-aligned with revealed icons on hover', async () => {
|
|
28
|
+
const wrapAllHeader = await HeaderCO.getHeaderCellByIndex(WRAP_ALL_COL);
|
|
29
|
+
await wrapAllHeader.moveTo();
|
|
30
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
31
|
+
await expect(snapshot).toEqual(0);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('03: should keep wrapped header aligned after clicking the column to sort it', async () => {
|
|
35
|
+
// sort by clicking the column header itself (not the sort caret) — the realistic interaction.
|
|
36
|
+
// The click also focuses the header, which sets up the focus walk in the next steps.
|
|
37
|
+
const wrapAllHeader = await HeaderCO.getHeaderCellByIndex(WRAP_ALL_COL);
|
|
38
|
+
await wrapAllHeader.click();
|
|
39
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
40
|
+
await expect(snapshot).toEqual(0);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('04: should focus the drag-and-drop handle first when entering the header', async () => {
|
|
44
|
+
// Enter activates the header tab stops and focuses the first control (the DnD handle)
|
|
45
|
+
await browser.keys(Key.Return);
|
|
46
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
47
|
+
await expect(snapshot).toEqual(0);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('05: should move focus to the search/filter button on Tab', async () => {
|
|
51
|
+
await browser.keys(Key.Tab);
|
|
52
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
53
|
+
await expect(snapshot).toEqual(0);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('06: should move focus to the sort caret on Tab', async () => {
|
|
57
|
+
await browser.keys(Key.Tab);
|
|
58
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
59
|
+
await expect(snapshot).toEqual(0);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('07: should move focus to the resize handle on Tab', async () => {
|
|
63
|
+
await browser.keys(Key.Tab);
|
|
64
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
65
|
+
await expect(snapshot).toEqual(0);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('08: should keep wrapped header aligned while the filter/search is open', async () => {
|
|
69
|
+
const filterBtn = await HeaderCO.getFilterBtnByIndex(WRAP_ALL_FILTER);
|
|
70
|
+
await filterBtn.click();
|
|
71
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
72
|
+
await expect(snapshot).toEqual(0);
|
|
73
|
+
await browser.keys(Key.Escape);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('09: should keep wrapped header aligned while the DnD handle is engaged', async () => {
|
|
77
|
+
const wrapAllHeader = await HeaderCO.getHeaderCellByIndex(WRAP_ALL_COL);
|
|
78
|
+
const dragHandle = await HeaderCO.getHeaderCellDragHandler(wrapAllHeader);
|
|
79
|
+
await dragHandle.click();
|
|
80
|
+
// keyboard pick-up renders a deterministic drag overlay (dnd-kit)
|
|
81
|
+
await browser.keys(Key.Space);
|
|
82
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
83
|
+
await expect(snapshot).toEqual(0);
|
|
84
|
+
await browser.keys(Key.Escape);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('10: should keep wrapped headers intact with a row toolbar menu open', async () => {
|
|
88
|
+
const toolbarTrigger = await RowCO.getRowToolbarTriggerByIndex(0);
|
|
89
|
+
await toolbarTrigger.click();
|
|
90
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
91
|
+
await expect(snapshot).toEqual(0);
|
|
92
|
+
await browser.keys(Key.Escape);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('11: should keep wrapped header aligned while a column is resized narrower', async () => {
|
|
96
|
+
// PUI-12696 (open): resizing a column below its min makes the resize handler overlap the
|
|
97
|
+
// header title. This captures current behavior; update the baseline when PUI-12696 lands.
|
|
98
|
+
// Kept last: the extra-tall header it produces would otherwise obscure the row toolbar
|
|
99
|
+
// trigger and break the coordinate-based click in the toolbar step.
|
|
100
|
+
const resizeHandler = await HeaderCO.getResizeHandler(WRAP_ALL_COL);
|
|
101
|
+
await resizeHandler.dragAndDrop({ x: -150, y: 0 });
|
|
102
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
103
|
+
await expect(snapshot).toEqual(0);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import DSDataTableCO from '../DSDataTableCO';
|
|
2
|
+
import { RowCO } from '../components';
|
|
3
|
+
|
|
4
|
+
// Global textWrap='wrap' together with a row-actions (toolbar) column — mirrors the
|
|
5
|
+
// Components/DataTable/Features/Text Wrapping > Text Wrap Global showcase.
|
|
6
|
+
// Tests for PUI-17819 (header wrap rules + alignment fix).
|
|
7
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
8
|
+
describe('PUI-18682 - DSDataTable:: text wrap with row toolbar column - visual', () => {
|
|
9
|
+
before('loading page', async () => {
|
|
10
|
+
const errorOnGo = await DSDataTableCO.textWrapGlobalWithToolbar.go();
|
|
11
|
+
if (errorOnGo) throw errorOnGo;
|
|
12
|
+
await DSDataTableCO.waitForDataTable();
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('01: should wrap all columns with the row toolbar column present', async () => {
|
|
16
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
17
|
+
await expect(snapshot).toEqual(0);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('02: should keep cells wrapped while a row toolbar menu is open', async () => {
|
|
21
|
+
const toolbarTrigger = await RowCO.getRowToolbarTriggerByIndex(0);
|
|
22
|
+
await toolbarTrigger.click();
|
|
23
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
24
|
+
await expect(snapshot).toEqual(0);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
@@ -10,6 +10,8 @@ export default class DSFloatingContextCO extends PageObject {
|
|
|
10
10
|
|
|
11
11
|
static slotsURL = new Urlbuilder(PATH_E2E_FLOATING_CONTEXT, 'slots-test');
|
|
12
12
|
|
|
13
|
+
static positionsTestURL = new Urlbuilder(PATH_E2E_FLOATING_CONTEXT, 'positions-test');
|
|
14
|
+
|
|
13
15
|
static async getFloatingContextWrapper() {
|
|
14
16
|
return $('[data-testid="ds-floating-wrapper-root"]');
|
|
15
17
|
}
|
|
@@ -18,6 +20,14 @@ export default class DSFloatingContextCO extends PageObject {
|
|
|
18
20
|
return $('[data-testid="ds-floatingwrapper-content"]');
|
|
19
21
|
}
|
|
20
22
|
|
|
23
|
+
static async getFloatingContextContents() {
|
|
24
|
+
return $$('[data-testid="ds-floatingwrapper-content"]');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static async getHelpButtons() {
|
|
28
|
+
return $$('[aria-label="Help"]');
|
|
29
|
+
}
|
|
30
|
+
|
|
21
31
|
static async getFloatingContextArrowSlot() {
|
|
22
32
|
return $('[data-dimsum-slot="dsFloatingwrapperArrow"]');
|
|
23
33
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Tests for the fix introduced in PUI-14527 (useFloatingContext placement string type mismatch)
|
|
2
|
+
import { mouseOver } from '../../helpers';
|
|
3
|
+
import DSFloatingContextCO from '../DSFloatingContextCO';
|
|
4
|
+
|
|
5
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
6
|
+
describe('PUI-18529 - DSFloatingContext:: useFloatingContext placement directions - visual', () => {
|
|
7
|
+
before('loading page', async () => {
|
|
8
|
+
const errorOnGo = await DSFloatingContextCO.positionsTestURL.go();
|
|
9
|
+
if (errorOnGo) throw errorOnGo;
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('01: should display tooltip with right placement on hover', async () => {
|
|
13
|
+
const buttons = await DSFloatingContextCO.getHelpButtons();
|
|
14
|
+
await mouseOver(buttons[0]);
|
|
15
|
+
const contents = await DSFloatingContextCO.getFloatingContextContents();
|
|
16
|
+
await contents[0].waitForDisplayed();
|
|
17
|
+
const snapshot = await browser.percyCheckScreenshot(DSFloatingContextCO.snapshotPath('placement-right'));
|
|
18
|
+
await expect(snapshot).toEqual(0);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('02: should display tooltip with top placement on hover', async () => {
|
|
22
|
+
const buttons = await DSFloatingContextCO.getHelpButtons();
|
|
23
|
+
await mouseOver(buttons[1]);
|
|
24
|
+
const contents = await DSFloatingContextCO.getFloatingContextContents();
|
|
25
|
+
await contents[0].waitForDisplayed();
|
|
26
|
+
const snapshot = await browser.percyCheckScreenshot(DSFloatingContextCO.snapshotPath('placement-top'));
|
|
27
|
+
await expect(snapshot).toEqual(0);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('03: should display tooltip with bottom placement on hover', async () => {
|
|
31
|
+
const buttons = await DSFloatingContextCO.getHelpButtons();
|
|
32
|
+
await mouseOver(buttons[2]);
|
|
33
|
+
const contents = await DSFloatingContextCO.getFloatingContextContents();
|
|
34
|
+
await contents[0].waitForDisplayed();
|
|
35
|
+
const snapshot = await browser.percyCheckScreenshot(DSFloatingContextCO.snapshotPath('placement-bottom'));
|
|
36
|
+
await expect(snapshot).toEqual(0);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('04: should display tooltip with left placement on hover', async () => {
|
|
40
|
+
const buttons = await DSFloatingContextCO.getHelpButtons();
|
|
41
|
+
await mouseOver(buttons[3]);
|
|
42
|
+
const contents = await DSFloatingContextCO.getFloatingContextContents();
|
|
43
|
+
await contents[0].waitForDisplayed();
|
|
44
|
+
const snapshot = await browser.percyCheckScreenshot(DSFloatingContextCO.snapshotPath('placement-left'));
|
|
45
|
+
await expect(snapshot).toEqual(0);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
@@ -6,6 +6,10 @@ export default class DSComboboxMultiCO extends PageObject {
|
|
|
6
6
|
// STORIES
|
|
7
7
|
static basicTest = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'basic-test');
|
|
8
8
|
|
|
9
|
+
static loadingTest = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'loading-test');
|
|
10
|
+
|
|
11
|
+
static skeletonTest = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'skeleton-test');
|
|
12
|
+
|
|
9
13
|
static applyAriaDisabled = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'apply-aria-disabled-test');
|
|
10
14
|
|
|
11
15
|
static readOnly = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'read-only-test');
|
|
@@ -29,6 +33,10 @@ export default class DSComboboxMultiCO extends PageObject {
|
|
|
29
33
|
|
|
30
34
|
static disabled = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'disabled-test');
|
|
31
35
|
|
|
36
|
+
static grouped = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'grouped-test');
|
|
37
|
+
|
|
38
|
+
static inlineTest = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'inline-test');
|
|
39
|
+
|
|
32
40
|
static controlledMenuStateWithSectionsSlotsTest = new Urlbuilder(
|
|
33
41
|
PATH_E2E_COMBOBOX_MULTI_SLOTS,
|
|
34
42
|
'controlled-menu-state-with-section-slots-test',
|
|
@@ -142,7 +150,7 @@ export default class DSComboboxMultiCO extends PageObject {
|
|
|
142
150
|
}
|
|
143
151
|
|
|
144
152
|
static async getSimpleTruncateText() {
|
|
145
|
-
return $('[data-testid="
|
|
153
|
+
return $('[data-testid="combobox-selected-values"]');
|
|
146
154
|
}
|
|
147
155
|
|
|
148
156
|
static async getNumberOptions() {
|
|
@@ -191,7 +199,7 @@ export default class DSComboboxMultiCO extends PageObject {
|
|
|
191
199
|
}
|
|
192
200
|
|
|
193
201
|
static async getTooltip() {
|
|
194
|
-
return $('[data-testid="
|
|
202
|
+
return $('[data-testid="ds-floating-wrapper-root"]');
|
|
195
203
|
}
|
|
196
204
|
|
|
197
205
|
// actions
|
|
@@ -273,7 +281,7 @@ export default class DSComboboxMultiCO extends PageObject {
|
|
|
273
281
|
}
|
|
274
282
|
|
|
275
283
|
static async getComboboxSectionLabelByIndex(index) {
|
|
276
|
-
return $$('[data-dimsum-slot="dsComboboxSectionLabel"]')[index];
|
|
284
|
+
return $$('[data-dimsum-parent-slot="dsComboboxSectionLabel"]')[index];
|
|
277
285
|
}
|
|
278
286
|
|
|
279
287
|
static async getComboboxSectionWrapperSlotByIndex(index) {
|