dimsum-e2e-tests 3.70.0-next.2 → 3.70.0-next.21

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 (93) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/ds-autocomplete/DSAutocomplete.visual.spec.js +34 -0
  3. package/ds-autocomplete/DSAutocompleteCO.js +2 -0
  4. package/ds-chat/DSChat.axe-core.func.spec.js +2 -2
  5. package/ds-chat/DSChat.visual.spec.js +3 -3
  6. package/ds-chat/DSChatCO.js +17 -23
  7. package/ds-chat/bubbles/slots/DSChatBubble.slots.axe-core.func.spec.js +24 -0
  8. package/ds-chat/bubbles/slots/DSChatBubble.slots.func.spec.js +49 -0
  9. package/ds-chat/bubbles/slots/DSChatBubble.slots.visual.spec.js +25 -0
  10. package/ds-chat/card/slots/DSChatCard.slots.axe-core.func.spec.js +24 -0
  11. package/ds-chat/card/slots/DSChatCard.slots.func.spec.js +47 -0
  12. package/ds-chat/card/slots/DSChatCard.slots.visual.spec.js +18 -0
  13. package/ds-chat/card/truncated-text/DSChatCard.truncated-text.func.spec.js +32 -0
  14. package/ds-chat/card/truncated-text/DSChatCard.truncated-text.visual.spec.js +26 -0
  15. package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.axe-core.func.spec.js +23 -0
  16. package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.visual.spec.js +17 -0
  17. package/ds-chat/components/BubbleCO.js +46 -3
  18. package/ds-chat/components/CardCO.js +77 -0
  19. package/ds-chat/components/ComposerCO.js +6 -6
  20. package/ds-chat/components/FloatingButtonCO.js +2 -2
  21. package/ds-chat/components/HeaderCO.js +2 -2
  22. package/ds-chat/components/TileCO.js +82 -0
  23. package/ds-chat/components/index.js +3 -2
  24. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.axe-core.func.spec.js +2 -2
  25. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.func.spec.js +1 -1
  26. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.visual.spec.js +2 -2
  27. package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.axe-core.func.spec.js +2 -2
  28. package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.visual.spec.js +1 -1
  29. package/ds-chat/tile/slots/DSChatTile.slots.func.spec.js +53 -0
  30. package/ds-chat/tile/slots/DSChatTile.slots.visual.spec.js +18 -0
  31. package/ds-controlled-form/ds-combobox/DSComboboxCO.js +2 -2
  32. package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +1 -1
  33. package/ds-controlled-form/ds-controlled-inputgroup/DSControlledInputGroupCO.js +1 -1
  34. package/ds-data-table-async/DSDataTableCO.js +10 -12
  35. package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -1
  36. package/ds-data-table-async/components/FiltersCO.js +1 -1
  37. package/ds-data-table-async/components/HeaderCO.js +22 -10
  38. package/ds-dialog/DSDialog.visual.spec.js +16 -31
  39. package/ds-dialog/DSDialogCO.js +58 -0
  40. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.axe-core.func.spec.js +27 -0
  41. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.func.spec.js +56 -0
  42. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.visual.spec.js +20 -0
  43. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.axe-core.func.spec.js +25 -0
  44. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.func.spec.js +52 -0
  45. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.visual.spec.js +20 -0
  46. package/ds-dialog/axe-core/DSDialog.accessible-form.axe-core.func.spec.js +25 -0
  47. package/ds-dialog/axe-core/DSDialog.basic.axe-core.func.spec.js +25 -0
  48. package/ds-dialog/axe-core/DSDialog.centered.axe-core.func.spec.js +25 -0
  49. package/ds-dialog/axe-core/DSDialog.decision.axe-core.func.spec.js +57 -0
  50. package/ds-dialog/axe-core/DSDialog.long-body.axe-core.func.spec.js +25 -0
  51. package/ds-dialog/axe-core/DSDialog.warning.axe-core.func.spec.js +24 -0
  52. package/ds-dialog/axe-core/DSDialog.wizard.axe-core.func.spec.js +28 -0
  53. package/ds-dialog/click-outside/DSDialog.click-outside.func.spec.js +31 -0
  54. package/ds-dialog/esc-close/DSDialog.esc-close.func.spec.js +31 -0
  55. package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.axe-core.func.spec.js +46 -0
  56. package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.func.spec.js +50 -0
  57. package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.axe-core.func.spec.js +25 -0
  58. package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.visual.spec.js +37 -0
  59. package/ds-dialog/single-button-footer/DSDialog.single-button-footer.axe-core.func.spec.js +25 -0
  60. package/ds-dialog/single-button-footer/DSDialog.single-button-footer.visual.spec.js +20 -0
  61. package/ds-dialog/size-variants/DSDialog.size-variants.visual.spec.js +116 -0
  62. package/ds-form-combobox-multi/DSComboboxMultiCO.js +6 -2
  63. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +49 -0
  64. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
  65. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
  66. package/ds-form-combobox-single/DSComboboxSingleCO.js +6 -2
  67. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.axe-core.func.spec.js +49 -0
  68. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js +54 -0
  69. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
  70. package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
  71. package/ds-form-native-select/NativeSelectCO.js +6 -0
  72. package/ds-global-header/GlobalHeader.axe-core.func.spec.js +30 -0
  73. package/ds-global-header/GlobalHeader.visual.spec.js +31 -0
  74. package/ds-leftnavigation/LeftNavigationCO.js +2 -2
  75. package/ds-modal-slide/ModalSlideCO.js +39 -0
  76. package/ds-modal-slide/custom-header/ModalSlide.customHeader.focusRing.visual.spec.js +2 -1
  77. package/ds-modal-slide/slots/ModalSlide.slots.func.spec.js +74 -0
  78. package/ds-modal-slide/slots/ModalSlide.slots.visual.spec.js +27 -0
  79. package/ds-page-layout/PageLayoutCO.js +4 -4
  80. package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +2 -0
  81. package/ds-progress-indicator/DSProgressIndicatorCO.js +1 -1
  82. package/ds-tab-button/DSTabButton.func.spec.js +1 -1
  83. package/ds-tabs/DSTabs.visual.spec.js +1 -2
  84. package/ds-tabs/DSTabsCO.js +2 -2
  85. package/ds-tabs/with-carousel/DSTabs.with-carousel.func.spec.js +22 -7
  86. package/ds-tabs/with-carousel/DSTabs.with-carousel.visual.spec.js +9 -9
  87. package/ds-tooltip-v3/DSTooltipV3CO.js +6 -0
  88. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js +23 -0
  89. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.func.spec.js +29 -0
  90. package/ds-treeview/DSTreeViewCO.js +2 -2
  91. package/package.json +149 -151
  92. package/paths.js +5 -1
  93. package/ds-chat-tile/TileCO.js +0 -35
package/CHANGELOG.md CHANGED
@@ -3,6 +3,116 @@
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-next.21 (2026-06-01)
7
+
8
+ **Note:** Version bump only for package dimsum-e2e-tests
9
+
10
+ ## 3.70.0-next.20 (2026-06-01)
11
+
12
+ ### Bug Fixes
13
+
14
+ - environment:: fix CO URL routing for ds-chat [PUI-18039](https://jira.elliemae.io/browse/PUI-18039) ([#8064](https://git.elliemae.io/platform-ui/dimsum/issues/8064)) ([ad7ba54](https://git.elliemae.io/platform-ui/dimsum/commit/ad7ba54dc4aafdcff00aeb17b20a39f3cd9b458b))
15
+
16
+ ## 3.70.0-next.19 (2026-05-28)
17
+
18
+ ### Features
19
+
20
+ - ds-chat-empty-state:: slot system constants module, test pillars, deviations register, promote storybook to Chat section [PUI-17908](https://jira.elliemae.io/browse/PUI-17908) ([#8062](https://git.elliemae.io/platform-ui/dimsum/issues/8062)) ([08ed09e](https://git.elliemae.io/platform-ui/dimsum/commit/08ed09e95484763ec0fdddc81d1a8124a3918333))
21
+
22
+ ## 3.70.0-next.18 (2026-05-27)
23
+
24
+ ### Features
25
+
26
+ - ds-chat-message-delimeter:: bring package to full Dimsum compliance — slot system, constants module, test pillars, deviations register, promote storybook to Chat section [PUI-17908](https://jira.elliemae.io/browse/PUI-17908) ([#8061](https://git.elliemae.io/platform-ui/dimsum/issues/8061)) ([d6cd0f9](https://git.elliemae.io/platform-ui/dimsum/commit/d6cd0f93543645f14d0792f78cf4ecfccf1b9bef))
27
+
28
+ ## 3.70.0-next.17 (2026-05-27)
29
+
30
+ ### Features
31
+
32
+ - dimsum:: new portal now has support for searching content [PUI-18454](https://jira.elliemae.io/browse/PUI-18454) ([#8059](https://git.elliemae.io/platform-ui/dimsum/issues/8059)) ([405dbe5](https://git.elliemae.io/platform-ui/dimsum/commit/405dbe5203782b4019c3d31777ca9a525f54518d))
33
+
34
+ ## 3.70.0-next.16 (2026-05-25)
35
+
36
+ **Note:** Version bump only for package dimsum-e2e-tests
37
+
38
+ ## 3.70.0-next.15 (2026-05-22)
39
+
40
+ ### Features
41
+
42
+ - dimsum:: created open-spec dimsum wrapper for monorepo operation [PUI-18489](https://jira.elliemae.io/browse/PUI-18489) ([#8045](https://git.elliemae.io/platform-ui/dimsum/issues/8045)) ([0c8e422](https://git.elliemae.io/platform-ui/dimsum/commit/0c8e422cb87de489439faa38eab4129a6ebf8299))
43
+
44
+ ## 3.70.0-next.14 (2026-05-21)
45
+
46
+ ### Features
47
+
48
+ - ds-chat:: add visual and functional tests for slot support [PUI-17908](https://jira.elliemae.io/browse/PUI-17908) ([#8042](https://git.elliemae.io/platform-ui/dimsum/issues/8042)) ([e1fe993](https://git.elliemae.io/platform-ui/dimsum/commit/e1fe993dca1b73f003daa87558fd75097d2bb79a))
49
+
50
+ ## 3.70.0-next.13 (2026-05-19)
51
+
52
+ ### Bug Fixes
53
+
54
+ - ds-data-table:: clickout side filters improve [PUI-18469](https://jira.elliemae.io/browse/PUI-18469) ([#8035](https://git.elliemae.io/platform-ui/dimsum/issues/8035)) ([b6d1549](https://git.elliemae.io/platform-ui/dimsum/commit/b6d1549b9b369692ab93487ba24a37216f4738de))
55
+
56
+ ## 3.70.0-next.12 (2026-05-15)
57
+
58
+ ### Features
59
+
60
+ - ds-chat-floating-button:: dimsum compliance and slots support [PUI-17908](https://jira.elliemae.io/browse/PUI-17908) ([#8032](https://git.elliemae.io/platform-ui/dimsum/issues/8032)) ([9bc4ae8](https://git.elliemae.io/platform-ui/dimsum/commit/9bc4ae814b9276d369688d4ab4e0150b3e7cc09a))
61
+
62
+ ## 3.70.0-next.11 (2026-05-14)
63
+
64
+ ### Bug Fixes
65
+
66
+ - ds-combobox-multi:: combobox aria busy e2e [PUI-18445](https://jira.elliemae.io/browse/PUI-18445) ([#8027](https://git.elliemae.io/platform-ui/dimsum/issues/8027)) ([cdbff4e](https://git.elliemae.io/platform-ui/dimsum/commit/cdbff4eb2a09af6de888dc8a13af5027836bd0a4))
67
+
68
+ ## 3.70.0-next.10 (2026-05-14)
69
+
70
+ ### Features
71
+
72
+ - ds-chat-sidebar:: dimsum compliance and slots support [PUI-17908](https://jira.elliemae.io/browse/PUI-17908) ([#8030](https://git.elliemae.io/platform-ui/dimsum/issues/8030)) ([0377613](https://git.elliemae.io/platform-ui/dimsum/commit/0377613123d62602a8128d754f201f45a4c3f396))
73
+
74
+ ## 3.70.0-next.9 (2026-05-12)
75
+
76
+ ### Features
77
+
78
+ - ds-floating-context:: external ref feature [PUI-18440](https://jira.elliemae.io/browse/PUI-18440) ([#8023](https://git.elliemae.io/platform-ui/dimsum/issues/8023)) ([ee46ed5](https://git.elliemae.io/platform-ui/dimsum/commit/ee46ed5163f1771ff6dee22ad0654131fd13ff56))
79
+
80
+ ## 3.70.0-next.8 (2026-05-12)
81
+
82
+ ### Bug Fixes
83
+
84
+ - ds-chat-bubble:: add missing export in test ([57d294a](https://git.elliemae.io/platform-ui/dimsum/commit/57d294aef0b2739cb2ac0afe673d9c4ccfe0e718))
85
+
86
+ ## 3.70.0-next.7 (2026-05-11)
87
+
88
+ ### Bug Fixes
89
+
90
+ - ds-modal-slide:: added e2e test for slots [PUI-18428](https://jira.elliemae.io/browse/PUI-18428) ([#8016](https://git.elliemae.io/platform-ui/dimsum/issues/8016)) ([8fa99f8](https://git.elliemae.io/platform-ui/dimsum/commit/8fa99f8e14fe7d8b1fedd916e392761f2188904e))
91
+
92
+ ## 3.70.0-next.6 (2026-05-11)
93
+
94
+ ### Bug Fixes
95
+
96
+ - ds-form-combobox:: replace racing assertive live region with aria-busy + polite count [PUI-18034](https://jira.elliemae.io/browse/PUI-18034) ([#8018](https://git.elliemae.io/platform-ui/dimsum/issues/8018)) ([6e02644](https://git.elliemae.io/platform-ui/dimsum/commit/6e02644e2c17a53c6ca87737a6e10b59adce57fb))
97
+
98
+ ## 3.70.0-next.5 (2026-05-08)
99
+
100
+ ### Features
101
+
102
+ - ds-popperjs:: deprecated & migration to fc [PUI-18079](https://jira.elliemae.io/browse/PUI-18079) ([#8000](https://git.elliemae.io/platform-ui/dimsum/issues/8000)) ([c5f1d5c](https://git.elliemae.io/platform-ui/dimsum/commit/c5f1d5c0163f831b33327e5783d26380a9f2798a))
103
+
104
+ ## 3.70.0-next.4 (2026-05-06)
105
+
106
+ ### Bug Fixes
107
+
108
+ - ds-form-combobox:: fixing defect [PUI-17903](https://jira.elliemae.io/browse/PUI-17903) ([#8007](https://git.elliemae.io/platform-ui/dimsum/issues/8007)) ([16df5f9](https://git.elliemae.io/platform-ui/dimsum/commit/16df5f9395d38d9dce4833d50c2e65ed692277a1))
109
+
110
+ ## 3.70.0-next.3 (2026-05-05)
111
+
112
+ ### Features
113
+
114
+ - ds-modal-slide:: dimsum compliance [17128] (https://jira.elliemae.io/browse/PUI- 17128) ([#7995](https://git.elliemae.io/platform-ui/dimsum/issues/7995)) ([7c772e3](https://git.elliemae.io/platform-ui/dimsum/commit/7c772e3cdd219cd45f3b32f37b4a25f9989afb3b))
115
+
6
116
  ## 3.70.0-next.2 (2026-05-05)
7
117
 
8
118
  **Note:** Version bump only for package dimsum-e2e-tests
@@ -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
+ }
@@ -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');