dimsum-e2e-tests 3.70.0-alpha.13 → 3.70.0-alpha.15
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 +10 -0
- package/ds-chip/Basic/DSChip.basic.visual.spec.js +74 -0
- package/ds-chip/Shape/DSChip.shape.visual.spec.js +66 -0
- package/ds-chip/inside-popper/DSChip.inside-popper.visual.spec.js +69 -0
- package/ds-form-date-range-picker/DateRangePicker.visual.spec.js +9 -0
- package/ds-global-header/GlobalHeaderCO.js +27 -1
- package/ds-global-header/app-picker-element-ids/GlobalHeader.app-picker-element-ids.func.spec.js +84 -0
- package/ds-global-header/search-toggle-slots/GlobalHeader.search-toggle-slots.func.spec.js +10 -8
- package/ds-global-header/slots/GlobalHeader.slots.visual.spec.js +1 -1
- package/ds-tabs/DSTabsCO.js +4 -0
- package/ds-tabs/notification-badge/DSTabs.notification-badge.axe-core.func.spec.js +28 -0
- package/ds-tabs/notification-badge/DSTabs.notification-badge.func.spec.js +51 -0
- package/package.json +149 -149
- package/paths.js +4 -0
- package/z-index/ZindexCO.js +4 -0
- package/z-index/dialog-side-panel/ZIndex.dialog-sidepanel.visual.spec.js +7 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## 3.70.0-alpha.15 (2026-09-21)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- dimsum:: restore portal publication in storybook:build [PUI-19013](https://jira.elliemae.io/browse/PUI-19013) ([#8381](https://github.com/intcx/PLATFORM-UI.dimsum/issues/8381)) ([cb522f2](https://github.com/intcx/PLATFORM-UI.dimsum/commit/cb522f2adb4ef3cb145f77664f72fd154d48d86f)), closes [#8378](https://github.com/intcx/PLATFORM-UI.dimsum/issues/8378)
|
|
11
|
+
|
|
12
|
+
## 3.70.0-alpha.14 (2026-09-18)
|
|
13
|
+
|
|
14
|
+
**Note:** Version bump only for package dimsum-e2e-tests
|
|
15
|
+
|
|
6
16
|
## 3.70.0-alpha.13 (2026-09-17)
|
|
7
17
|
|
|
8
18
|
### Bug Fixes
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { mouseOver, tabStops } from '../../helpers';
|
|
2
|
+
import DSChipCO from '../DSChipCO';
|
|
3
|
+
|
|
4
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
+
const PARKED_X = 500;
|
|
6
|
+
const PARKED_Y = 400;
|
|
7
|
+
|
|
8
|
+
describe('PUI-18892 - DSChip:: basic shape, Spec v2 states - visual test', () => {
|
|
9
|
+
before('loading page', async () => {
|
|
10
|
+
const errorOnGo = await DSChipCO.basicURL.go();
|
|
11
|
+
if (errorOnGo) throw errorOnGo;
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('01: large chip hovered', async () => {
|
|
15
|
+
await (await DSChipCO.getChipByIndex(0)).waitForDisplayed();
|
|
16
|
+
await mouseOver(await DSChipCO.getChipByIndex(0));
|
|
17
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
18
|
+
await expect(snapshot).toEqual(0);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('02: large chip focused, not hovered', async () => {
|
|
22
|
+
const chipButton = await (await DSChipCO.getChipByIndex(0)).$('button');
|
|
23
|
+
await mouseOver(null, PARKED_X, PARKED_Y);
|
|
24
|
+
await tabStops(2); // chip 0 root wrapper, then chip 0 button
|
|
25
|
+
await expect(chipButton).toBeFocused();
|
|
26
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
27
|
+
await expect(snapshot).toEqual(0);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('03: large chip focused and hovered', async () => {
|
|
31
|
+
const chipButton = await (await DSChipCO.getChipByIndex(0)).$('button');
|
|
32
|
+
await mouseOver(await DSChipCO.getChipByIndex(0));
|
|
33
|
+
await expect(chipButton).toBeFocused();
|
|
34
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
35
|
+
await expect(snapshot).toEqual(0);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('04: small chip hovered', async () => {
|
|
39
|
+
await mouseOver(await DSChipCO.getChipByIndex(1));
|
|
40
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
41
|
+
await expect(snapshot).toEqual(0);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('05: selected chip focused, not hovered', async () => {
|
|
45
|
+
const chipButton = await (await DSChipCO.getChipByIndex(2)).$('button');
|
|
46
|
+
await mouseOver(null, PARKED_X, PARKED_Y);
|
|
47
|
+
await tabStops(2); // from chip 0 button: chip 1 button, then chip 2 button
|
|
48
|
+
await expect(chipButton).toBeFocused();
|
|
49
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
50
|
+
await expect(snapshot).toEqual(0);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('06: selected chip focused and hovered', async () => {
|
|
54
|
+
const chipButton = await (await DSChipCO.getChipByIndex(2)).$('button');
|
|
55
|
+
await mouseOver(await DSChipCO.getChipByIndex(2));
|
|
56
|
+
await expect(chipButton).toBeFocused();
|
|
57
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
58
|
+
await expect(snapshot).toEqual(0);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('07: disabled chip hovered', async () => {
|
|
62
|
+
await mouseOver(await DSChipCO.getChipByIndex(4));
|
|
63
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
64
|
+
await expect(snapshot).toEqual(0);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('08: wrapText chip hovered', async () => {
|
|
68
|
+
const chipButton = await (await DSChipCO.getChipByIndex(5)).$('button');
|
|
69
|
+
await chipButton.moveTo();
|
|
70
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
71
|
+
await expect(snapshot).toEqual(0);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { mouseOver, tabStops } from '../../helpers';
|
|
2
|
+
import DSChipCO from '../DSChipCO';
|
|
3
|
+
|
|
4
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
+
const PARKED_X = 500;
|
|
6
|
+
const PARKED_Y = 400;
|
|
7
|
+
|
|
8
|
+
describe('PUI-18893 - DSChip:: round shape, Spec v2 states - visual test', () => {
|
|
9
|
+
before('loading page', async () => {
|
|
10
|
+
const errorOnGo = await DSChipCO.shapeURL.go();
|
|
11
|
+
if (errorOnGo) throw errorOnGo;
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('01: all round chips at rest', async () => {
|
|
15
|
+
const chip = await DSChipCO.getChipByIndex(0);
|
|
16
|
+
await chip.waitForDisplayed();
|
|
17
|
+
await mouseOver(null, PARKED_X, PARKED_Y);
|
|
18
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
19
|
+
await expect(snapshot).toEqual(0);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('02: large round chip hovered', async () => {
|
|
23
|
+
await mouseOver(await DSChipCO.getChipByIndex(0));
|
|
24
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
25
|
+
await expect(snapshot).toEqual(0);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('03: large round chip focused, not hovered', async () => {
|
|
29
|
+
const chipButton = await (await DSChipCO.getChipByIndex(0)).$('button');
|
|
30
|
+
await mouseOver(null, PARKED_X, PARKED_Y);
|
|
31
|
+
await tabStops(1); // chip 0 button (no tabIndex on the round chip roots)
|
|
32
|
+
await expect(chipButton).toBeFocused();
|
|
33
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
34
|
+
await expect(snapshot).toEqual(0);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('04: large round chip focused and hovered', async () => {
|
|
38
|
+
const chipButton = await (await DSChipCO.getChipByIndex(0)).$('button');
|
|
39
|
+
await mouseOver(await DSChipCO.getChipByIndex(0));
|
|
40
|
+
await expect(chipButton).toBeFocused();
|
|
41
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
42
|
+
await expect(snapshot).toEqual(0);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('05: small round chip hovered', async () => {
|
|
46
|
+
await mouseOver(await DSChipCO.getChipByIndex(1));
|
|
47
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
48
|
+
await expect(snapshot).toEqual(0);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('06: selected round chip focused, not hovered', async () => {
|
|
52
|
+
const chipButton = await (await DSChipCO.getChipByIndex(2)).$('button');
|
|
53
|
+
await mouseOver(null, PARKED_X, PARKED_Y);
|
|
54
|
+
await tabStops(2); // from chip 0 button: chip 1 button, then chip 2 button
|
|
55
|
+
await expect(chipButton).toBeFocused();
|
|
56
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
57
|
+
await expect(snapshot).toEqual(0);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('07: disabled round chip hovered', async () => {
|
|
61
|
+
await mouseOver(await DSChipCO.getChipByIndex(4));
|
|
62
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
63
|
+
await expect(snapshot).toEqual(0);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { mouseOver, tabStops } from '../../helpers';
|
|
2
|
+
import DSChipCO from '../DSChipCO';
|
|
3
|
+
|
|
4
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
5
|
+
const PARKED_X = 900;
|
|
6
|
+
const PARKED_Y = 700;
|
|
7
|
+
|
|
8
|
+
// Covers the Spec v2 implementation shipped in PUI-17972 (Implement Spec v2 for Chip component)
|
|
9
|
+
describe('PUI-18992 - DSChip:: inside popper, Spec v2 states - visual test', () => {
|
|
10
|
+
before('loading page', async () => {
|
|
11
|
+
const errorOnGo = await DSChipCO.popperURL.go();
|
|
12
|
+
if (errorOnGo) throw errorOnGo;
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('01: chips rendered inside the open popover, first chip focused on open', async () => {
|
|
16
|
+
const popperTrigger = await DSChipCO.getPopperTrigger();
|
|
17
|
+
await popperTrigger.click();
|
|
18
|
+
const chip = await DSChipCO.getChipByIndex(0);
|
|
19
|
+
await chip.waitForDisplayed();
|
|
20
|
+
await mouseOver(null, PARKED_X, PARKED_Y);
|
|
21
|
+
// the story focuses the first chip on open, so this frame is both the idle-open
|
|
22
|
+
// state and the focus-on-open state — one snapshot covers both
|
|
23
|
+
await expect(await chip.$('button')).toBeFocused();
|
|
24
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
25
|
+
await expect(snapshot).toEqual(0);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('02: first chip focused and hovered', async () => {
|
|
29
|
+
const chipButton = await (await DSChipCO.getChipByIndex(0)).$('button');
|
|
30
|
+
await mouseOver(await DSChipCO.getChipByIndex(0));
|
|
31
|
+
await expect(chipButton).toBeFocused();
|
|
32
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
33
|
+
await expect(snapshot).toEqual(0);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('03: second chip focused, not hovered', async () => {
|
|
37
|
+
const chipButton = await (await DSChipCO.getChipByIndex(1)).$('button');
|
|
38
|
+
await mouseOver(null, PARKED_X, PARKED_Y);
|
|
39
|
+
await tabStops(1); // from chip 0 button to chip 1 button — no chip here opts into a root tab stop
|
|
40
|
+
await expect(chipButton).toBeFocused();
|
|
41
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
42
|
+
await expect(snapshot).toEqual(0);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('04: unfocused chip hovered', async () => {
|
|
46
|
+
await mouseOver(await DSChipCO.getChipByIndex(3));
|
|
47
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
48
|
+
await expect(snapshot).toEqual(0);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('05: truncated chip expands its label on hover', async () => {
|
|
52
|
+
await mouseOver(await DSChipCO.getChipByIndex(7));
|
|
53
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
54
|
+
await expect(snapshot).toEqual(0);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('06: long label chip hovered', async () => {
|
|
58
|
+
await mouseOver(await DSChipCO.getChipByIndex(2));
|
|
59
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
60
|
+
await expect(snapshot).toEqual(0);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('07: disabled chip hovered', async () => {
|
|
64
|
+
await mouseOver(await DSChipCO.getChipByIndex(4));
|
|
65
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
66
|
+
await expect(snapshot).toEqual(0);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
@@ -26,11 +26,20 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
26
26
|
await browser.eyesOpen();
|
|
27
27
|
const day = await DateRangePickerCO.getDayOnCalendarByIndex(20);
|
|
28
28
|
await day.click();
|
|
29
|
+
/*
|
|
30
|
+
* The pick that completes the range closes the calendar and returns focus to the trigger
|
|
31
|
+
* (PUI-15572, WCAG 3.2.2 On Input). Reopen it so the snapshot shows the selected range
|
|
32
|
+
* highlighted inside the calendar, and so the following tests still have it open.
|
|
33
|
+
*/
|
|
34
|
+
const reopenDatePicker = await DateRangePickerCO.getPickerBtn();
|
|
35
|
+
await reopenDatePicker.click();
|
|
29
36
|
const snapshot = await browser.eyesCheckSnapshot(DateRangePickerCO.snapshotPath('date-range-picker-two-date'));
|
|
30
37
|
await expect(snapshot).toEqual(0);
|
|
31
38
|
});
|
|
32
39
|
it('04: should display contr. date range picker open and with long range end', async () => {
|
|
33
40
|
await browser.eyesOpen();
|
|
41
|
+
// reopening in test 03 reset the next pick to "from", so this pick auto-orders into a
|
|
42
|
+
// cross-month range and leaves the calendar open instead of closing it
|
|
34
43
|
const nextMonthArrow = await DateRangePickerCO.getNextMonthBtn();
|
|
35
44
|
await nextMonthArrow.click();
|
|
36
45
|
const day = await DateRangePickerCO.getDayOnCalendarByIndex(10);
|
|
@@ -153,6 +153,32 @@ export default class GlobalHeader extends PageObject {
|
|
|
153
153
|
return $('[data-testid="pui18647-gh-apppicker-trigger-component"]');
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
+
// PUI-18985 selectors
|
|
157
|
+
|
|
158
|
+
// The out-of-the-box trigger the item renders when it supplies no custom one. Anchored on the
|
|
159
|
+
// accessible name, not on the testid alone: `gh-toolbar-item` is shared by every toolbar item type.
|
|
160
|
+
static async getAppPickerDefaultTrigger() {
|
|
161
|
+
return $('[data-testid="gh-toolbar-item"][aria-label="Apps"]');
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Elements carrying a given id. Returned as a collection rather than a single element so a caller
|
|
165
|
+
// can assert BOTH that a reference resolves and that it resolves exactly once — an id present twice
|
|
166
|
+
// is a broken document, and `getElementById`/`querySelector`/every `aria-*` reference would
|
|
167
|
+
// silently take the first match and hide it.
|
|
168
|
+
static async getElementsById(id) {
|
|
169
|
+
return $$(`[id="${id}"]`);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Every duplicated id in the page. Read across the whole document rather than probed id by id: the
|
|
173
|
+
// defect this guards against emitted one extra id as a side effect of being given one, so the
|
|
174
|
+
// assertion has to be able to see ids the test never named.
|
|
175
|
+
static async getDuplicateElementIds() {
|
|
176
|
+
return browser.execute(() => {
|
|
177
|
+
const ids = Array.from(document.querySelectorAll('[id]'), (node) => node.id);
|
|
178
|
+
return [...new Set(ids.filter((id, index) => ids.indexOf(id) !== index))];
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
156
182
|
// The popup-menu item's own root. Before PUI-18647 this element was an unstyled wrapper with no
|
|
157
183
|
// slot and no data-testid, so the item as a whole had no injection point.
|
|
158
184
|
static async getPopupMenuContainer() {
|
|
@@ -170,7 +196,7 @@ export default class GlobalHeader extends PageObject {
|
|
|
170
196
|
// The search-toggle item's root container. Item-level global attributes land HERE for this item
|
|
171
197
|
// type, not on the trigger button as with the sibling types.
|
|
172
198
|
static async getSearchToggleContainer() {
|
|
173
|
-
return $('[data-testid="ds-
|
|
199
|
+
return $('[data-testid="ds-global-header-menubar-item-searchtoggle-container"]');
|
|
174
200
|
}
|
|
175
201
|
|
|
176
202
|
static async getSearchTogglePrevButton() {
|
package/ds-global-header/app-picker-element-ids/GlobalHeader.app-picker-element-ids.func.spec.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import DSAppPickerCO from '../../ds-apppicker/DSAppPickerCO';
|
|
2
|
+
import GlobalHeaderCO from '../GlobalHeaderCO';
|
|
3
|
+
|
|
4
|
+
// Tests for the fix in PUI-18985. With the app picker expanded from the toolbar, axe reported
|
|
5
|
+
// `aria-dialog-name` (serious): the panel is a `role="dialog"` whose `aria-labelledby` pointed at a
|
|
6
|
+
// generated trigger id while the trigger itself carried the bare item id — a reference to no element,
|
|
7
|
+
// so the dialog had no accessible name at all.
|
|
8
|
+
//
|
|
9
|
+
// The cause was in DSAppPicker rather than the header. The item `id` rode along in the item-level
|
|
10
|
+
// global attributes and was spread onto the trigger AFTER the id DSAppPicker had supplied, which both
|
|
11
|
+
// broke the reference and emitted the same id twice. DSAppPicker now owns every id in the widget and
|
|
12
|
+
// derives them all from one value, and GlobalHeader hands the item id over through that route only.
|
|
13
|
+
//
|
|
14
|
+
// What QA has to know: the consumer's bare id moved OFF the trigger and ONTO the picker root. Suites
|
|
15
|
+
// that selected the trigger by the bare item id migrate to `getIdForAppPickerTrigger(id)`, exported by
|
|
16
|
+
// ds-app-picker. The suffix VALUES are pinned once, in that package's own unit tests, which is what
|
|
17
|
+
// keeps them renameable without breaking consumers — so this spec asserts the WIRING: that root,
|
|
18
|
+
// trigger and dialog agree, and that the reference resolves.
|
|
19
|
+
//
|
|
20
|
+
// The axe scan is deliberately not repeated here. PUI-12445 test 02 already scans this same story with
|
|
21
|
+
// the panel open, and it is the test that detected the violation.
|
|
22
|
+
//
|
|
23
|
+
// Chrome only: ids and aria-* attributes are identical in every engine. The `|| 'Chrome'` arm is
|
|
24
|
+
// mandatory (BrowserStack capitalises browserName; a lowercase-only guard registers zero tests and
|
|
25
|
+
// still exits 0).
|
|
26
|
+
if (
|
|
27
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
28
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
29
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
30
|
+
browser.capabilities.browserName === 'Chrome'
|
|
31
|
+
) {
|
|
32
|
+
describe('PUI-19156 - GlobalHeader:: app-picker element ids and dialog accessible name - Func', () => {
|
|
33
|
+
// The story's app-picker toolbar item declares `id: 'app-picker'`. Every id below is derived from
|
|
34
|
+
// it, which is the whole point: one value in, a predictable family out.
|
|
35
|
+
const ITEM_ID = 'app-picker';
|
|
36
|
+
const TRIGGER_ID = `${ITEM_ID}-dialog-trigger-btn`;
|
|
37
|
+
|
|
38
|
+
before('loading page', async () => {
|
|
39
|
+
const errorOnGo = await GlobalHeaderCO.basicTestURL.go();
|
|
40
|
+
if (errorOnGo) throw errorOnGo;
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('01: should suffix the trigger id and keep the bare item id off it', async () => {
|
|
44
|
+
const trigger = await GlobalHeaderCO.getAppPickerDefaultTrigger();
|
|
45
|
+
await trigger.waitForDisplayed();
|
|
46
|
+
|
|
47
|
+
// The breaking half for QA: the bare item id used to land here.
|
|
48
|
+
await expect(trigger).toHaveAttribute('id', TRIGGER_ID);
|
|
49
|
+
await expect((await GlobalHeaderCO.getElementsById(ITEM_ID)).length).toBe(0);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('02: should land the bare id on the root and name the dialog from the trigger', async () => {
|
|
53
|
+
await (await GlobalHeaderCO.getAppPickerDefaultTrigger()).click();
|
|
54
|
+
const root = await DSAppPickerCO.getAppPickerRoot();
|
|
55
|
+
await root.waitForDisplayed();
|
|
56
|
+
|
|
57
|
+
// The consumer's own value, unchanged, on the root — and nowhere else.
|
|
58
|
+
await expect(root).toHaveAttribute('id', ITEM_ID);
|
|
59
|
+
await expect((await GlobalHeaderCO.getElementsById(ITEM_ID)).length).toBe(1);
|
|
60
|
+
|
|
61
|
+
// The assertion the defect turns on: the reference has to RESOLVE. Reading the attribute's
|
|
62
|
+
// value alone would have passed happily while it pointed at nothing.
|
|
63
|
+
const dialog = await DSAppPickerCO.getFloatingWrapper();
|
|
64
|
+
await expect(dialog).toHaveAttribute('role', 'dialog');
|
|
65
|
+
await expect(dialog).toHaveAttribute('aria-labelledby', TRIGGER_ID);
|
|
66
|
+
await expect((await GlobalHeaderCO.getElementsById(TRIGGER_ID)).length).toBe(1);
|
|
67
|
+
|
|
68
|
+
// Both section headings are derived the same way and label their own group, so the assertion
|
|
69
|
+
// covers the whole id family rather than just the one the violation named.
|
|
70
|
+
const titleIds = await DSAppPickerCO.collect(await DSAppPickerCO.getTitles(), (title) =>
|
|
71
|
+
title.getAttribute('id'),
|
|
72
|
+
);
|
|
73
|
+
await expect(titleIds).toEqual([`${ITEM_ID}-section-title`, `${ITEM_ID}-custom-section-title`]);
|
|
74
|
+
|
|
75
|
+
const groupLabels = await DSAppPickerCO.collect(await DSAppPickerCO.getGroups(), (group) =>
|
|
76
|
+
group.getAttribute('aria-labelledby'),
|
|
77
|
+
);
|
|
78
|
+
await expect(groupLabels).toEqual(titleIds);
|
|
79
|
+
|
|
80
|
+
// The other half of the fix: handing the picker an id used to emit that id twice.
|
|
81
|
+
await expect(await GlobalHeaderCO.getDuplicateElementIds()).toEqual([]);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
@@ -7,11 +7,13 @@ import { type } from '../../helpers';
|
|
|
7
7
|
// - (NEW) item-level attributes now land on the item's ROOT CONTAINER, not on the trigger button as
|
|
8
8
|
// with the sibling item types. The type declared that surface on its configuration type and
|
|
9
9
|
// forwarded none of it, so data-public on a search-toggle entry appeared nowhere.
|
|
10
|
-
// - (
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
10
|
+
// - (NOT a rename, after all) that container's data-testid briefly became the auto-generated
|
|
11
|
+
// post-convention `ds-globalheader-...` spelling, because commit 295f110651c dropped its legacy
|
|
12
|
+
// override in constants/index.ts. This spec asserted that value and flagged the change, which is
|
|
13
|
+
// what raised PUI-19020; the override was then restored as a non-breaking-change obligation. The
|
|
14
|
+
// legacy `ds-global-header-menubar-item-searchtoggle-container` is the frozen expectation, and the
|
|
15
|
+
// element itself never changed through any of it — note the slot name below is identical either
|
|
16
|
+
// way, which is precisely why only the identifier needed defending.
|
|
15
17
|
// - (BREAKING) the two spinbutton result-navigation identifiers were INVERTED: the control that
|
|
16
18
|
// triggered NEXT was slotted as PREVIOUS and vice versa. The accessible names were always right,
|
|
17
19
|
// so testid and accessible name now agree. This is the one breaking change for QA here.
|
|
@@ -39,7 +41,7 @@ if (
|
|
|
39
41
|
await expect(container).toHaveAttribute('data-dimsum-slot', 'dsGlobalheaderMenubarItemSearchtoggleContainer');
|
|
40
42
|
|
|
41
43
|
const publicTestIds = await GlobalHeaderCO.getPublicNodeTestIds();
|
|
42
|
-
await expect(publicTestIds).toEqual(['ds-
|
|
44
|
+
await expect(publicTestIds).toEqual(['ds-global-header-menubar-item-searchtoggle-container', 'gh-toolbar-item']);
|
|
43
45
|
|
|
44
46
|
const dsTypedFlag = await GlobalHeaderCO.getDsTypedItemExistFlag();
|
|
45
47
|
await expect(dsTypedFlag).toHaveText('No');
|
|
@@ -51,7 +53,7 @@ if (
|
|
|
51
53
|
|
|
52
54
|
const publicTestIds = await GlobalHeaderCO.getPublicNodeTestIds();
|
|
53
55
|
await expect(publicTestIds).toEqual([
|
|
54
|
-
'ds-
|
|
56
|
+
'ds-global-header-menubar-item-searchtoggle-container',
|
|
55
57
|
'gh-toolbar-item',
|
|
56
58
|
'ds-globalheader-searchtoggle-expanded-content-wrapper',
|
|
57
59
|
'ds-globalheader-searchtoggle-textinput',
|
|
@@ -112,7 +114,7 @@ if (
|
|
|
112
114
|
const lastMatch = await GlobalHeaderCO.getSearchableRowByIndex(4);
|
|
113
115
|
await expect(await GlobalHeaderCO.isRowHighlighted(lastMatch)).toBe(false);
|
|
114
116
|
const publicTestIds = await GlobalHeaderCO.getPublicNodeTestIds();
|
|
115
|
-
await expect(publicTestIds).toEqual(['ds-
|
|
117
|
+
await expect(publicTestIds).toEqual(['ds-global-header-menubar-item-searchtoggle-container', 'gh-toolbar-item']);
|
|
116
118
|
});
|
|
117
119
|
});
|
|
118
120
|
}
|
|
@@ -12,7 +12,7 @@ if (
|
|
|
12
12
|
if (errorOnGo) throw errorOnGo;
|
|
13
13
|
});
|
|
14
14
|
it('01: should display basic GlobalHeadercwith customized slots', async () => {
|
|
15
|
-
await (await GlobalHeader.getGHMenubarItemButtonSlotByIndex(
|
|
15
|
+
await (await GlobalHeader.getGHMenubarItemButtonSlotByIndex(4)).click();
|
|
16
16
|
const snapshot = await browser.checkSnapshot(GlobalHeader.snapshotPath('global-header-slots'));
|
|
17
17
|
await expect(snapshot).toEqual(0);
|
|
18
18
|
});
|
package/ds-tabs/DSTabsCO.js
CHANGED
|
@@ -60,6 +60,8 @@ export default class DSTabsCO extends PageObject {
|
|
|
60
60
|
|
|
61
61
|
static allTabsDisabled = new Urlbuilder(PATH_E2E_TABS, 'all-tabs-disabled');
|
|
62
62
|
|
|
63
|
+
static withNotificationBadge = new Urlbuilder(PATH_E2E_TABS, 'with-notification-badge-test');
|
|
64
|
+
|
|
63
65
|
static getUrl(component = 'basic') {
|
|
64
66
|
return PageObject.getUrl(PATH_E2E_TABS, component);
|
|
65
67
|
}
|
|
@@ -102,6 +104,8 @@ export default class DSTabsCO extends PageObject {
|
|
|
102
104
|
|
|
103
105
|
static getTabByName = async (name) => $(`button*=${name}`);
|
|
104
106
|
|
|
107
|
+
static getTabBadges = async () => (await this.getTabsList()).$$('[data-testid="ds-notification-badge"]');
|
|
108
|
+
|
|
105
109
|
// Snapshots
|
|
106
110
|
static snapshotPath(example = 'basic') {
|
|
107
111
|
return PageObject.getSnapshotPathBuilder('Tabs', example);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import DSTabsCO from '../DSTabsCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
8
|
+
browser.capabilities.browserName === 'Chrome'
|
|
9
|
+
) {
|
|
10
|
+
describe('PUI-18932 - DSTabs:: notification badge tab list a11y scan - Axe-Core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSTabsCO.withNotificationBadge.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should have no violations with the badged tab selected', async () => {
|
|
17
|
+
await (await DSTabsCO.getTabsList()).waitForDisplayed();
|
|
18
|
+
const result = await axeCoreCheck();
|
|
19
|
+
await expect(result).toHaveLength(0);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('02: should have no violations after switching to a tab without a badge', async () => {
|
|
23
|
+
await (await DSTabsCO.getTabsByIndex(1)).click();
|
|
24
|
+
const result = await axeCoreCheck();
|
|
25
|
+
await expect(result).toHaveLength(0);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import DSTabsCO from '../DSTabsCO';
|
|
2
|
+
import DSNotificationBadgeCO from '../../ds-notification-badge/DSNotificationBadgeCO';
|
|
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-18931 - DSTabs:: notification badge in the tab accessible name - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSTabsCO.withNotificationBadge.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should expose a named badge into the tab name', async () => {
|
|
17
|
+
const badgedTab = await DSTabsCO.getTabsByIndex(0);
|
|
18
|
+
await badgedTab.waitForDisplayed();
|
|
19
|
+
|
|
20
|
+
const badge = await DSNotificationBadgeCO.getNotificationBadgeByIndex(0);
|
|
21
|
+
await expect(badge).toBeExisting();
|
|
22
|
+
await expect(badge).toHaveText('3');
|
|
23
|
+
|
|
24
|
+
const wrapper = await badge.parentElement();
|
|
25
|
+
await expect(wrapper).toHaveAttribute('role', 'img');
|
|
26
|
+
await expect(wrapper).toHaveAttribute('aria-label', '3 new notifications');
|
|
27
|
+
|
|
28
|
+
const computedName = await badgedTab.getComputedLabel();
|
|
29
|
+
expect(computedName).toMatch(/Fields Sent\s*3 new notifications/i);
|
|
30
|
+
expect(await badgedTab.getComputedRole()).toBe('tab');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('02: should announce tabs without a badge by their title only', async () => {
|
|
34
|
+
const plainTab = await DSTabsCO.getTabsByIndex(1);
|
|
35
|
+
const plainName = await plainTab.getComputedLabel();
|
|
36
|
+
expect(plainName.trim()).toMatch(/^Fields Received$/i);
|
|
37
|
+
expect(plainName).not.toContain('3');
|
|
38
|
+
|
|
39
|
+
const badges = await DSTabsCO.getTabBadges();
|
|
40
|
+
await expect(badges).toHaveLength(1);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('03: should keep the required tab announcing its Required indicator', async () => {
|
|
44
|
+
const requiredTab = await DSTabsCO.getTabsByIndex(3);
|
|
45
|
+
await expect(requiredTab).toHaveAttribute('data-required', 'true');
|
|
46
|
+
|
|
47
|
+
const requiredName = await requiredTab.getComputedLabel();
|
|
48
|
+
expect(requiredName).toMatch(/Required docs\s*Required/i);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "dimsum-e2e-tests",
|
|
4
|
-
"version": "3.70.0-alpha.
|
|
4
|
+
"version": "3.70.0-alpha.15",
|
|
5
5
|
"description": "End-to-end tests for dimsum library",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@elliemae/ds-legacy-button": "1.0.16",
|
|
@@ -38,154 +38,154 @@
|
|
|
38
38
|
"@elliemae/ds-legacy-wysiwygeditor": "1.0.16",
|
|
39
39
|
"@elliemae/ds-legacy-zipcode-search": "1.0.16",
|
|
40
40
|
"@elliemae/ds-legacy-zoom": "1.0.16",
|
|
41
|
-
"@elliemae/ds-accessibility": "3.70.0-alpha.
|
|
42
|
-
"@elliemae/ds-accordion": "3.70.0-alpha.
|
|
43
|
-
"@elliemae/ds-
|
|
44
|
-
"@elliemae/ds-backdrop": "3.70.0-alpha.
|
|
45
|
-
"@elliemae/ds-
|
|
46
|
-
"@elliemae/ds-
|
|
47
|
-
"@elliemae/ds-
|
|
48
|
-
"@elliemae/ds-
|
|
49
|
-
"@elliemae/ds-card
|
|
50
|
-
"@elliemae/ds-
|
|
51
|
-
"@elliemae/ds-card-
|
|
52
|
-
"@elliemae/ds-card-
|
|
53
|
-
"@elliemae/ds-card-v2
|
|
54
|
-
"@elliemae/ds-card-
|
|
55
|
-
"@elliemae/ds-card-
|
|
56
|
-
"@elliemae/ds-
|
|
57
|
-
"@elliemae/ds-card-
|
|
58
|
-
"@elliemae/ds-chat
|
|
59
|
-
"@elliemae/ds-card
|
|
60
|
-
"@elliemae/ds-chat-
|
|
61
|
-
"@elliemae/ds-chat-
|
|
62
|
-
"@elliemae/ds-chat-
|
|
63
|
-
"@elliemae/ds-chat-
|
|
64
|
-
"@elliemae/ds-chat-floating-button": "3.70.0-alpha.
|
|
65
|
-
"@elliemae/ds-chat-message-delimeter": "3.70.0-alpha.
|
|
66
|
-
"@elliemae/ds-chat-sidebar": "3.70.0-alpha.
|
|
67
|
-
"@elliemae/ds-chat-
|
|
68
|
-
"@elliemae/ds-
|
|
69
|
-
"@elliemae/ds-
|
|
70
|
-
"@elliemae/ds-
|
|
71
|
-
"@elliemae/ds-classnames": "3.70.0-alpha.
|
|
72
|
-
"@elliemae/ds-
|
|
73
|
-
"@elliemae/ds-
|
|
74
|
-
"@elliemae/ds-controlled-form": "3.70.0-alpha.
|
|
75
|
-
"@elliemae/ds-
|
|
76
|
-
"@elliemae/ds-
|
|
77
|
-
"@elliemae/ds-data-table-action-cell": "3.70.0-alpha.
|
|
78
|
-
"@elliemae/ds-data-table-cell": "3.70.0-alpha.
|
|
79
|
-
"@elliemae/ds-data-table
|
|
80
|
-
"@elliemae/ds-data-table-
|
|
81
|
-
"@elliemae/ds-data-table-
|
|
82
|
-
"@elliemae/ds-data-table-filters": "3.70.0-alpha.
|
|
83
|
-
"@elliemae/ds-data-table-
|
|
84
|
-
"@elliemae/ds-data-table-
|
|
85
|
-
"@elliemae/ds-dataviz": "3.70.0-alpha.
|
|
86
|
-
"@elliemae/ds-dataviz
|
|
87
|
-
"@elliemae/ds-
|
|
88
|
-
"@elliemae/ds-
|
|
89
|
-
"@elliemae/ds-
|
|
90
|
-
"@elliemae/ds-
|
|
91
|
-
"@elliemae/ds-fast-list": "3.70.0-alpha.
|
|
92
|
-
"@elliemae/ds-
|
|
93
|
-
"@elliemae/ds-
|
|
94
|
-
"@elliemae/ds-form-checkbox": "3.70.0-alpha.
|
|
95
|
-
"@elliemae/ds-
|
|
96
|
-
"@elliemae/ds-
|
|
97
|
-
"@elliemae/ds-
|
|
98
|
-
"@elliemae/ds-form-input-text": "3.70.0-alpha.
|
|
99
|
-
"@elliemae/ds-form-
|
|
100
|
-
"@elliemae/ds-form-
|
|
101
|
-
"@elliemae/ds-form-layout-autocomplete": "3.70.0-alpha.
|
|
102
|
-
"@elliemae/ds-form-
|
|
103
|
-
"@elliemae/ds-form-input-
|
|
104
|
-
"@elliemae/ds-form-layout-
|
|
105
|
-
"@elliemae/ds-form-
|
|
106
|
-
"@elliemae/ds-form-
|
|
107
|
-
"@elliemae/ds-form-
|
|
108
|
-
"@elliemae/ds-form-
|
|
109
|
-
"@elliemae/ds-form-
|
|
110
|
-
"@elliemae/ds-
|
|
111
|
-
"@elliemae/ds-form-single-combobox": "3.70.0-alpha.
|
|
112
|
-
"@elliemae/ds-
|
|
113
|
-
"@elliemae/ds-
|
|
114
|
-
"@elliemae/ds-hooks-
|
|
115
|
-
"@elliemae/ds-
|
|
116
|
-
"@elliemae/ds-hooks-fontsize-detector": "3.70.0-alpha.
|
|
117
|
-
"@elliemae/ds-hooks-
|
|
118
|
-
"@elliemae/ds-hooks-
|
|
119
|
-
"@elliemae/ds-hooks-
|
|
120
|
-
"@elliemae/ds-hooks-
|
|
121
|
-
"@elliemae/ds-hooks-
|
|
122
|
-
"@elliemae/ds-hooks-
|
|
123
|
-
"@elliemae/ds-
|
|
124
|
-
"@elliemae/ds-
|
|
125
|
-
"@elliemae/ds-
|
|
126
|
-
"@elliemae/ds-
|
|
127
|
-
"@elliemae/ds-
|
|
128
|
-
"@elliemae/ds-
|
|
129
|
-
"@elliemae/ds-
|
|
130
|
-
"@elliemae/ds-
|
|
131
|
-
"@elliemae/ds-
|
|
132
|
-
"@elliemae/ds-menu-items": "3.70.0-alpha.
|
|
133
|
-
"@elliemae/ds-menu-
|
|
134
|
-
"@elliemae/ds-menu-items-
|
|
135
|
-
"@elliemae/ds-menu-items-multi": "3.70.0-alpha.
|
|
136
|
-
"@elliemae/ds-menu-items-section": "3.70.0-alpha.
|
|
137
|
-
"@elliemae/ds-
|
|
138
|
-
"@elliemae/ds-menu-items-
|
|
139
|
-
"@elliemae/ds-menu-items-
|
|
140
|
-
"@elliemae/ds-menu-items-single": "3.70.0-alpha.
|
|
141
|
-
"@elliemae/ds-menu-
|
|
142
|
-
"@elliemae/ds-
|
|
143
|
-
"@elliemae/ds-
|
|
144
|
-
"@elliemae/ds-
|
|
145
|
-
"@elliemae/ds-
|
|
146
|
-
"@elliemae/ds-
|
|
147
|
-
"@elliemae/ds-
|
|
148
|
-
"@elliemae/ds-page-header": "3.70.0-alpha.
|
|
149
|
-
"@elliemae/ds-
|
|
150
|
-
"@elliemae/ds-page-header-v2": "3.70.0-alpha.
|
|
151
|
-
"@elliemae/ds-
|
|
152
|
-
"@elliemae/ds-
|
|
153
|
-
"@elliemae/ds-
|
|
154
|
-
"@elliemae/ds-
|
|
155
|
-
"@elliemae/ds-
|
|
156
|
-
"@elliemae/ds-
|
|
157
|
-
"@elliemae/ds-
|
|
158
|
-
"@elliemae/ds-
|
|
159
|
-
"@elliemae/ds-
|
|
160
|
-
"@elliemae/ds-
|
|
161
|
-
"@elliemae/ds-separator": "3.70.0-alpha.
|
|
162
|
-
"@elliemae/ds-
|
|
163
|
-
"@elliemae/ds-
|
|
164
|
-
"@elliemae/ds-
|
|
165
|
-
"@elliemae/ds-side-panel": "3.70.0-alpha.
|
|
166
|
-
"@elliemae/ds-
|
|
167
|
-
"@elliemae/ds-
|
|
168
|
-
"@elliemae/ds-
|
|
169
|
-
"@elliemae/ds-stepper": "3.70.0-alpha.
|
|
170
|
-
"@elliemae/ds-
|
|
171
|
-
"@elliemae/ds-
|
|
172
|
-
"@elliemae/ds-
|
|
173
|
-
"@elliemae/ds-
|
|
174
|
-
"@elliemae/ds-toast": "3.70.0-alpha.
|
|
175
|
-
"@elliemae/ds-test-utils": "3.70.0-alpha.
|
|
176
|
-
"@elliemae/ds-toolbar-v1": "3.70.0-alpha.
|
|
177
|
-
"@elliemae/ds-
|
|
178
|
-
"@elliemae/ds-
|
|
179
|
-
"@elliemae/ds-transition": "3.70.0-alpha.
|
|
180
|
-
"@elliemae/ds-
|
|
181
|
-
"@elliemae/ds-
|
|
182
|
-
"@elliemae/ds-truncated-expandable-text": "3.70.0-alpha.
|
|
183
|
-
"@elliemae/ds-
|
|
184
|
-
"@elliemae/ds-virtual-list": "3.70.0-alpha.
|
|
185
|
-
"@elliemae/ds-
|
|
186
|
-
"@elliemae/ds-
|
|
187
|
-
"@elliemae/ds-
|
|
188
|
-
"@elliemae/ds-
|
|
41
|
+
"@elliemae/ds-accessibility": "3.70.0-alpha.15",
|
|
42
|
+
"@elliemae/ds-accordion": "3.70.0-alpha.15",
|
|
43
|
+
"@elliemae/ds-app-picker": "3.70.0-alpha.15",
|
|
44
|
+
"@elliemae/ds-backdrop": "3.70.0-alpha.15",
|
|
45
|
+
"@elliemae/ds-banner": "3.70.0-alpha.15",
|
|
46
|
+
"@elliemae/ds-basic": "3.70.0-alpha.15",
|
|
47
|
+
"@elliemae/ds-breadcrumb": "3.70.0-alpha.15",
|
|
48
|
+
"@elliemae/ds-button-v2": "3.70.0-alpha.15",
|
|
49
|
+
"@elliemae/ds-card": "3.70.0-alpha.15",
|
|
50
|
+
"@elliemae/ds-card-navigation": "3.70.0-alpha.15",
|
|
51
|
+
"@elliemae/ds-card-v2-action-addon": "3.70.0-alpha.15",
|
|
52
|
+
"@elliemae/ds-card-v1": "3.70.0-alpha.15",
|
|
53
|
+
"@elliemae/ds-card-v2": "3.70.0-alpha.15",
|
|
54
|
+
"@elliemae/ds-card-v3": "3.70.0-alpha.15",
|
|
55
|
+
"@elliemae/ds-card-v1-detail": "3.70.0-alpha.15",
|
|
56
|
+
"@elliemae/ds-card-v3-poc": "3.70.0-alpha.15",
|
|
57
|
+
"@elliemae/ds-card-v2-group": "3.70.0-alpha.15",
|
|
58
|
+
"@elliemae/ds-chat": "3.70.0-alpha.15",
|
|
59
|
+
"@elliemae/ds-chat-card": "3.70.0-alpha.15",
|
|
60
|
+
"@elliemae/ds-chat-bubble": "3.70.0-alpha.15",
|
|
61
|
+
"@elliemae/ds-chat-container": "3.70.0-alpha.15",
|
|
62
|
+
"@elliemae/ds-chat-empty-state": "3.70.0-alpha.15",
|
|
63
|
+
"@elliemae/ds-chat-container-header": "3.70.0-alpha.15",
|
|
64
|
+
"@elliemae/ds-chat-floating-button": "3.70.0-alpha.15",
|
|
65
|
+
"@elliemae/ds-chat-message-delimeter": "3.70.0-alpha.15",
|
|
66
|
+
"@elliemae/ds-chat-sidebar": "3.70.0-alpha.15",
|
|
67
|
+
"@elliemae/ds-chat-system-message": "3.70.0-alpha.15",
|
|
68
|
+
"@elliemae/ds-chat-tile": "3.70.0-alpha.15",
|
|
69
|
+
"@elliemae/ds-chip": "3.70.0-alpha.15",
|
|
70
|
+
"@elliemae/ds-circular-progress-indicator": "3.70.0-alpha.15",
|
|
71
|
+
"@elliemae/ds-classnames": "3.70.0-alpha.15",
|
|
72
|
+
"@elliemae/ds-comments": "3.70.0-alpha.15",
|
|
73
|
+
"@elliemae/ds-codeeditor": "3.70.0-alpha.15",
|
|
74
|
+
"@elliemae/ds-controlled-form": "3.70.0-alpha.15",
|
|
75
|
+
"@elliemae/ds-data-table-cell": "3.70.0-alpha.15",
|
|
76
|
+
"@elliemae/ds-csv-converter": "3.70.0-alpha.15",
|
|
77
|
+
"@elliemae/ds-data-table-action-cell": "3.70.0-alpha.15",
|
|
78
|
+
"@elliemae/ds-data-table-cell-header": "3.70.0-alpha.15",
|
|
79
|
+
"@elliemae/ds-data-table": "3.70.0-alpha.15",
|
|
80
|
+
"@elliemae/ds-data-table-drag-and-drop-cell": "3.70.0-alpha.15",
|
|
81
|
+
"@elliemae/ds-data-table-expand-cell": "3.70.0-alpha.15",
|
|
82
|
+
"@elliemae/ds-data-table-filters": "3.70.0-alpha.15",
|
|
83
|
+
"@elliemae/ds-data-table-single-select-cell": "3.70.0-alpha.15",
|
|
84
|
+
"@elliemae/ds-data-table-multi-select-cell": "3.70.0-alpha.15",
|
|
85
|
+
"@elliemae/ds-dataviz-pie": "3.70.0-alpha.15",
|
|
86
|
+
"@elliemae/ds-dataviz": "3.70.0-alpha.15",
|
|
87
|
+
"@elliemae/ds-decision-graph": "3.70.0-alpha.15",
|
|
88
|
+
"@elliemae/ds-drag-and-drop": "3.70.0-alpha.15",
|
|
89
|
+
"@elliemae/ds-date-time-picker": "3.70.0-alpha.15",
|
|
90
|
+
"@elliemae/ds-dropzone": "3.70.0-alpha.15",
|
|
91
|
+
"@elliemae/ds-fast-list": "3.70.0-alpha.15",
|
|
92
|
+
"@elliemae/ds-dropdownmenu-v2": "3.70.0-alpha.15",
|
|
93
|
+
"@elliemae/ds-filter-bar": "3.70.0-alpha.15",
|
|
94
|
+
"@elliemae/ds-form-checkbox": "3.70.0-alpha.15",
|
|
95
|
+
"@elliemae/ds-floating-context": "3.70.0-alpha.15",
|
|
96
|
+
"@elliemae/ds-form-combobox": "3.70.0-alpha.15",
|
|
97
|
+
"@elliemae/ds-form-date-range-picker": "3.70.0-alpha.15",
|
|
98
|
+
"@elliemae/ds-form-input-text": "3.70.0-alpha.15",
|
|
99
|
+
"@elliemae/ds-form-date-time-picker": "3.70.0-alpha.15",
|
|
100
|
+
"@elliemae/ds-form-input-textarea": "3.70.0-alpha.15",
|
|
101
|
+
"@elliemae/ds-form-layout-autocomplete": "3.70.0-alpha.15",
|
|
102
|
+
"@elliemae/ds-form-layout-blocks": "3.70.0-alpha.15",
|
|
103
|
+
"@elliemae/ds-form-layout-input-group": "3.70.0-alpha.15",
|
|
104
|
+
"@elliemae/ds-form-layout-label": "3.70.0-alpha.15",
|
|
105
|
+
"@elliemae/ds-form-multi-combobox": "3.70.0-alpha.15",
|
|
106
|
+
"@elliemae/ds-form-radio": "3.70.0-alpha.15",
|
|
107
|
+
"@elliemae/ds-form-native-select": "3.70.0-alpha.15",
|
|
108
|
+
"@elliemae/ds-form-select": "3.70.0-alpha.15",
|
|
109
|
+
"@elliemae/ds-form-toggle": "3.70.0-alpha.15",
|
|
110
|
+
"@elliemae/ds-global-header": "3.70.0-alpha.15",
|
|
111
|
+
"@elliemae/ds-form-single-combobox": "3.70.0-alpha.15",
|
|
112
|
+
"@elliemae/ds-grid": "3.70.0-alpha.15",
|
|
113
|
+
"@elliemae/ds-hooks-focus-stack": "3.70.0-alpha.15",
|
|
114
|
+
"@elliemae/ds-hooks-fontsize-media": "3.70.0-alpha.15",
|
|
115
|
+
"@elliemae/ds-hooks-focus-trap": "3.70.0-alpha.15",
|
|
116
|
+
"@elliemae/ds-hooks-fontsize-detector": "3.70.0-alpha.15",
|
|
117
|
+
"@elliemae/ds-hooks-headless-tooltip": "3.70.0-alpha.15",
|
|
118
|
+
"@elliemae/ds-hooks-is-mobile": "3.70.0-alpha.15",
|
|
119
|
+
"@elliemae/ds-hooks-is-showing-ellipsis": "3.70.0-alpha.15",
|
|
120
|
+
"@elliemae/ds-hooks-keyboard-navigation": "3.70.0-alpha.15",
|
|
121
|
+
"@elliemae/ds-hooks-on-first-focus-in": "3.70.0-alpha.15",
|
|
122
|
+
"@elliemae/ds-hooks-on-blur-out": "3.70.0-alpha.15",
|
|
123
|
+
"@elliemae/ds-icon": "3.70.0-alpha.15",
|
|
124
|
+
"@elliemae/ds-image": "3.70.0-alpha.15",
|
|
125
|
+
"@elliemae/ds-icons": "3.70.0-alpha.15",
|
|
126
|
+
"@elliemae/ds-indeterminate-progress-indicator": "3.70.0-alpha.15",
|
|
127
|
+
"@elliemae/ds-imagelibrarymodal": "3.70.0-alpha.15",
|
|
128
|
+
"@elliemae/ds-layout-provider": "3.70.0-alpha.15",
|
|
129
|
+
"@elliemae/ds-loading-indicator": "3.70.0-alpha.15",
|
|
130
|
+
"@elliemae/ds-left-navigation": "3.70.0-alpha.15",
|
|
131
|
+
"@elliemae/ds-menu-button": "3.70.0-alpha.15",
|
|
132
|
+
"@elliemae/ds-menu-items": "3.70.0-alpha.15",
|
|
133
|
+
"@elliemae/ds-menu-items-action": "3.70.0-alpha.15",
|
|
134
|
+
"@elliemae/ds-menu-items-commons": "3.70.0-alpha.15",
|
|
135
|
+
"@elliemae/ds-menu-items-multi": "3.70.0-alpha.15",
|
|
136
|
+
"@elliemae/ds-menu-items-section": "3.70.0-alpha.15",
|
|
137
|
+
"@elliemae/ds-menu-items-separator": "3.70.0-alpha.15",
|
|
138
|
+
"@elliemae/ds-menu-items-skeleton": "3.70.0-alpha.15",
|
|
139
|
+
"@elliemae/ds-menu-items-submenu": "3.70.0-alpha.15",
|
|
140
|
+
"@elliemae/ds-menu-items-single-with-submenu": "3.70.0-alpha.15",
|
|
141
|
+
"@elliemae/ds-menu-tree-item": "3.70.0-alpha.15",
|
|
142
|
+
"@elliemae/ds-dialog": "3.70.0-alpha.15",
|
|
143
|
+
"@elliemae/ds-mobile": "3.70.0-alpha.15",
|
|
144
|
+
"@elliemae/ds-modal-slide": "3.70.0-alpha.15",
|
|
145
|
+
"@elliemae/ds-notification-badge": "3.70.0-alpha.15",
|
|
146
|
+
"@elliemae/ds-overlay": "3.70.0-alpha.15",
|
|
147
|
+
"@elliemae/ds-page-header": "3.70.0-alpha.15",
|
|
148
|
+
"@elliemae/ds-page-header-v1": "3.70.0-alpha.15",
|
|
149
|
+
"@elliemae/ds-menu-items-single": "3.70.0-alpha.15",
|
|
150
|
+
"@elliemae/ds-page-header-v2": "3.70.0-alpha.15",
|
|
151
|
+
"@elliemae/ds-pagination": "3.70.0-alpha.15",
|
|
152
|
+
"@elliemae/ds-page-layout": "3.70.0-alpha.15",
|
|
153
|
+
"@elliemae/ds-progress-indicator": "3.70.0-alpha.15",
|
|
154
|
+
"@elliemae/ds-props-helpers": "3.70.0-alpha.15",
|
|
155
|
+
"@elliemae/ds-query-builder": "3.70.0-alpha.15",
|
|
156
|
+
"@elliemae/ds-resizeable-container": "3.70.0-alpha.15",
|
|
157
|
+
"@elliemae/ds-ribbon": "3.70.0-alpha.15",
|
|
158
|
+
"@elliemae/ds-scrollable-container": "3.70.0-alpha.15",
|
|
159
|
+
"@elliemae/ds-read-more": "3.70.0-alpha.15",
|
|
160
|
+
"@elliemae/ds-shared": "3.70.0-alpha.15",
|
|
161
|
+
"@elliemae/ds-separator": "3.70.0-alpha.15",
|
|
162
|
+
"@elliemae/ds-form-helpers-mask-hooks": "3.70.0-alpha.15",
|
|
163
|
+
"@elliemae/ds-shuttle-v2": "3.70.0-alpha.15",
|
|
164
|
+
"@elliemae/ds-side-panel": "3.70.0-alpha.15",
|
|
165
|
+
"@elliemae/ds-side-panel-header": "3.70.0-alpha.15",
|
|
166
|
+
"@elliemae/ds-pills-v2": "3.70.0-alpha.15",
|
|
167
|
+
"@elliemae/ds-skeleton": "3.70.0-alpha.15",
|
|
168
|
+
"@elliemae/ds-slider-v2": "3.70.0-alpha.15",
|
|
169
|
+
"@elliemae/ds-stepper": "3.70.0-alpha.15",
|
|
170
|
+
"@elliemae/ds-system": "3.70.0-alpha.15",
|
|
171
|
+
"@elliemae/ds-square-indicator": "3.70.0-alpha.15",
|
|
172
|
+
"@elliemae/ds-tabs": "3.70.0-alpha.15",
|
|
173
|
+
"@elliemae/ds-svg": "3.70.0-alpha.15",
|
|
174
|
+
"@elliemae/ds-toast": "3.70.0-alpha.15",
|
|
175
|
+
"@elliemae/ds-test-utils": "3.70.0-alpha.15",
|
|
176
|
+
"@elliemae/ds-toolbar-v1": "3.70.0-alpha.15",
|
|
177
|
+
"@elliemae/ds-toolbar-v2": "3.70.0-alpha.15",
|
|
178
|
+
"@elliemae/ds-tooltip-v3": "3.70.0-alpha.15",
|
|
179
|
+
"@elliemae/ds-transition": "3.70.0-alpha.15",
|
|
180
|
+
"@elliemae/ds-treeview": "3.70.0-alpha.15",
|
|
181
|
+
"@elliemae/ds-tree-model": "3.70.0-alpha.15",
|
|
182
|
+
"@elliemae/ds-truncated-expandable-text": "3.70.0-alpha.15",
|
|
183
|
+
"@elliemae/ds-typography": "3.70.0-alpha.15",
|
|
184
|
+
"@elliemae/ds-virtual-list": "3.70.0-alpha.15",
|
|
185
|
+
"@elliemae/ds-typescript-helpers": "3.70.0-alpha.15",
|
|
186
|
+
"@elliemae/ds-zustand-helpers": "3.70.0-alpha.15",
|
|
187
|
+
"@elliemae/ds-wizard": "3.70.0-alpha.15",
|
|
188
|
+
"@elliemae/ds-portal": "3.70.0-alpha.15"
|
|
189
189
|
},
|
|
190
190
|
"publishConfig": {
|
|
191
191
|
"access": "public"
|
package/paths.js
CHANGED
|
@@ -464,3 +464,7 @@ export const PATH_END_OF_LIFE_PAGE_HEADER_V1 = `${PATH_END_OF_LIFE}/PageHeaderV1
|
|
|
464
464
|
export const PATH_END_OF_LIFE_SHUTTLE = `${PATH_END_OF_LIFE}/Shuttle`;
|
|
465
465
|
export const PATH_END_OF_LIFE_FILTERBAR = `${PATH_END_OF_LIFE}/FilterBar`;
|
|
466
466
|
export const PATH_SPINNER = `${PATH_END_OF_LIFE}/Spinner/Examples`;
|
|
467
|
+
|
|
468
|
+
// accessibility conformance docs pages
|
|
469
|
+
// The consumer view lives under Resources; the internal views share the
|
|
470
|
+
// `Principles/Accessibility` title with the rest of the a11y documentation.
|
package/z-index/ZindexCO.js
CHANGED
|
@@ -82,6 +82,10 @@ export default class ZIndexCO extends PageObject {
|
|
|
82
82
|
|
|
83
83
|
// Dialog from side panel
|
|
84
84
|
|
|
85
|
+
static getCloseDialogBtn() {
|
|
86
|
+
return $('[data-testid="close-dialog-button"]');
|
|
87
|
+
}
|
|
88
|
+
|
|
85
89
|
static getToggleModalSlideWithinDialog() {
|
|
86
90
|
return $('[data-testid="toggle-btn"]');
|
|
87
91
|
}
|
|
@@ -40,7 +40,13 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
40
40
|
it('04: should display date correctly', async () => {
|
|
41
41
|
await browser.eyesOpen();
|
|
42
42
|
await (await ZIndexCO.getPickerChip(2)).click();
|
|
43
|
-
|
|
43
|
+
/*
|
|
44
|
+
* Escape cannot unwind these layers: focus sits on a chip whose label overflows, so the
|
|
45
|
+
* label is expanded and ds-chip consumes the first Escape to dismiss it (PUI-17950,
|
|
46
|
+
* WCAG 1.4.13) before the picker or the dialog ever see it. Closing the dialog explicitly
|
|
47
|
+
* tears down the picker with it, and leaves the side panel button free of the backdrop.
|
|
48
|
+
*/
|
|
49
|
+
await (await ZIndexCO.getCloseDialogBtn()).click();
|
|
44
50
|
await (await ZIndexCO.getOpenDialogOnSidePanel()).click();
|
|
45
51
|
const dateTrigger = await ZIndexCO.getDateTimeOnSidePanelDialog();
|
|
46
52
|
await dateTrigger.click();
|