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

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 +152 -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,49 @@
1
+ // Tests for PUI-17908 (ds-chat-bubble slots implementation)
2
+ import { BubbleCO } 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-18459 - DSChatBubble:: slot wiring - Func', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await BubbleCO.bubbleSlotsURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should have custom aria-* for each slot', async () => {
17
+ await (await BubbleCO.getWrapperSlot()).waitForDisplayed();
18
+ await expect(await BubbleCO.getWrapperSlot()).toHaveAttribute('aria-label', 'wrapper aria');
19
+ await expect(await BubbleCO.getColoredBubbleSlot()).toHaveAttribute('aria-label', 'colored-bubble aria');
20
+ await expect(await BubbleCO.getHeaderSlot()).toHaveAttribute('aria-label', 'header aria');
21
+ await expect(await BubbleCO.getHeaderLeftSlot()).toHaveAttribute('aria-label', 'header-left aria');
22
+ await expect(await BubbleCO.getHeaderRightSlot()).toHaveAttribute('aria-label', 'header-right aria');
23
+ await expect(await BubbleCO.getBodyWrapperSlot()).toHaveAttribute('aria-label', 'body-wrapper aria');
24
+ await expect(await BubbleCO.getErrorMessageSlot()).toHaveAttribute('aria-label', 'error-message aria');
25
+ await expect(await BubbleCO.getHelpMessageSlot()).toHaveAttribute('aria-label', 'help-message aria');
26
+ });
27
+
28
+ it('02: should have custom data-testid for each slot', async () => {
29
+ await expect(await BubbleCO.getWrapperSlot()).toHaveAttribute('data-testid', 'wrapper data');
30
+ await expect(await BubbleCO.getColoredBubbleSlot()).toHaveAttribute('data-testid', 'colored-bubble data');
31
+ await expect(await BubbleCO.getHeaderSlot()).toHaveAttribute('data-testid', 'header data');
32
+ await expect(await BubbleCO.getHeaderLeftSlot()).toHaveAttribute('data-testid', 'header-left data');
33
+ await expect(await BubbleCO.getHeaderRightSlot()).toHaveAttribute('data-testid', 'header-right data');
34
+ await expect(await BubbleCO.getBodyWrapperSlot()).toHaveAttribute('data-testid', 'body-wrapper data');
35
+ await expect(await BubbleCO.getErrorMessageSlot()).toHaveAttribute('data-testid', 'error-message data');
36
+ await expect(await BubbleCO.getHelpMessageSlot()).toHaveAttribute('data-testid', 'help-message data');
37
+ });
38
+
39
+ it('03: should have custom lang for each slot', async () => {
40
+ await expect(await BubbleCO.getWrapperSlot()).toHaveAttribute('lang', 'pt');
41
+ await expect(await BubbleCO.getHeaderSlot()).toHaveAttribute('lang', 'de');
42
+ await expect(await BubbleCO.getHeaderLeftSlot()).toHaveAttribute('lang', 'en');
43
+ await expect(await BubbleCO.getHeaderRightSlot()).toHaveAttribute('lang', 'fr');
44
+ await expect(await BubbleCO.getBodyWrapperSlot()).toHaveAttribute('lang', 'it');
45
+ await expect(await BubbleCO.getErrorMessageSlot()).toHaveAttribute('lang', 'sv');
46
+ await expect(await BubbleCO.getHelpMessageSlot()).toHaveAttribute('lang', 'ja');
47
+ });
48
+ });
49
+ }
@@ -0,0 +1,25 @@
1
+ // Tests for PUI-17908 (ds-chat-bubble slots implementation)
2
+ import { BubbleCO } from '../../components';
3
+
4
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
5
+ describe('PUI-18458 - DSChatBubble:: bubble slot variants - Visual', () => {
6
+ before(async () => {
7
+ const errorOnGo = await BubbleCO.bubbleSlotsURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+
11
+ it('01: should display sender and recipient bubble variants', async () => {
12
+ const senderWrapper = await BubbleCO.getWrapperSlot();
13
+ await senderWrapper.waitForDisplayed();
14
+ const snapshot = await browser.percyCheckScreenshot(BubbleCO.snapshotPath('bubble-slots-sender-recipient'));
15
+ await expect(snapshot).toEqual(0);
16
+ });
17
+
18
+ it('02: should display bubble with errorMessage and helpMessage', async () => {
19
+ const errorBubble = await BubbleCO.getErrorMessageSlot();
20
+ await errorBubble.waitForDisplayed();
21
+ const snapshot = await browser.percyCheckScreenshot(BubbleCO.snapshotPath('bubble-slots-error-help'));
22
+ await expect(snapshot).toEqual(0);
23
+ });
24
+ });
25
+ }
@@ -0,0 +1,24 @@
1
+ // Tests for PUI-17908 (ds-chat-card slots implementation)
2
+ import { CardCO } 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-18463 - DSChatCard:: axe-core - Axe-Core', () => {
12
+ before(async () => {
13
+ const errorOnGo = await CardCO.cardSlotsURL.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+
17
+ it('01: should pass axe-core on all card variants', async () => {
18
+ const titleCard = await CardCO.getRootSlot();
19
+ await titleCard.waitForDisplayed();
20
+ const result = await axeCoreCheck();
21
+ expect(result.length).toBe(0);
22
+ });
23
+ });
24
+ }
@@ -0,0 +1,47 @@
1
+ // Tests for PUI-17908 (ds-chat-card slots implementation)
2
+ import { CardCO } 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-18462 - DSChatCard:: slot wiring - Func', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await CardCO.cardSlotsURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should have custom aria-* for each slot', async () => {
17
+ await (await CardCO.getRootSlot()).waitForDisplayed();
18
+ await expect(await CardCO.getRootSlot()).toHaveAttribute('aria-label', 'root aria');
19
+ await expect(await CardCO.getMainContentSlot()).toHaveAttribute('aria-label', 'main-content aria');
20
+ await expect(await CardCO.getTitleSlot()).toHaveAttribute('aria-label', 'title aria');
21
+ await expect(await CardCO.getContentSlot()).toHaveAttribute('aria-label', 'content aria');
22
+ await expect(await CardCO.getTimeSlot()).toHaveAttribute('aria-label', 'time aria');
23
+ await expect(await CardCO.getRightAddonSlot()).toHaveAttribute('aria-label', 'right-addon aria');
24
+ await expect(await CardCO.getTruncatedSpanSlot()).toHaveAttribute('aria-label', 'truncated-span aria');
25
+ });
26
+
27
+ it('02: should have custom data-testid for each slot', async () => {
28
+ await expect(await CardCO.getRootSlot()).toHaveAttribute('data-testid', 'root data');
29
+ await expect(await CardCO.getMainContentSlot()).toHaveAttribute('data-testid', 'main-content data');
30
+ await expect(await CardCO.getTitleSlot()).toHaveAttribute('data-testid', 'title data');
31
+ await expect(await CardCO.getContentSlot()).toHaveAttribute('data-testid', 'content data');
32
+ await expect(await CardCO.getTimeSlot()).toHaveAttribute('data-testid', 'time data');
33
+ await expect(await CardCO.getRightAddonSlot()).toHaveAttribute('data-testid', 'right-addon data');
34
+ await expect(await CardCO.getTruncatedSpanSlot()).toHaveAttribute('data-testid', 'truncated-span data');
35
+ });
36
+
37
+ it('03: should have custom lang for each slot', async () => {
38
+ await expect(await CardCO.getRootSlot()).toHaveAttribute('lang', 'pt');
39
+ await expect(await CardCO.getMainContentSlot()).toHaveAttribute('lang', 'es');
40
+ await expect(await CardCO.getTitleSlot()).toHaveAttribute('lang', 'de');
41
+ await expect(await CardCO.getContentSlot()).toHaveAttribute('lang', 'en');
42
+ await expect(await CardCO.getTimeSlot()).toHaveAttribute('lang', 'fr');
43
+ await expect(await CardCO.getRightAddonSlot()).toHaveAttribute('lang', 'it');
44
+ await expect(await CardCO.getTruncatedSpanSlot()).toHaveAttribute('lang', 'nl');
45
+ });
46
+ });
47
+ }
@@ -0,0 +1,18 @@
1
+ // Tests for PUI-17908 (ds-chat-card slots implementation)
2
+ import { CardCO } from '../../components';
3
+
4
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
5
+ describe('PUI-18461 - DSChatCard:: card slot variants - Visual', () => {
6
+ before(async () => {
7
+ const errorOnGo = await CardCO.cardSlotsURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+
11
+ it('01: should display card with all slot props and style customization', async () => {
12
+ const root = await CardCO.getRootSlot();
13
+ await root.waitForDisplayed();
14
+ const snapshot = await browser.percyCheckScreenshot(CardCO.snapshotPath('card-slot-variants'));
15
+ await expect(snapshot).toEqual(0);
16
+ });
17
+ });
18
+ }
@@ -0,0 +1,32 @@
1
+ import { CardCO } from '../../components';
2
+ import { mouseOver } 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-18484 - DSChatCard:: truncated text - Func', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await CardCO.cardTruncatedURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should render TruncatedSpan for each card with long content', async () => {
17
+ const span = await CardCO.getTruncatedSpan(0);
18
+ await span.waitForDisplayed();
19
+ await expect(span).toBeDisplayed();
20
+ await expect(await CardCO.getTruncatedSpan(1)).toBeDisplayed();
21
+ await expect(await CardCO.getTruncatedSpan(2)).toBeDisplayed();
22
+ });
23
+
24
+ it('02: should show tooltip on hover when content overflows', async () => {
25
+ const span = await CardCO.getTruncatedSpan(0);
26
+ await mouseOver(span);
27
+ const tooltip = await CardCO.getTooltipContainer();
28
+ await tooltip.waitForDisplayed({ timeout: 3000 });
29
+ await expect(tooltip).toBeDisplayed();
30
+ });
31
+ });
32
+ }
@@ -0,0 +1,26 @@
1
+ import { CardCO } from '../../components';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ describe('PUI-18483 - DSChatCard:: truncated text - Visual', () => {
5
+ before('loading page', async () => {
6
+ const errorOnGo = await CardCO.cardTruncatedURL.go();
7
+ if (errorOnGo) throw errorOnGo;
8
+ });
9
+
10
+ it('01: should display cards with truncated content at rest', async () => {
11
+ const span = await CardCO.getTruncatedSpan(0);
12
+ await span.waitForDisplayed();
13
+ const snapshot = await browser.percyCheckScreenshot(CardCO.snapshotPath('truncated-text'));
14
+ await expect(snapshot).toEqual(0);
15
+ });
16
+
17
+ it('02: should display tooltip on hover over truncated content', async () => {
18
+ const span = await CardCO.getTruncatedSpan(0);
19
+ await span.moveTo();
20
+ const tooltip = await CardCO.getTooltipContainer();
21
+ await tooltip.waitForDisplayed({ timeout: 3000 });
22
+ const snapshot = await browser.percyCheckScreenshot(CardCO.snapshotPath('truncated-text-tooltip'));
23
+ await expect(snapshot).toEqual(0);
24
+ });
25
+ });
26
+ }
@@ -0,0 +1,23 @@
1
+ import { CardCO } from '../../components';
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-18486 - DSChatCard:: with notification badges - Axe-Core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await CardCO.cardWithNotificationBadgesURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should pass axe-core with notification badge variants', async () => {
17
+ const cards = await CardCO.getCards();
18
+ await cards[0].waitForDisplayed();
19
+ const result = await axeCoreCheck();
20
+ expect(result.length).toBe(0);
21
+ });
22
+ });
23
+ }
@@ -0,0 +1,17 @@
1
+ import { CardCO } from '../../components';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ describe('PUI-18485 - DSChatCard:: with notification badges - Visual', () => {
5
+ before('loading page', async () => {
6
+ const errorOnGo = await CardCO.cardWithNotificationBadgesURL.go();
7
+ if (errorOnGo) throw errorOnGo;
8
+ });
9
+
10
+ it('01: should display cards with notification badges', async () => {
11
+ const cards = await CardCO.getCards();
12
+ await cards[0].waitForDisplayed();
13
+ const snapshot = await browser.percyCheckScreenshot(CardCO.snapshotPath('with-notification-badges'));
14
+ await expect(snapshot).toEqual(0);
15
+ });
16
+ });
17
+ }
@@ -1,13 +1,15 @@
1
- import { PATH_E2E_CHAT } from '../../paths';
1
+ import { PATH_E2E_CHAT, PATH_E2E_CHAT_BUBBLE } from '../../paths';
2
2
  import { PageObject, Urlbuilder } from '../../helpers';
3
3
 
4
4
  export default class BubbleCO extends PageObject {
5
- static bubbleURL = new Urlbuilder(PATH_E2E_CHAT, 'bubble-test');
5
+ static bubbleURL = new Urlbuilder(PATH_E2E_CHAT_BUBBLE, 'bubble-test');
6
6
 
7
- static bubbleWrapping = new Urlbuilder(PATH_E2E_CHAT, 'bubble-wrapping-test');
7
+ static bubbleWrapping = new Urlbuilder(PATH_E2E_CHAT_BUBBLE, 'bubble-wrapping-test');
8
8
 
9
9
  static systemMessageInContainerUCURL = new Urlbuilder(PATH_E2E_CHAT, 'system-message-in-container');
10
10
 
11
+ static bubbleSlotsURL = new Urlbuilder(PATH_E2E_CHAT_BUBBLE, 'slots-test');
12
+
11
13
  // selectors
12
14
  static async getErrorMessage(bubbleId) {
13
15
  return $(`[data-testid="chat-bubble-error-message-${bubbleId}"]`);
@@ -56,6 +58,47 @@ export default class BubbleCO extends PageObject {
56
58
  }, bubbleId);
57
59
  }
58
60
 
61
+ static async getBubbleWrapper(bubbleId) {
62
+ return $(`[data-testid="ds-chat-bubble-${bubbleId}"]`);
63
+ }
64
+
65
+ // Slot selectors (used by slots func spec — one bubble per story)
66
+ static async getWrapperSlot() {
67
+ return $('[data-dimsum-slot="dsBubbleWrapper"]');
68
+ }
69
+
70
+ static async getColoredBubbleSlot() {
71
+ return $('[data-dimsum-slot="dsBubbleColoredBubble"]');
72
+ }
73
+
74
+ static async getHeaderSlot() {
75
+ return $('[data-dimsum-slot="dsBubbleHeader"]');
76
+ }
77
+
78
+ static async getHeaderLeftSlot() {
79
+ return $('[data-dimsum-slot="dsBubbleHeaderLeft"]');
80
+ }
81
+
82
+ static async getHeaderRightSlot() {
83
+ return $('[data-dimsum-slot="dsBubbleHeaderRight"]');
84
+ }
85
+
86
+ static async getBodyWrapperSlot() {
87
+ return $('[data-dimsum-slot="dsBubbleBodyWrapper"]');
88
+ }
89
+
90
+ static async getArrowSlot() {
91
+ return $('[data-dimsum-slot="dsBubbleArrow"]');
92
+ }
93
+
94
+ static async getErrorMessageSlot() {
95
+ return $('[data-dimsum-slot="dsBubbleErrorMessage"]');
96
+ }
97
+
98
+ static async getHelpMessageSlot() {
99
+ return $('[data-dimsum-slot="dsBubbleHelpMessage"]');
100
+ }
101
+
59
102
  // Snapshots
60
103
  static snapshotPath(example = 'basic') {
61
104
  return PageObject.getSnapshotPathBuilder('Bubble', example, 'ds-chat');
@@ -0,0 +1,77 @@
1
+ import { PATH_CHAT_PARTS, PATH_E2E_CHAT_CARD } from '../../paths';
2
+ import { PageObject, Urlbuilder } from '../../helpers';
3
+
4
+ export default class CardCO extends PageObject {
5
+ static chatCardURL = new Urlbuilder(PATH_CHAT_PARTS, 'chat-card');
6
+
7
+ static cardBasicURL = new Urlbuilder(PATH_E2E_CHAT_CARD, 'basic-test');
8
+
9
+ static cardWithNotificationBadgesURL = new Urlbuilder(PATH_E2E_CHAT_CARD, 'with-notification-badges-test');
10
+
11
+ static cardTruncatedURL = new Urlbuilder(PATH_E2E_CHAT_CARD, 'truncated-text-test');
12
+
13
+ static cardSlotsURL = new Urlbuilder(PATH_E2E_CHAT_CARD, 'slots-test');
14
+
15
+ static async getCards() {
16
+ return $$('[data-testid="chat-card-wrapper"]');
17
+ }
18
+
19
+ static async getCardRoot(cardId) {
20
+ return $(`[data-testid="chat-card-wrapper-${cardId}"]`);
21
+ }
22
+
23
+ static async getCardTitle(cardId) {
24
+ return $(`[data-testid="chat-card-title-${cardId}"]`);
25
+ }
26
+
27
+ static async getCardContent(cardId) {
28
+ return $(`[data-testid="chat-card-content-${cardId}"]`);
29
+ }
30
+
31
+ static async getCardTime(cardId) {
32
+ return $(`[data-testid="chat-card-time-${cardId}"]`);
33
+ }
34
+
35
+ // Truncated text selectors
36
+ static async getTruncatedSpan(index = 0) {
37
+ return $$('[data-dimsum-slot="dsChatcardTruncatedSpan"]')[index];
38
+ }
39
+
40
+ static async getTooltipContainer() {
41
+ return $('[data-dimsum-slot="dsChatcardTooltipContainer"]');
42
+ }
43
+
44
+ // Slot selectors (used by slots func spec — one card per story)
45
+ static async getRootSlot() {
46
+ return $('[data-dimsum-slot="dsChatcardRoot"]');
47
+ }
48
+
49
+ static async getMainContentSlot() {
50
+ return $('[data-dimsum-slot="dsChatcardMainContent"]');
51
+ }
52
+
53
+ static async getTitleSlot() {
54
+ return $('[data-dimsum-slot="dsChatcardTitle"]');
55
+ }
56
+
57
+ static async getContentSlot() {
58
+ return $('[data-dimsum-slot="dsChatcardContent"]');
59
+ }
60
+
61
+ static async getTimeSlot() {
62
+ return $('[data-dimsum-slot="dsChatcardTime"]');
63
+ }
64
+
65
+ static async getRightAddonSlot() {
66
+ return $('[data-dimsum-slot="dsChatcardRightAddon"]');
67
+ }
68
+
69
+ static async getTruncatedSpanSlot() {
70
+ return $('[data-dimsum-slot="dsChatcardTruncatedSpan"]');
71
+ }
72
+
73
+ // Snapshots
74
+ static snapshotPath(example = 'basic') {
75
+ return PageObject.getSnapshotPathBuilder('Card', example, 'ds-chat');
76
+ }
77
+ }
@@ -1,19 +1,19 @@
1
1
  /* eslint-disable import/no-relative-packages */
2
- import { PATH_CHAT_EXAMPLES, PATH_E2E_CHAT, PATH_CHAT_PARTS } from '../../paths';
2
+ import { PATH_E2E_CHAT } from '../../paths';
3
3
  import { PageObject, Urlbuilder } from '../../helpers';
4
4
 
5
5
  export default class ComposerCO extends PageObject {
6
- static composerURL = new Urlbuilder(PATH_CHAT_PARTS, 'composer');
6
+ static composerURL = new Urlbuilder(PATH_E2E_CHAT, 'composer');
7
7
 
8
- static mobileComposerURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'mobile-container');
8
+ static mobileComposerURL = new Urlbuilder(PATH_E2E_CHAT, 'mobile-container');
9
9
 
10
- static characterCountURL = new Urlbuilder(PATH_CHAT_PARTS, 'composer-character-count');
10
+ static characterCountURL = new Urlbuilder(PATH_E2E_CHAT, 'composer-character-count');
11
11
 
12
- static characterCountCustomURL = new Urlbuilder(PATH_CHAT_PARTS, 'composer-character-count-custom-message');
12
+ static characterCountCustomURL = new Urlbuilder(PATH_E2E_CHAT, 'composer-character-count-custom-message');
13
13
 
14
14
  static responsiveContainerUCURL = new Urlbuilder(PATH_E2E_CHAT, 'responsive-container');
15
15
 
16
- static containerFocusCasesURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'container-focus-cases');
16
+ static containerFocusCasesURL = new Urlbuilder(PATH_E2E_CHAT, 'container-focus-cases');
17
17
 
18
18
  static LONG_STRING = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus vehicula bibendum nulla';
19
19
 
@@ -1,8 +1,8 @@
1
- import { PATH_CHAT_PARTS, PATH_E2E_CHAT } from '../../paths';
1
+ import { PATH_E2E_CHAT } from '../../paths';
2
2
  import { PageObject, Urlbuilder } from '../../helpers';
3
3
 
4
4
  export default class FloatingButtonCO extends PageObject {
5
- static floatingButtonURL = new Urlbuilder(PATH_CHAT_PARTS, 'float-button');
5
+ static floatingButtonURL = new Urlbuilder(PATH_E2E_CHAT, 'float-button');
6
6
 
7
7
  static floatingExampleURL = new Urlbuilder(PATH_E2E_CHAT, 'floating-example-test');
8
8
 
@@ -1,9 +1,9 @@
1
1
  /* eslint-disable import/no-relative-packages */
2
- import { PATH_CHAT_PARTS, PATH_E2E_CHAT } from '../../paths';
2
+ import { PATH_E2E_CHAT } from '../../paths';
3
3
  import { PageObject, Urlbuilder } from '../../helpers';
4
4
 
5
5
  export default class HeaderCO extends PageObject {
6
- static headerURL = new Urlbuilder(PATH_CHAT_PARTS, 'header');
6
+ static headerURL = new Urlbuilder(PATH_E2E_CHAT, 'header');
7
7
 
8
8
  static withConditionalRenderingUCURL = new Urlbuilder(PATH_E2E_CHAT, 'conditional-rendering-header-buttons');
9
9
 
@@ -0,0 +1,82 @@
1
+ import { PATH_E2E_CHAT, PATH_E2E_CHAT_TILE } from '../../paths';
2
+ import { PageObject, Urlbuilder } from '../../helpers';
3
+
4
+ export default class TileCO extends PageObject {
5
+ static tilesURL = new Urlbuilder(PATH_E2E_CHAT, 'tile');
6
+
7
+ static sidebarURL = new Urlbuilder(PATH_E2E_CHAT, 'sidebar');
8
+
9
+ static applyAriaDisabledURL = new Urlbuilder(PATH_E2E_CHAT_TILE, 'apply-aria-disabled-test');
10
+
11
+ static slotsTestURL = new Urlbuilder(PATH_E2E_CHAT_TILE, 'slots-test');
12
+
13
+ static async getChatTile(tileId) {
14
+ return $(`[data-testid="tile-button-${tileId}"]`);
15
+ }
16
+
17
+ static async getChatTileButtonItem(tileId) {
18
+ return $(`[data-testid="tile-button-item-id-${tileId}"]`);
19
+ }
20
+
21
+ static async getSideBarSelectedTile() {
22
+ return $(`[data-testid="selected-tile"]`).getText();
23
+ }
24
+
25
+ static async getTileTooltip(id) {
26
+ return $(`[data-testid="ds-tooltip-v3-trigger-wrapper_ds-chat-tile-tooltip-button-item-id-${id}"]`);
27
+ }
28
+
29
+ static async getCounter() {
30
+ return $('[data-testid="counter"]');
31
+ }
32
+
33
+ static async getTileBadge(tileId) {
34
+ return $(`[data-testid="tile-badge-${tileId}"]`);
35
+ }
36
+
37
+ static async getTileCloseButton(tileId) {
38
+ return $(`[data-testid="tile-close-btn-${tileId}"]`);
39
+ }
40
+
41
+ // Slot selectors (used by slots func spec — one tile per story)
42
+ static async getRootSlot() {
43
+ return $('[data-dimsum-slot="dsChattilebuttonRoot"]');
44
+ }
45
+
46
+ static async getTooltipWrapperSlot() {
47
+ return $('[data-dimsum-slot="dsChattilebuttonTooltipWrapper"]');
48
+ }
49
+
50
+ static async getWrapperSlot() {
51
+ return $('[data-dimsum-slot="dsChattilebuttonWrapper"]');
52
+ }
53
+
54
+ static async getLeftBorderSlot() {
55
+ return $('[data-dimsum-slot="dsChattilebuttonLeftBorder"]');
56
+ }
57
+
58
+ static async getCentralContentSlot() {
59
+ return $('[data-dimsum-slot="dsChattilebuttonCentralContent"]');
60
+ }
61
+
62
+ static async getIconSlot() {
63
+ return $('[data-dimsum-slot="dsChattilebuttonIcon"]');
64
+ }
65
+
66
+ static async getLabelSlot() {
67
+ return $('[data-dimsum-slot="dsChattilebuttonLabel"]');
68
+ }
69
+
70
+ static async getBadgeSlot() {
71
+ return $('[data-dimsum-slot="dsChattilebuttonBadge"]');
72
+ }
73
+
74
+ static async getCloseButtonSlot() {
75
+ return $('[data-dimsum-slot="dsChattilebuttonCloseButton"]');
76
+ }
77
+
78
+ // Snapshots
79
+ static snapshotPath(example = 'basic') {
80
+ return PageObject.getSnapshotPathBuilder('Tile', example, 'ds-chat');
81
+ }
82
+ }
@@ -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 '../../ds-chat-tile/TileCO';
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).toBeDisplayedInViewport();
24
+ await expect(bubble0).toBeDisplayed();
25
25
  });
26
26
  });
27
27
  }
@@ -1,6 +1,6 @@
1
1
  import { Key } from 'webdriverio';
2
- import { axeCoreCheck } from '../helpers';
3
- import TileCO from './TileCO';
2
+ import { axeCoreCheck } from '../../helpers';
3
+ import { TileCO } from '../components';
4
4
 
5
5
  if (
6
6
  (!browser.capabilities['ice:options'].isPhone &&
@@ -1,5 +1,5 @@
1
1
  import { Key } from 'webdriverio';
2
- import TileCO from './TileCO';
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 './TileCO';
3
- import { mouseOver, keyboardActions, tickActions, performKeyboardAction } from '../helpers';
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', () => {
@@ -1,5 +1,5 @@
1
- import { axeCoreCheck } from '../../helpers';
2
- import TileCO from '../TileCO';
1
+ import { axeCoreCheck } from '../../../helpers';
2
+ import { TileCO } from '../../components';
3
3
 
4
4
  if (
5
5
  (!browser.capabilities['ice:options'].isPhone &&
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable max-len */
2
2
  import { Key } from 'webdriverio';
3
- import TileCO from '../TileCO';
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', () => {