dimsum-e2e-tests 3.70.0-next.3 → 3.70.0-next.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/CHANGELOG.md +158 -0
  2. package/ds-accordion-native/DSAccordionNative.axe-core.func.spec.js +117 -0
  3. package/ds-accordion-native/DSAccordionNative.func.spec.js +178 -0
  4. package/ds-accordion-native/DSAccordionNative.visual.spec.js +131 -0
  5. package/ds-accordion-native/DSAccordionNativeCO.js +149 -0
  6. package/ds-accordion-native/aria-disabled/DSAccordionNative.aria-disabled.axe-core.func.spec.js +25 -0
  7. package/ds-accordion-native/aria-disabled/DSAccordionNative.aria-disabled.visual.spec.js +27 -0
  8. package/ds-accordion-native/role/DSAccordionNative.role-heading.func.spec.js +27 -0
  9. package/ds-accordion-native/scrollable-content/DSAccordionNative.scrollable-content.visual.spec.js +48 -0
  10. package/ds-accordion-native/slots/DSAccordionNative.slots.axe-core.func.spec.js +25 -0
  11. package/ds-accordion-native/slots/DSAccordionNative.slots.func.spec.js +73 -0
  12. package/ds-accordion-native/slots/DSAccordionNative.slots.visual.spec.js +18 -0
  13. package/ds-accordion-native/wrapLabel/DSAccordionNative.wrap-label.visual.spec.js +22 -0
  14. package/ds-apppicker/DSAppPickerCO.js +1 -1
  15. package/ds-autocomplete/DSAutocomplete.visual.spec.js +34 -0
  16. package/ds-autocomplete/DSAutocompleteCO.js +2 -0
  17. package/ds-chat/DSChat.axe-core.func.spec.js +2 -2
  18. package/ds-chat/DSChat.visual.spec.js +3 -3
  19. package/ds-chat/DSChatCO.js +17 -23
  20. package/ds-chat/bubbles/slots/DSChatBubble.slots.axe-core.func.spec.js +24 -0
  21. package/ds-chat/bubbles/slots/DSChatBubble.slots.func.spec.js +49 -0
  22. package/ds-chat/bubbles/slots/DSChatBubble.slots.visual.spec.js +25 -0
  23. package/ds-chat/card/slots/DSChatCard.slots.axe-core.func.spec.js +24 -0
  24. package/ds-chat/card/slots/DSChatCard.slots.func.spec.js +47 -0
  25. package/ds-chat/card/slots/DSChatCard.slots.visual.spec.js +18 -0
  26. package/ds-chat/card/truncated-text/DSChatCard.truncated-text.func.spec.js +32 -0
  27. package/ds-chat/card/truncated-text/DSChatCard.truncated-text.visual.spec.js +26 -0
  28. package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.axe-core.func.spec.js +23 -0
  29. package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.visual.spec.js +17 -0
  30. package/ds-chat/components/BubbleCO.js +46 -3
  31. package/ds-chat/components/CardCO.js +77 -0
  32. package/ds-chat/components/ComposerCO.js +6 -6
  33. package/ds-chat/components/FloatingButtonCO.js +2 -2
  34. package/ds-chat/components/HeaderCO.js +2 -2
  35. package/ds-chat/components/TileCO.js +82 -0
  36. package/ds-chat/components/index.js +3 -2
  37. package/ds-chat/loadmore/DSChat-loadmore.func.spec.js +1 -1
  38. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.axe-core.func.spec.js +2 -2
  39. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.func.spec.js +1 -1
  40. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.visual.spec.js +2 -2
  41. package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.axe-core.func.spec.js +2 -2
  42. package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.visual.spec.js +1 -1
  43. package/ds-chat/tile/slots/DSChatTile.slots.func.spec.js +53 -0
  44. package/ds-chat/tile/slots/DSChatTile.slots.visual.spec.js +18 -0
  45. package/ds-controlled-form/ds-combobox/DSComboboxCO.js +2 -2
  46. package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +1 -1
  47. package/ds-controlled-form/ds-controlled-inputgroup/DSControlledInputGroupCO.js +1 -1
  48. package/ds-data-table-async/DSDataTableCO.js +10 -12
  49. package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -1
  50. package/ds-data-table-async/components/FiltersCO.js +1 -1
  51. package/ds-data-table-async/components/HeaderCO.js +22 -10
  52. package/ds-dialog/DSDialog.visual.spec.js +16 -31
  53. package/ds-dialog/DSDialogCO.js +58 -0
  54. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.axe-core.func.spec.js +27 -0
  55. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.func.spec.js +56 -0
  56. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.visual.spec.js +20 -0
  57. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.axe-core.func.spec.js +25 -0
  58. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.func.spec.js +52 -0
  59. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.visual.spec.js +20 -0
  60. package/ds-dialog/axe-core/DSDialog.accessible-form.axe-core.func.spec.js +25 -0
  61. package/ds-dialog/axe-core/DSDialog.basic.axe-core.func.spec.js +25 -0
  62. package/ds-dialog/axe-core/DSDialog.centered.axe-core.func.spec.js +25 -0
  63. package/ds-dialog/axe-core/DSDialog.decision.axe-core.func.spec.js +57 -0
  64. package/ds-dialog/axe-core/DSDialog.long-body.axe-core.func.spec.js +25 -0
  65. package/ds-dialog/axe-core/DSDialog.warning.axe-core.func.spec.js +24 -0
  66. package/ds-dialog/axe-core/DSDialog.wizard.axe-core.func.spec.js +28 -0
  67. package/ds-dialog/click-outside/DSDialog.click-outside.func.spec.js +31 -0
  68. package/ds-dialog/esc-close/DSDialog.esc-close.func.spec.js +31 -0
  69. package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.axe-core.func.spec.js +46 -0
  70. package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.func.spec.js +50 -0
  71. package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.axe-core.func.spec.js +25 -0
  72. package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.visual.spec.js +37 -0
  73. package/ds-dialog/single-button-footer/DSDialog.single-button-footer.axe-core.func.spec.js +25 -0
  74. package/ds-dialog/single-button-footer/DSDialog.single-button-footer.visual.spec.js +20 -0
  75. package/ds-dialog/size-variants/DSDialog.size-variants.visual.spec.js +116 -0
  76. package/ds-floating-context/DSFloatingContextCO.js +10 -0
  77. package/ds-floating-context/placement/DSFloatingContext.placement.visual.spec.js +48 -0
  78. package/ds-form-combobox-multi/DSComboboxMultiCO.js +8 -2
  79. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +55 -0
  80. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
  81. package/ds-form-combobox-multi/aria-disabled/DSComboboxMulti.aria-disabled.visual.spec.js +15 -0
  82. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
  83. package/ds-form-combobox-multi/inline/DSComboboxMulti.inline.visual.spec.js +21 -0
  84. package/ds-form-combobox-single/DSComboboxSingleCO.js +8 -2
  85. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.axe-core.func.spec.js +49 -0
  86. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js +54 -0
  87. package/ds-form-combobox-single/aria-disabled/DSComboboxSingle.aria-disabled.visual.spec.js +18 -0
  88. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
  89. package/ds-form-combobox-single/inline/DSComboboxSingle.inline.visual.spec.js +23 -0
  90. package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
  91. package/ds-form-native-select/NativeSelect.visual.spec.js +33 -0
  92. package/ds-form-native-select/NativeSelectCO.js +6 -0
  93. package/ds-form-native-select/option-selection/NativeSelect.option-selection.func.spec.js +25 -0
  94. package/ds-global-header/GlobalHeader.axe-core.func.spec.js +30 -0
  95. package/ds-global-header/GlobalHeader.visual.spec.js +31 -0
  96. package/ds-leftnavigation/LeftNavigationCO.js +2 -2
  97. package/ds-menu-button/DSMenuButtonCO.js +23 -0
  98. package/ds-menu-button/slots/DSMenuButton.slots.func.spec.js +40 -0
  99. package/ds-menu-button/slots/DSMenuButton.slots.visual.spec.js +26 -0
  100. package/ds-modal-slide/ModalSlideCO.js +39 -0
  101. package/ds-modal-slide/custom-header/ModalSlide.customHeader.focusRing.visual.spec.js +2 -1
  102. package/ds-modal-slide/slots/ModalSlide.slots.func.spec.js +74 -0
  103. package/ds-modal-slide/slots/ModalSlide.slots.visual.spec.js +27 -0
  104. package/ds-page-layout/PageLayoutCO.js +4 -4
  105. package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +2 -0
  106. package/ds-progress-indicator/DSProgressIndicatorCO.js +1 -1
  107. package/ds-tab-button/DSTabButton.func.spec.js +1 -1
  108. package/ds-tabs/DSTabs.visual.spec.js +1 -2
  109. package/ds-tabs/DSTabsCO.js +2 -2
  110. package/ds-tabs/with-carousel/DSTabs.with-carousel.func.spec.js +22 -7
  111. package/ds-tabs/with-carousel/DSTabs.with-carousel.visual.spec.js +9 -9
  112. package/ds-tooltip-v3/DSTooltipV3CO.js +6 -0
  113. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js +23 -0
  114. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.func.spec.js +29 -0
  115. package/ds-treeview/DSTreeViewCO.js +2 -2
  116. package/package.json +150 -153
  117. package/paths.js +8 -1
  118. package/ds-chat-tile/TileCO.js +0 -35
@@ -0,0 +1,149 @@
1
+ /* eslint-disable import/no-relative-packages */
2
+ import { ACCORDION_NATIVE_DATA_TESTID } from '@elliemae/ds-accordion-native';
3
+ import { PATH_E2E_ACCORDION_NATIVE } from '../paths';
4
+ import { PageObject, Urlbuilder, getElementByIndex } from '../helpers';
5
+
6
+ export default class DSAccordionNativeCO extends PageObject {
7
+ // Desktop URLs
8
+ static basicURL = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'basic-test');
9
+
10
+ static multipleURL = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'multiple-test');
11
+
12
+ static controlled = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'controlled-test');
13
+
14
+ static disabled = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'disabled-test');
15
+
16
+ static applyAriaDisabled = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'apply-aria-disabled-test');
17
+
18
+ static subtitle = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'with-secondary-title-test');
19
+
20
+ static headerControls = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'header-control-examples-test');
21
+
22
+ static customActions = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'render-custom-actions-test');
23
+
24
+ static scrollableContent = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'scrollable-content-test');
25
+
26
+ static wrapLabel = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'wrap-label');
27
+
28
+ static toMobileURL = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'desktop-to-mobile-test');
29
+
30
+ static slotsURL = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'slots-test');
31
+
32
+ static customActionHooks = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'custom-actions-with-hooks');
33
+
34
+ static datepickerInside = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'actionable-within');
35
+
36
+ static conditionalRender = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'pui-11406-null-check');
37
+
38
+ static inputInside = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'pui-9261-input-inside');
39
+
40
+ static xstyledContent = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'xstyledprops-in-content');
41
+
42
+ static tooltip = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'tooltip');
43
+
44
+ static globalHeight = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'global-height');
45
+
46
+ static keepContentURL = new Urlbuilder(PATH_E2E_ACCORDION_NATIVE, 'keep-content-mounted');
47
+
48
+ // Snapshots
49
+ static snapshotPath(example = 'basic') {
50
+ return PageObject.getSnapshotPathBuilder('AccordionNative', example, 'ds-accordion-native');
51
+ }
52
+
53
+ // Core selectors
54
+ static async getWrapper() {
55
+ return $(`[data-testid="${ACCORDION_NATIVE_DATA_TESTID.ROOT}"]`);
56
+ }
57
+
58
+ // The POC's "click target" is <summary>; this is what gets focused / pressed /
59
+ // hovered in tests — equivalent to the prod accordion's "accordion header".
60
+ static async getAccordionHeaders() {
61
+ return $$(`[data-testid="${ACCORDION_NATIVE_DATA_TESTID.ITEM_SUMMARY}"]`);
62
+ }
63
+
64
+ static async getAccordionHeader(index) {
65
+ return (await this.getAccordionHeaders())[index];
66
+ }
67
+
68
+ static async getAccordionItems() {
69
+ return $$(`[data-testid="${ACCORDION_NATIVE_DATA_TESTID.ITEM_CONTAINER}"]`);
70
+ }
71
+
72
+ static async getAccordionItem(index) {
73
+ return (await this.getAccordionItems())[index];
74
+ }
75
+
76
+ // The POC keeps content inside <details>; visibility is driven by the native
77
+ // open state. `[open]` exists on the <details> element when the item is
78
+ // expanded — so we use that as the content-displayed signal.
79
+ static async getContents(index) {
80
+ const items = await this.getAccordionItems();
81
+ const item = items[index];
82
+ return item?.$(`[data-testid="${ACCORDION_NATIVE_DATA_TESTID.ITEM_CONTENT_CONTAINER}"]`);
83
+ }
84
+
85
+ static async getDetailsByIndex(index) {
86
+ const items = await this.getAccordionItems();
87
+ const item = items[index];
88
+ return item?.$(`[data-testid="${ACCORDION_NATIVE_DATA_TESTID.ITEM_DETAILS}"]`);
89
+ }
90
+
91
+ static async getHeadings() {
92
+ return $$(`[data-testid="${ACCORDION_NATIVE_DATA_TESTID.ITEM_HEADING}"]`);
93
+ }
94
+
95
+ static async getHeadingByIndex(index) {
96
+ return (await this.getHeadings())[index];
97
+ }
98
+
99
+ static async getButtons() {
100
+ return $$('[data-testid="ds-button"]');
101
+ }
102
+
103
+ static getButtonsByIndex = async (index) => getElementByIndex(this.getButtons, index);
104
+
105
+ // Slots (data-dimsum-slot attributes)
106
+ static async getAccordionContainerSlotByIndex(index = 0) {
107
+ return $$('[data-dimsum-slot="dsAccordionnativeRoot"]')[index];
108
+ }
109
+
110
+ static async getAccordionItemContainerSlotByIndex(index = 0) {
111
+ return $$('[data-dimsum-slot="dsAccordionnativeItemContainer"]')[index];
112
+ }
113
+
114
+ static async getAccordionItemDetailsSlotByIndex(index = 0) {
115
+ return $$('[data-dimsum-slot="dsAccordionnativeItemDetails"]')[index];
116
+ }
117
+
118
+ static async getAccordionItemSummarySlotByIndex(index = 0) {
119
+ return $$('[data-dimsum-slot="dsAccordionnativeItemSummary"]')[index];
120
+ }
121
+
122
+ static async getAccordionItemHeadingSlotByIndex(index = 0) {
123
+ return $$('[data-dimsum-slot="dsAccordionnativeItemHeading"]')[index];
124
+ }
125
+
126
+ static async getAccordionItemChevronSlotByIndex(index = 0) {
127
+ return $$('[data-dimsum-slot="dsAccordionnativeItemChevron"]')[index];
128
+ }
129
+
130
+ static async getAccordionItemTitlesContainerSlotByIndex(index = 0) {
131
+ return $$('[data-dimsum-slot="dsAccordionnativeItemTitlesContainer"]')[index];
132
+ }
133
+
134
+ static async getAccordionItemPrimaryTitleSlotByIndex(index = 0) {
135
+ return $$('[data-dimsum-slot="dsAccordionnativeItemPrimaryTitle"]')[index];
136
+ }
137
+
138
+ static async getAccordionItemSecondaryTitleSlotByIndex(index = 0) {
139
+ return $$('[data-dimsum-slot="dsAccordionnativeItemSecondaryTitle"]')[index];
140
+ }
141
+
142
+ static async getAccordionItemCustomActionsContainerSlotByIndex(index = 0) {
143
+ return $$('[data-dimsum-slot="dsAccordionnativeItemCustomActionsContainer"]')[index];
144
+ }
145
+
146
+ static async getAccordionItemContentContainerSlotByIndex(index = 0) {
147
+ return $$('[data-dimsum-slot="dsAccordionnativeItemContentContainer"]')[index];
148
+ }
149
+ }
@@ -0,0 +1,25 @@
1
+ /* eslint-disable max-lines */
2
+ import { Key } from 'webdriverio';
3
+ import DSAccordionNativeCO from '../DSAccordionNativeCO';
4
+ import { axeCoreCheck } from '../../helpers';
5
+
6
+ if (
7
+ (!browser.capabilities['ice:options'].isPhone &&
8
+ !browser.capabilities['ice:options'].isTablet &&
9
+ browser.capabilities.browserName === 'chrome') ||
10
+ browser.capabilities.browserName === 'Chrome'
11
+ ) {
12
+ describe('PUI-18083 - AccordionNative:: ApplyAriaDisabled prop - axe-core', () => {
13
+ before('loading page', async () => {
14
+ const errorOnGo = await DSAccordionNativeCO.applyAriaDisabled.go();
15
+ if (errorOnGo) throw errorOnGo;
16
+ });
17
+ it('01: should display accordion with aria-disabled and pass axecore scan', async () => {
18
+ const firstItem = await DSAccordionNativeCO.getAccordionHeader(0);
19
+ await firstItem.waitForDisplayed();
20
+ await browser.keys(Key.Tab);
21
+ const result = await axeCoreCheck();
22
+ expect(result.length).toBe(0);
23
+ });
24
+ });
25
+ }
@@ -0,0 +1,27 @@
1
+ import { Key } from 'webdriverio';
2
+ import DSAccordionNativeCO from '../DSAccordionNativeCO';
3
+
4
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
5
+ describe('PUI-18083 - AccordionNative:: ApplyAriaDisabled prop - visual tests', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSAccordionNativeCO.applyAriaDisabled.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+ it('01: first Accordion item should be focused and content not displayed - click', async () => {
11
+ const firstItem = await DSAccordionNativeCO.getAccordionHeader(0);
12
+ await firstItem.click();
13
+ const snapshot = await browser.checkSnapshot(
14
+ DSAccordionNativeCO.snapshotPath('accordion-native-aria-disabled-focused-mouse'),
15
+ );
16
+ await expect(snapshot).toEqual(0);
17
+ });
18
+ it('02: second Accordion item should be focused and content not displayed - Tab + Enter', async () => {
19
+ await browser.keys(Key.Tab);
20
+ await browser.keys(Key.Enter);
21
+ const snapshot = await browser.checkSnapshot(
22
+ DSAccordionNativeCO.snapshotPath('accordion-native-aria-disabled-focused-keys'),
23
+ );
24
+ await expect(snapshot).toEqual(0);
25
+ });
26
+ });
27
+ }
@@ -0,0 +1,27 @@
1
+ import DSAccordionNativeCO from '../DSAccordionNativeCO';
2
+
3
+ if (
4
+ (!browser.capabilities['ice:options'].isPhone &&
5
+ !browser.capabilities['ice:options'].isTablet &&
6
+ browser.capabilities.browserName === 'chrome') ||
7
+ browser.capabilities.browserName === 'Chrome'
8
+ ) {
9
+ describe('PUI-18083 - AccordionNative: Role heading', () => {
10
+ before('loading page', async () => {
11
+ const errorOnGo = await DSAccordionNativeCO.subtitle.go();
12
+ if (errorOnGo) throw errorOnGo;
13
+ });
14
+ // Prod accordion asserts role="heading" + aria-level via custom slot
15
+ // attributes because its wrapper is a <div>. The POC uses a real heading
16
+ // element (default <h3>), so neither attribute is present as a DOM string
17
+ // — the role and aria-level are *implicit* in the tag itself, conveyed by
18
+ // the browser's accessibility tree. Asserting on getTagName() is the
19
+ // correct contract for the native variant.
20
+ it('01: should be a native heading element with implicit ARIA role + level', async () => {
21
+ const heading = await DSAccordionNativeCO.getHeadingByIndex(0);
22
+ const tagName = await heading.getTagName();
23
+ // <h3> => implicit role="heading", aria-level=3.
24
+ await expect(tagName.toLowerCase()).toEqual('h3');
25
+ });
26
+ });
27
+ }
@@ -0,0 +1,48 @@
1
+ /* eslint-disable wdio/no-pause */
2
+ import { Key } from 'webdriverio';
3
+ import DSAccordionNativeCO from '../DSAccordionNativeCO';
4
+
5
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
6
+ describe('PUI-18083 - AccordionNative: Scrollable content -Visual', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSAccordionNativeCO.scrollableContent.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+ it('01: should display first accordion header focused', async () => {
12
+ await browser.eyesOpen();
13
+ await (await DSAccordionNativeCO.getAccordionHeader(1)).waitForDisplayed();
14
+ await browser.keys(Key.Tab);
15
+ await browser.keys(Key.Return);
16
+ const snapshot = await browser.eyesCheckSnapshot(
17
+ DSAccordionNativeCO.snapshotPath('accordion-native-scrollable-default'),
18
+ );
19
+ await expect(snapshot).toEqual(0);
20
+ });
21
+ it('02: should display scrollable content focused', async () => {
22
+ await browser.eyesOpen();
23
+ await browser.keys(Key.ArrowDown);
24
+ await browser.keys(Key.ArrowUp);
25
+ await browser.keys(Key.Tab);
26
+ await (await DSAccordionNativeCO.getAccordionHeader(1)).waitForDisplayed();
27
+ const snapshot = await browser.eyesCheckSnapshot(
28
+ DSAccordionNativeCO.snapshotPath('accordion-native-scrollable-top'),
29
+ );
30
+ await expect(snapshot).toEqual(0);
31
+ });
32
+ it('03: should display scrollable content scrolled to the bottom', async () => {
33
+ await browser.eyesOpen();
34
+ await browser.keys(Key.ArrowDown);
35
+ await browser.keys(Key.ArrowDown);
36
+ await browser.keys(Key.ArrowDown);
37
+ await browser.keys(Key.ArrowDown);
38
+ await browser.keys(Key.ArrowDown);
39
+ await browser.keys(Key.ArrowDown);
40
+ await browser.keys(Key.ArrowDown);
41
+ await (await DSAccordionNativeCO.getAccordionHeader(1)).waitForDisplayed();
42
+ const snapshot = await browser.eyesCheckSnapshot(
43
+ DSAccordionNativeCO.snapshotPath('accordion-native-scrollable-bottom'),
44
+ );
45
+ await expect(snapshot).toEqual(0);
46
+ });
47
+ });
48
+ }
@@ -0,0 +1,25 @@
1
+ /* eslint-disable max-lines */
2
+ import DSAccordionNativeCO from '../DSAccordionNativeCO';
3
+ import { axeCoreCheck } from '../../helpers';
4
+
5
+ if (
6
+ (!browser.capabilities['ice:options'].isPhone &&
7
+ !browser.capabilities['ice:options'].isTablet &&
8
+ browser.capabilities.browserName === 'chrome') ||
9
+ browser.capabilities.browserName === 'Chrome'
10
+ ) {
11
+ describe('PUI-18083 - AccordionNative: Slots -AxeCore', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await DSAccordionNativeCO.slotsURL.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+ it('01: should have accordion with custom slots (aria & data) and pass axe-core scan', async () => {
17
+ const summary = await DSAccordionNativeCO.getAccordionItemSummarySlotByIndex(0);
18
+ await summary.click();
19
+ const content = await DSAccordionNativeCO.getAccordionItemContentContainerSlotByIndex(0);
20
+ await content.waitForDisplayed();
21
+ const result = await axeCoreCheck();
22
+ expect(result.length).toBe(0);
23
+ });
24
+ });
25
+ }
@@ -0,0 +1,73 @@
1
+ /* eslint-disable max-lines, max-statements */
2
+ import DSAccordionNativeCO from '../DSAccordionNativeCO';
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-18083 - AccordionNative: Slots -Func', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSAccordionNativeCO.slotsURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+ it('01: should have a custom aria-label for each slot', async () => {
16
+ const root = await DSAccordionNativeCO.getAccordionContainerSlotByIndex();
17
+ const itemContainer = await DSAccordionNativeCO.getAccordionItemContainerSlotByIndex();
18
+ const itemDetails = await DSAccordionNativeCO.getAccordionItemDetailsSlotByIndex();
19
+ const itemSummary = await DSAccordionNativeCO.getAccordionItemSummarySlotByIndex();
20
+ const itemHeading = await DSAccordionNativeCO.getAccordionItemHeadingSlotByIndex();
21
+ const itemChevron = await DSAccordionNativeCO.getAccordionItemChevronSlotByIndex();
22
+ const titlesContainer = await DSAccordionNativeCO.getAccordionItemTitlesContainerSlotByIndex();
23
+ const primaryTitle = await DSAccordionNativeCO.getAccordionItemPrimaryTitleSlotByIndex();
24
+ const secondaryTitle = await DSAccordionNativeCO.getAccordionItemSecondaryTitleSlotByIndex();
25
+ await itemSummary.click();
26
+ const contentContainer = await DSAccordionNativeCO.getAccordionItemContentContainerSlotByIndex();
27
+ await contentContainer.waitForDisplayed();
28
+ await expect(root).toHaveAttribute('aria-label', 'im container aria');
29
+ await expect(itemContainer).toHaveAttribute('aria-label', 'im item container aria');
30
+ await expect(itemDetails).toHaveAttribute('aria-label', 'im itemdetails aria');
31
+ await expect(itemSummary).toHaveAttribute('aria-label', 'im itemsummary aria');
32
+ await expect(itemHeading).toHaveAttribute('aria-label', 'im itemheading aria');
33
+ await expect(itemChevron).toHaveAttribute('aria-label', 'im itemchevron aria');
34
+ await expect(titlesContainer).toHaveAttribute('aria-label', 'im itemtitlecontainer aria');
35
+ await expect(primaryTitle).toHaveAttribute('aria-label', 'im itemprimarytitle aria');
36
+ await expect(secondaryTitle).toHaveAttribute('aria-label', 'im itemsecondarytitle aria');
37
+ await expect(contentContainer).toHaveAttribute('aria-label', 'im itemcontentcontainer aria');
38
+ });
39
+
40
+ it('02: should have a custom data-testid for each slot', async () => {
41
+ const root = await DSAccordionNativeCO.getAccordionContainerSlotByIndex();
42
+ const itemContainer = await DSAccordionNativeCO.getAccordionItemContainerSlotByIndex();
43
+ const itemDetails = await DSAccordionNativeCO.getAccordionItemDetailsSlotByIndex();
44
+ const itemSummary = await DSAccordionNativeCO.getAccordionItemSummarySlotByIndex();
45
+ const itemHeading = await DSAccordionNativeCO.getAccordionItemHeadingSlotByIndex();
46
+ const itemChevron = await DSAccordionNativeCO.getAccordionItemChevronSlotByIndex();
47
+ const titlesContainer = await DSAccordionNativeCO.getAccordionItemTitlesContainerSlotByIndex();
48
+ const primaryTitle = await DSAccordionNativeCO.getAccordionItemPrimaryTitleSlotByIndex();
49
+ const secondaryTitle = await DSAccordionNativeCO.getAccordionItemSecondaryTitleSlotByIndex();
50
+ const contentContainer = await DSAccordionNativeCO.getAccordionItemContentContainerSlotByIndex();
51
+ await contentContainer.waitForDisplayed();
52
+ await expect(root).toHaveAttribute('data-testid', 'im container data');
53
+ await expect(itemContainer).toHaveAttribute('data-testid', 'im item container data');
54
+ await expect(itemDetails).toHaveAttribute('data-testid', 'im itemdetails data');
55
+ await expect(itemSummary).toHaveAttribute('data-testid', 'im itemsummary data');
56
+ await expect(itemHeading).toHaveAttribute('data-testid', 'im itemheading data');
57
+ await expect(itemChevron).toHaveAttribute('data-testid', 'im itemchevron data');
58
+ await expect(titlesContainer).toHaveAttribute('data-testid', 'im itemtitlecontainer data');
59
+ await expect(primaryTitle).toHaveAttribute('data-testid', 'im itemprimarytitle data');
60
+ await expect(secondaryTitle).toHaveAttribute('data-testid', 'im itemsecondarytitle data');
61
+ await expect(contentContainer).toHaveAttribute('data-testid', 'im itemcontentcontainer data');
62
+ });
63
+
64
+ it('03: should have a custom lang attribute for summary, primary and secondary titles', async () => {
65
+ const primaryTitle = await DSAccordionNativeCO.getAccordionItemPrimaryTitleSlotByIndex();
66
+ const secondaryTitle = await DSAccordionNativeCO.getAccordionItemSecondaryTitleSlotByIndex();
67
+ const summary = await DSAccordionNativeCO.getAccordionItemSummarySlotByIndex();
68
+ await expect(primaryTitle).toHaveAttribute('lang', 'en-US');
69
+ await expect(secondaryTitle).toHaveAttribute('lang', 'es-ES');
70
+ await expect(summary).toHaveAttribute('lang', 'en-US');
71
+ });
72
+ });
73
+ }
@@ -0,0 +1,18 @@
1
+ import DSAccordionNativeCO from '../DSAccordionNativeCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ describe('PUI-18083 - AccordionNative: Slots -Visual', () => {
5
+ before('loading page', async () => {
6
+ const errorOnGo = await DSAccordionNativeCO.slotsURL.go();
7
+ if (errorOnGo) throw errorOnGo;
8
+ });
9
+ it('01: should display visually customized-slots (colors) accordion and matchbaseline', async () => {
10
+ const header = await DSAccordionNativeCO.getAccordionItemPrimaryTitleSlotByIndex(0);
11
+ await header.click();
12
+ const content = await DSAccordionNativeCO.getAccordionItemContentContainerSlotByIndex(0);
13
+ await content.waitForDisplayed();
14
+ const snapshot = await browser.checkSnapshot(DSAccordionNativeCO.snapshotPath('accordion-native-slots'));
15
+ await expect(snapshot).toEqual(0);
16
+ });
17
+ });
18
+ }
@@ -0,0 +1,22 @@
1
+ /* eslint-disable wdio/no-pause */
2
+ import { Key } from 'webdriverio';
3
+ import DSAccordionNativeCO from '../DSAccordionNativeCO';
4
+
5
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
6
+ describe('PUI-18083 - AccordionNative: wrapLabel -Visual', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSAccordionNativeCO.wrapLabel.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+ it('01: should display accordion title and secondary title wrapped', async () => {
12
+ await browser.eyesOpen();
13
+ await (await DSAccordionNativeCO.getAccordionHeader(1)).waitForDisplayed();
14
+ await browser.keys(Key.Tab);
15
+ await browser.keys(Key.Return);
16
+ const snapshot = await browser.eyesCheckSnapshot(
17
+ DSAccordionNativeCO.snapshotPath('accordion-native-wrap-label'),
18
+ );
19
+ await expect(snapshot).toEqual(0);
20
+ });
21
+ });
22
+ }
@@ -78,6 +78,6 @@ export default class DSAppPickerCO extends PageObject {
78
78
  }
79
79
 
80
80
  static async getTitleSlotByIndex(index = 0) {
81
- return $$('[data-dimsum-slot="dsApppickerTitle"]')[index];
81
+ return $$('[data-dimsum-parent-slot="dsApppickerTitle"]')[index];
82
82
  }
83
83
  }
@@ -18,4 +18,38 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
18
18
  await expect(snapshot).toEqual(0);
19
19
  });
20
20
  });
21
+ describe('PUI-17180 - Autocomplete:: Floating After Filtering -Visual', () => {
22
+ before('loading page', async () => {
23
+ const errorOnGo = await DSAutocompleteCO.floatingAfterFiltering.go();
24
+ if (errorOnGo) throw errorOnGo;
25
+ });
26
+ it('01: should display menu correctly - after filtering', async () => {
27
+ await browser.keys(Key.Tab);
28
+ await type('44444-');
29
+ const menulist = await DSAutocompleteCO.getAutocompleteMenuList();
30
+ await menulist.waitForDisplayed({ timeout: 2000 });
31
+ const snapshot = await browser.percyCheckScreenshot(
32
+ DSAutocompleteCO.snapshotPath('autocomplete-floating-after-filtering'),
33
+ );
34
+ await expect(snapshot).toEqual(0);
35
+ });
36
+ it('02: should display menu correctly - after re filtering', async () => {
37
+ await type('6');
38
+ const menulist = await DSAutocompleteCO.getAutocompleteMenuList();
39
+ await menulist.waitForDisplayed({ timeout: 2000 });
40
+ const snapshot = await browser.percyCheckScreenshot(
41
+ DSAutocompleteCO.snapshotPath('autocomplete-floating-after-re-filtering'),
42
+ );
43
+ await expect(snapshot).toEqual(0);
44
+ });
45
+ it('03: should display menu correctly - after backspace', async () => {
46
+ await browser.keys(Key.Backspace);
47
+ const menulist = await DSAutocompleteCO.getAutocompleteMenuList();
48
+ await menulist.waitForDisplayed({ timeout: 2000 });
49
+ const snapshot = await browser.percyCheckScreenshot(
50
+ DSAutocompleteCO.snapshotPath('autocomplete-floating-after-backspace'),
51
+ );
52
+ await expect(snapshot).toEqual(0);
53
+ });
54
+ });
21
55
  }
@@ -12,6 +12,8 @@ export default class DSAutocompleteCO extends PageObject {
12
12
 
13
13
  static sectionTitles = new Urlbuilder(PATH_E2E_AUTOCOMPLETE, 'with-section-titles-test');
14
14
 
15
+ static floatingAfterFiltering = new Urlbuilder(PATH_E2E_AUTOCOMPLETE, 'floating-after-filtering');
16
+
15
17
  // Snapshots
16
18
  static snapshotPath(example = 'basic') {
17
19
  return PageObject.getSnapshotPathBuilder('Autocomplete', example);
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable no-plusplus */
2
2
  /* eslint-disable max-lines */
3
- import { ChatCO, BubbleCO, TileCO } from './components';
3
+ import { ChatCO, CardCO, BubbleCO, TileCO } from './components';
4
4
  import { axeCoreCheck } from '../helpers';
5
5
 
6
6
  if (
@@ -41,7 +41,7 @@ if (
41
41
 
42
42
  describe('PUI-12504 - Chat, Chat Card -AxeCore', () => {
43
43
  before('loading page', async () => {
44
- const errorOnGo = await ChatCO.chatCardURL.go();
44
+ const errorOnGo = await CardCO.cardBasicURL.go();
45
45
  if (errorOnGo) throw errorOnGo;
46
46
  });
47
47
  it('01: should have a chat card and pass axe-core scan', async () => {
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-plusplus */
2
2
  /* eslint-disable max-lines */
3
3
  import { Key } from 'webdriverio';
4
- import { ChatCO, BubbleCO, FloatingButtonCO, ComposerCO, TileCO } from './components';
4
+ import { ChatCO, CardCO, BubbleCO, FloatingButtonCO, ComposerCO, TileCO } from './components';
5
5
  import { type } from '../helpers';
6
6
  import DSBannerCO from '../ds-banner/DSBannerCO';
7
7
 
@@ -76,7 +76,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
76
76
 
77
77
  describe('PUI-6712 - Chat, Chat Card, Visual Tests', () => {
78
78
  before('loading page', async () => {
79
- const errorOnGo = await ChatCO.chatCardURL.go();
79
+ const errorOnGo = await CardCO.cardBasicURL.go();
80
80
  if (errorOnGo) throw errorOnGo;
81
81
  });
82
82
  it('should display the chat card properly', async () => {
@@ -268,7 +268,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
268
268
  });
269
269
  });
270
270
 
271
- describe('PUI-9333 - Chat, Scroll on send and not on enter, Func. Tests', () => {
271
+ describe('PUI-9333 - Chat, Scroll on send and not on enter - Visual Tests', () => {
272
272
  before('loading page', async () => {
273
273
  const errorOnGo = await ChatCO.sidePanelIntegrationURL.go();
274
274
  if (errorOnGo) throw errorOnGo;
@@ -1,45 +1,43 @@
1
1
  /* eslint-disable import/no-relative-packages */
2
- import { PATH_CHAT_EXAMPLES, PATH_CHAT_PARTS, PATH_E2E_CHAT } from '../paths';
2
+ import { PATH_E2E_CHAT } from '../paths';
3
3
  import { PageObject, Urlbuilder, getElementByIndex } from '../helpers';
4
4
 
5
5
  export default class DSChatCO extends PageObject {
6
6
  static TEST_STR = 'this is a test string';
7
7
 
8
- static systemMessageURL = new Urlbuilder(PATH_CHAT_PARTS, 'chat-system-message');
8
+ static systemMessageURL = new Urlbuilder(PATH_E2E_CHAT, 'chat-system-message');
9
9
 
10
- static messageDelimiterURL = new Urlbuilder(PATH_CHAT_PARTS, 'chat-message-delimiter');
10
+ static messageDelimiterURL = new Urlbuilder(PATH_E2E_CHAT, 'chat-message-delimiter');
11
11
 
12
- static containerURL = new Urlbuilder(PATH_CHAT_PARTS, 'container');
12
+ static containerURL = new Urlbuilder(PATH_E2E_CHAT, 'container');
13
13
 
14
- static loadMoreURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'container-load-more');
14
+ static loadMoreURL = new Urlbuilder(PATH_E2E_CHAT, 'container-load-more');
15
15
 
16
- static loadingURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'loading-container');
16
+ static loadingURL = new Urlbuilder(PATH_E2E_CHAT, 'loading-container');
17
17
 
18
- static loadingErrorURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'loading-error');
18
+ static loadingErrorURL = new Urlbuilder(PATH_E2E_CHAT, 'loading-error');
19
19
 
20
- static floatingExampleURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'floating-example');
20
+ static floatingExampleURL = new Urlbuilder(PATH_E2E_CHAT, 'floating-example');
21
21
 
22
- static focusCasesURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'container-focus-cases');
22
+ static focusCasesURL = new Urlbuilder(PATH_E2E_CHAT, 'container-focus-cases');
23
23
 
24
- static mobileContainerURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'mobile-container');
24
+ static mobileContainerURL = new Urlbuilder(PATH_E2E_CHAT, 'mobile-container');
25
25
 
26
26
  static sidePanelIntegrationURL = new Urlbuilder(PATH_E2E_CHAT, 'side-panel-integration-test');
27
27
 
28
- static chatCardURL = new Urlbuilder(PATH_CHAT_PARTS, 'chat-card');
28
+ static tooltipPosition = new Urlbuilder(PATH_E2E_CHAT, 'tooltip-position');
29
29
 
30
- static tooltipPosition = new Urlbuilder(PATH_CHAT_EXAMPLES, 'tooltip-position');
30
+ static focuseableBanners = new Urlbuilder(PATH_E2E_CHAT, 'focus-on-banner');
31
31
 
32
- static focuseableBanners = new Urlbuilder(PATH_CHAT_EXAMPLES, 'focus-on-banner');
32
+ static newMessages = new Urlbuilder(PATH_E2E_CHAT, 'container-new-messages');
33
33
 
34
- static newMessages = new Urlbuilder(PATH_CHAT_EXAMPLES, 'container-new-messages');
34
+ static nonDeliveredURL = new Urlbuilder(PATH_E2E_CHAT, 'non-delivered-messages');
35
35
 
36
- static nonDeliveredURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'non-delivered-messages');
36
+ static nonGridInfluencerURL = new Urlbuilder(PATH_E2E_CHAT, 'non-grid-influencer-integration');
37
37
 
38
- static nonGridInfluencerURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'non-grid-influencer-integration');
38
+ static customBanner = new Urlbuilder(PATH_E2E_CHAT, 'custom-banner');
39
39
 
40
- static customBanner = new Urlbuilder(PATH_CHAT_EXAMPLES, 'custom-banner');
41
-
42
- static emptyState = new Urlbuilder(PATH_CHAT_EXAMPLES, 'empty-state');
40
+ static emptyState = new Urlbuilder(PATH_E2E_CHAT, 'empty-state');
43
41
 
44
42
  static globalLineHeight = new Urlbuilder(PATH_E2E_CHAT, 'global-line-height');
45
43
 
@@ -72,10 +70,6 @@ export default class DSChatCO extends PageObject {
72
70
  return $('[data-testid="chat-thread-container"]');
73
71
  }
74
72
 
75
- static async getCards() {
76
- return $$('[data-testid="chat-card-wrapper"]');
77
- }
78
-
79
73
  static async getSidebarFooterButton() {
80
74
  return $('[data-testid="sidebar-button-sidebar_footer"]');
81
75
  }
@@ -0,0 +1,24 @@
1
+ // Tests for PUI-17908 (ds-chat-bubble slots implementation)
2
+ import { BubbleCO } from '../../components';
3
+ import { axeCoreCheck } from '../../../helpers';
4
+
5
+ if (
6
+ (!browser.capabilities['ice:options'].isPhone &&
7
+ !browser.capabilities['ice:options'].isTablet &&
8
+ browser.capabilities.browserName === 'chrome') ||
9
+ browser.capabilities.browserName === 'Chrome'
10
+ ) {
11
+ describe('PUI-18460 - DSChatBubble:: axe-core - Axe-Core', () => {
12
+ before(async () => {
13
+ const errorOnGo = await BubbleCO.bubbleSlotsURL.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+
17
+ it('01: should pass axe-core on sender and recipient bubble variants', async () => {
18
+ const senderWrapper = await BubbleCO.getWrapperSlot();
19
+ await senderWrapper.waitForDisplayed();
20
+ const result = await axeCoreCheck();
21
+ expect(result.length).toBe(0);
22
+ });
23
+ });
24
+ }