dimsum-e2e-tests 3.57.0-next.2 → 3.57.0-next.22

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 (38) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/ds-accordion/DSAccordionCO.js +1 -2
  3. package/ds-accordion/slots/DSAccordion.slots.func.spec.js +12 -0
  4. package/ds-card-navigation/CardNavigationCO.js +50 -0
  5. package/ds-card-navigation/DSCardNavigation.slots.func.spec.js +127 -0
  6. package/ds-card-navigation/DSCardNavigation.slots.visual.spec.js +26 -0
  7. package/ds-data-table-async/DSDataTableCO.js +6 -1
  8. package/ds-data-table-async/components/FilterBarCO.js +8 -0
  9. package/ds-data-table-async/components/FiltersCO.js +8 -0
  10. package/ds-data-table-async/filters/DSDataTable.free-text-search.keyboard.func.spec.js +70 -5
  11. package/ds-data-table-async/filters/DSDataTable.text-filters.func.spec.js +3 -3
  12. package/ds-data-table-async/select/DSDataTable.select.func.spec.js +1 -1
  13. package/ds-data-table-async/slots/DSDataTable.slots.func.spec.js +40 -0
  14. package/ds-data-table-async/slots/DSDataTable.slots.visual.spec.js +19 -0
  15. package/ds-dialog/DSDialog.visual.spec.js +1 -1
  16. package/ds-dialog/DSDialogCO.js +5 -13
  17. package/ds-dialog/axe-core/DSDialog.error.axe-core.func.spec.js +24 -0
  18. package/ds-dialog/axe-core/DSDialog.info.axe-core.func.spec.js +24 -0
  19. package/ds-dialog/axe-core/DSDialog.scroll-body.axe-core.func.spec.js +24 -0
  20. package/ds-dialog/axe-core/DSDialog.success.axe-core.func.spec.js +24 -0
  21. package/ds-dialog/axe-core/DSDialog.warning.axe-core.spec.func.js +24 -0
  22. package/ds-form-combobox-multi/DSComboboxMultiCO.js +80 -1
  23. package/ds-form-combobox-multi/slots/DSComboboxMulti.slots.func.spec.js +100 -0
  24. package/ds-form-combobox-multi/slots/DSComboboxMulti.slots.visual.spec.js +51 -0
  25. package/ds-form-combobox-single/DSComboboxSingleCO.js +16 -14
  26. package/ds-form-combobox-single/slots/DSComboboxSingle.slots.func.spec.js +65 -35
  27. package/ds-form-combobox-single/slots/DSComboboxSingle.slots.visual.spec.js +53 -0
  28. package/ds-form-layout-blocks/form-layout-block-item/DSFormLayoutBlockItem.axe-core.func.spec.js +4 -1
  29. package/ds-form-layout-blocks/form-layout-block-item/DSFormLayoutBlockItemCO.js +4 -0
  30. package/{ds-toggle → ds-form-toggle}/DSToggle.axe-core.func.spec.js +6 -2
  31. package/{ds-toggle → ds-form-toggle}/DSToggle.func.spec.js +13 -8
  32. package/{ds-toggle → ds-form-toggle}/DSToggle.visual.spec.js +2 -2
  33. package/{ds-toggle → ds-form-toggle}/DSToggleCO.js +1 -1
  34. package/ds-menu-button/submenu/DSMenuButton.axe-core.subMenu.func.spec.js +1 -2
  35. package/ds-read-more/DSReadMore.width-change.visual.spec.js +85 -0
  36. package/package.json +187 -187
  37. package/paths.js +2 -0
  38. package/ds-dialog/DSDialog.smoke.spec.js +0 -133
package/CHANGELOG.md CHANGED
@@ -3,6 +3,114 @@
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.57.0-next.22 (2025-11-04)
7
+
8
+ ### Bug Fixes
9
+
10
+ - ds-read-more:: add visual test for 1 line use case [PUI-17309](https://jira.elliemae.io/browse/PUI-17309) ([#7730](https://git.elliemae.io/platform-ui/dimsum/issues/7730)) ([7033077](https://git.elliemae.io/platform-ui/dimsum/commit/703307710918421df948e8272a3e07f95340785a))
11
+
12
+ ## [3.57.0-next.21](https://git.elliemae.io/platform-ui/dimsum/compare/v3.57.0-next.20...v3.57.0-next.21) (2025-10-31)
13
+
14
+ **Note:** Version bump only for package dimsum-e2e-tests
15
+
16
+ ## 3.57.0-next.20 (2025-10-31)
17
+
18
+ ### Bug Fixes
19
+
20
+ - ds-form-combobox:: tabindex -1 for menue items restored ([#7733](https://git.elliemae.io/platform-ui/dimsum/issues/7733)) ([4509365](https://git.elliemae.io/platform-ui/dimsum/commit/4509365665582440236798bc57504ff7128d13e0))
21
+
22
+ ## [3.57.0-next.19](https://git.elliemae.io/platform-ui/dimsum/compare/v3.57.0-next.18...v3.57.0-next.19) (2025-10-31)
23
+
24
+ **Note:** Version bump only for package dimsum-e2e-tests
25
+
26
+ ## [3.57.0-next.18](https://git.elliemae.io/platform-ui/dimsum/compare/v3.57.0-next.17...v3.57.0-next.18) (2025-10-30)
27
+
28
+ **Note:** Version bump only for package dimsum-e2e-tests
29
+
30
+ ## 3.57.0-next.17 (2025-10-30)
31
+
32
+ **Note:** Version bump only for package dimsum-e2e-tests
33
+
34
+ ## [3.57.0-next.16](https://git.elliemae.io/platform-ui/dimsum/compare/v3.57.0-next.15...v3.57.0-next.16) (2025-10-30)
35
+
36
+ **Note:** Version bump only for package dimsum-e2e-tests
37
+
38
+ ## 3.57.0-next.15 (2025-10-29)
39
+
40
+ ### Bug Fixes
41
+
42
+ - ds-form-input-text:: restored focus tracking logic per regression [PUI-17351](https://jira.elliemae.io/browse/PUI-17351) ([#7728](https://git.elliemae.io/platform-ui/dimsum/issues/7728)) ([b08d9c8](https://git.elliemae.io/platform-ui/dimsum/commit/b08d9c8b21fa3de563c041067d3d83950d11eac4))
43
+
44
+ ## 3.57.0-next.14 (2025-10-29)
45
+
46
+ ### Bug Fixes
47
+
48
+ - ds-data-table:: fixed axe-core unit test ([#7727](https://git.elliemae.io/platform-ui/dimsum/issues/7727)) ([93a1929](https://git.elliemae.io/platform-ui/dimsum/commit/93a19293301bd564cc75b27e8c7367c554b6c123))
49
+
50
+ ## 3.57.0-next.13 (2025-10-29)
51
+
52
+ ### Bug Fixes
53
+
54
+ - ds-form-input-text:: fixed unit tests ([#7721](https://git.elliemae.io/platform-ui/dimsum/issues/7721)) ([66970ab](https://git.elliemae.io/platform-ui/dimsum/commit/66970abea2be7aba90c7231c9feb7b873b8c819a))
55
+
56
+ ## 3.57.0-next.12 (2025-10-23)
57
+
58
+ ### Bug Fixes
59
+
60
+ - ds-mobile:: mobile card update ([#7702](https://git.elliemae.io/platform-ui/dimsum/issues/7702)) ([3c718ae](https://git.elliemae.io/platform-ui/dimsum/commit/3c718ae2b97b77f9eefbd262eb093f22cc21a4fd))
61
+
62
+ ## 3.57.0-next.11 (2025-10-23)
63
+
64
+ **Note:** Version bump only for package dimsum-e2e-tests
65
+
66
+ ## 3.57.0-next.10 (2025-10-21)
67
+
68
+ ### Bug Fixes
69
+
70
+ - ds-data-table:: adding a slot for the popover wrapper [PUI-17259](https://jira.elliemae.io/browse/PUI-17259) ([#7700](https://git.elliemae.io/platform-ui/dimsum/issues/7700)) ([e841c77](https://git.elliemae.io/platform-ui/dimsum/commit/e841c776c9c1c203056bbdf7dcd8196175184007))
71
+
72
+ ## 3.57.0-next.9 (2025-10-21)
73
+
74
+ ### Features
75
+
76
+ - dimsum:: third parties from catalog + mobile removed polished [PUI-17293](https://jira.elliemae.io/browse/PUI-17293) ([#7696](https://git.elliemae.io/platform-ui/dimsum/issues/7696)) ([8b060f7](https://git.elliemae.io/platform-ui/dimsum/commit/8b060f75541a9ed33f686636f0830d7a47299367))
77
+
78
+ ## 3.57.0-next.8 (2025-10-21)
79
+
80
+ ### Bug Fixes
81
+
82
+ - ds-floating-context:: removed default role complementary [PUI-16416](https://jira.elliemae.io/browse/PUI-16416) ([#7691](https://git.elliemae.io/platform-ui/dimsum/issues/7691)) ([fa86dbc](https://git.elliemae.io/platform-ui/dimsum/commit/fa86dbc94423f829e19fc7f3c01b83fa99d067f6))
83
+
84
+ ## 3.57.0-next.7 (2025-10-20)
85
+
86
+ ### Features
87
+
88
+ - ds-shuttle-v2:: ts testing [PUI-16342](https://jira.elliemae.io/browse/PUI-16342) ([#7695](https://git.elliemae.io/platform-ui/dimsum/issues/7695)) ([2213170](https://git.elliemae.io/platform-ui/dimsum/commit/22131708777560dc3342270a036dcb7ee91dfff7))
89
+
90
+ ## 3.57.0-next.6 (2025-10-16)
91
+
92
+ ### Features
93
+
94
+ - ds-shuttle-v2:: dimsum compliace constant relocation [PUI-16342](https://jira.elliemae.io/browse/PUI-16342) ([#7694](https://git.elliemae.io/platform-ui/dimsum/issues/7694)) ([a2ae67f](https://git.elliemae.io/platform-ui/dimsum/commit/a2ae67fc72eece35752ff2cc83d0e65d1e127c06))
95
+
96
+ ## 3.57.0-next.5 (2025-10-15)
97
+
98
+ ### Bug Fixes
99
+
100
+ - ds-accordion:: add functional tests for lang attribute customization [PUI-14885](https://jira.elliemae.io/browse/PUI-14885) ([#7692](https://git.elliemae.io/platform-ui/dimsum/issues/7692)) ([777e42e](https://git.elliemae.io/platform-ui/dimsum/commit/777e42ee9bdefb3e2b91eaa1fb51633dd8853d3b))
101
+
102
+ ## 3.57.0-next.4 (2025-10-13)
103
+
104
+ ### Features
105
+
106
+ - ds-shuttle-v2:: dimsum compliance [PUI-16342](https://jira.elliemae.io/browse/PUI-16342) ([#7687](https://git.elliemae.io/platform-ui/dimsum/issues/7687)) ([2408054](https://git.elliemae.io/platform-ui/dimsum/commit/2408054f546d9cd01d138edf57321b4317b98aa4))
107
+
108
+ ## 3.57.0-next.3 (2025-10-13)
109
+
110
+ ### Bug Fixes
111
+
112
+ - ds-form-layout-blocks:: updated e2e test for required [PUI-10970](https://jira.elliemae.io/browse/PUI-10970) ([#7671](https://git.elliemae.io/platform-ui/dimsum/issues/7671)) ([67a471b](https://git.elliemae.io/platform-ui/dimsum/commit/67a471b30a92e03b0d6a7fb9ad8cfe45c2692c71))
113
+
6
114
  ## 3.57.0-next.2 (2025-10-13)
7
115
 
8
116
  ### Bug Fixes
@@ -139,8 +139,7 @@ export default class DSAccordionCO extends PageObject {
139
139
  return $$('[data-dimsum-slot="dsAccordionItemContentContainer"]')[index];
140
140
  }
141
141
 
142
- static async getAccordionItemHeaderSecodnaryTitleSlotByIndex(index = 0) {
143
- // not used on example
142
+ static async getAccordionItemHeaderSecondaryTitleSlotByIndex(index = 0) {
144
143
  return $$('[data-dimsum-slot="dsAccordionItemHeaderSecondaryTitle"]')[index];
145
144
  }
146
145
 
@@ -19,6 +19,7 @@ if (
19
19
  const itemHeaderAddon = await DSAccordionCO.getAccordionItemHeaderAddonSlotByIndex();
20
20
  const itemHeaderContainer = await DSAccordionCO.getAccordionItemHeaderContainerSlotByIndex();
21
21
  const headerPrimaryTitle = await DSAccordionCO.getAccordionItemHeaderPrimaryTitleSlotByIndex();
22
+ const headerSecondaryTitle = await DSAccordionCO.getAccordionItemHeaderSecondaryTitleSlotByIndex();
22
23
  const headerTitlesContainer = await DSAccordionCO.getAccordionItemHeaderTitlesContainerSlotByIndex();
23
24
  await itemHeader.click();
24
25
  const itemContentContainer = await DSAccordionCO.getAccordionItemContentContainerSlotByIndex();
@@ -30,6 +31,7 @@ if (
30
31
  await expect(itemHeaderContainer).toHaveAttribute('aria-label', 'im itemheadercontainer aria');
31
32
  await expect(itemContentContainer).toHaveAttribute('aria-label', 'im itemcontentcontainer aria');
32
33
  await expect(headerPrimaryTitle).toHaveAttribute('aria-label', 'im itemheaderprimarytitle aria');
34
+ await expect(headerSecondaryTitle).toHaveAttribute('aria-label', 'im itemheadersecondarytitle aria');
33
35
  await expect(headerTitlesContainer).toHaveAttribute('aria-label', 'im itemheadertitlecontainer aria');
34
36
  });
35
37
  it('02: should have a custom data-testid for each slot', async () => {
@@ -39,6 +41,7 @@ if (
39
41
  const itemHeaderAddon = await DSAccordionCO.getAccordionItemHeaderAddonSlotByIndex();
40
42
  const itemHeaderContainer = await DSAccordionCO.getAccordionItemHeaderContainerSlotByIndex();
41
43
  const headerPrimaryTitle = await DSAccordionCO.getAccordionItemHeaderPrimaryTitleSlotByIndex();
44
+ const headerSecondaryTitle = await DSAccordionCO.getAccordionItemHeaderSecondaryTitleSlotByIndex();
42
45
  const headerTitlesContainer = await DSAccordionCO.getAccordionItemHeaderTitlesContainerSlotByIndex();
43
46
  const itemContentContainer = await DSAccordionCO.getAccordionItemContentContainerSlotByIndex();
44
47
  await itemContentContainer.waitForDisplayed();
@@ -49,7 +52,16 @@ if (
49
52
  await expect(itemHeaderContainer).toHaveAttribute('data-testid', 'im itemheadercontainer data');
50
53
  await expect(itemContentContainer).toHaveAttribute('data-testid', 'im itemcontentcontainer data');
51
54
  await expect(headerPrimaryTitle).toHaveAttribute('data-testid', 'im itemheaderprimarytitle data');
55
+ await expect(headerSecondaryTitle).toHaveAttribute('data-testid', 'im itemheadersecondarytitle data');
52
56
  await expect(headerTitlesContainer).toHaveAttribute('data-testid', 'im itemheadertitlecontainer data');
53
57
  });
58
+ it('03: should have a custom lang attribute for header, primary and secondary titles', async () => {
59
+ const headerPrimaryTitle = await DSAccordionCO.getAccordionItemHeaderPrimaryTitleSlotByIndex();
60
+ const headerSecondaryTitle = await DSAccordionCO.getAccordionItemHeaderSecondaryTitleSlotByIndex();
61
+ const itemHeader = await DSAccordionCO.getAccordionItemHeaderSlotByIndex();
62
+ await expect(headerPrimaryTitle).toHaveAttribute('lang', 'en-US');
63
+ await expect(headerSecondaryTitle).toHaveAttribute('lang', 'es-ES');
64
+ await expect(itemHeader).toHaveAttribute('lang', 'en-US');
65
+ });
54
66
  });
55
67
  }
@@ -8,6 +8,8 @@ export default class CardNavigation extends PageObject {
8
8
 
9
9
  static textWrapURL = new Urlbuilder(PATH_E2E_CARD_NAVIGATION, 'wrap-text-test');
10
10
 
11
+ static slotsTest = new Urlbuilder(PATH_E2E_CARD_NAVIGATION, 'slots-test');
12
+
11
13
  static getDescription() {
12
14
  return $('[data-testid="ds-card-navigation--description"]');
13
15
  }
@@ -20,6 +22,54 @@ export default class CardNavigation extends PageObject {
20
22
  return $$('[data-testid="ds-button"]')[index];
21
23
  }
22
24
 
25
+ static getCardNavigationActionsSlotByIndex(index = 0) {
26
+ return $$('[data-dimsum-slot="dsCardnavigationActions"]')[index];
27
+ }
28
+
29
+ static getCardNavigationActionButtonSlotByIndex(index = 0) {
30
+ return $$('[data-dimsum-parent-slot="dsCardnavigationActionButton"]')[index];
31
+ }
32
+
33
+ static getCardNavigationButtonWrapperSlotByIndex(index = 0) {
34
+ return $$('[data-dimsum-slot="dsCardnavigationButtonWrapper"]')[index];
35
+ }
36
+
37
+ static getCardNavigationCentralContentSlotByIndex(index = 0) {
38
+ return $$('[data-dimsum-slot="dsCardnavigationCentralContent"]')[index];
39
+ }
40
+
41
+ static getCardNavigationContentSlotByIndex(index = 0) {
42
+ return $$('[data-dimsum-slot="dsCardnavigationContent"]')[index];
43
+ }
44
+
45
+ static getCardNavigationDescriptionTextSlotByIndex(index = 0) {
46
+ return $$('[data-dimsum-parent-slot="dsCardnavigationDescriptionText"]')[index];
47
+ }
48
+
49
+ static getCardNavigationInteractiveElementRegionSlotByIndex(index = 0) {
50
+ return $$('[data-dimsum-slot="dsCardnavigationInteractiveElementRegion"]')[index];
51
+ }
52
+
53
+ static getCardNavigationTitleSlotByIndex(index = 0) {
54
+ return $$('[data-dimsum-slot="dsCardnavigationTitle"]')[index];
55
+ }
56
+
57
+ static getCardNavigationRootSlotByIndex(index = 0) {
58
+ return $$('[data-dimsum-slot="dsCardnavigationRoot"]')[index];
59
+ }
60
+
61
+ static getCardNavigationTitleTypographySlotByIndex(index = 0) {
62
+ return $$('[data-dimsum-parent-slot="dsCardnavigationTitleTypography"]')[index];
63
+ }
64
+
65
+ static getCardNavigationTitleWrapperSlotByIndex(index = 0) {
66
+ return $$('[data-dimsum-slot="dsCardnavigationTitleWrapper"]')[index];
67
+ }
68
+
69
+ static getCardNavigationTypeSlotByIndex(index = 0) {
70
+ return $$('[data-dimsum-slot="dsCardnavigationType"]')[index];
71
+ }
72
+
23
73
  // Snapshots
24
74
  static snapshotPath(example = 'truncated-text') {
25
75
  return PageObject.getSnapshotPathBuilder('DSCardNavigation', example, 'ds-card-navigation');
@@ -0,0 +1,127 @@
1
+ /* eslint-disable max-statements */
2
+ /* eslint-disable max-len */
3
+ import CardNavigationCO from './CardNavigationCO';
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-17279: CardNavigation: Slots -Func', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await CardNavigationCO.slotsTest.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+ it('01: should have a custom aria-* for each slot', async () => {
17
+ const cardNavActions = await (
18
+ await CardNavigationCO.getCardNavigationActionsSlotByIndex()
19
+ ).getAttribute('aria-label');
20
+ const cardNavActionButton = await (
21
+ await CardNavigationCO.getCardNavigationActionButtonSlotByIndex()
22
+ ).getAttribute('aria-label');
23
+ const cardNavButtonWrapper = await (
24
+ await CardNavigationCO.getCardNavigationButtonWrapperSlotByIndex()
25
+ ).getAttribute('aria-label');
26
+ const cardNavCentralContent = await (
27
+ await CardNavigationCO.getCardNavigationCentralContentSlotByIndex()
28
+ ).getAttribute('aria-label');
29
+ const cardNavContent = await (
30
+ await CardNavigationCO.getCardNavigationContentSlotByIndex()
31
+ ).getAttribute('aria-label');
32
+ const cardNavDescText = await (
33
+ await CardNavigationCO.getCardNavigationDescriptionTextSlotByIndex()
34
+ ).getAttribute('aria-label');
35
+ const cardNavInteractElemReg = await (
36
+ await CardNavigationCO.getCardNavigationInteractiveElementRegionSlotByIndex()
37
+ ).getAttribute('aria-label');
38
+ const cardNavTitle = await (
39
+ await CardNavigationCO.getCardNavigationTitleSlotByIndex()
40
+ ).getAttribute('aria-label');
41
+ const cardNavRoot = await (await CardNavigationCO.getCardNavigationRootSlotByIndex()).getAttribute('aria-label');
42
+ const cardNavTitleTypography = await (
43
+ await CardNavigationCO.getCardNavigationTitleTypographySlotByIndex()
44
+ ).getAttribute('aria-label');
45
+ const cardNavTitleWrapper = await (
46
+ await CardNavigationCO.getCardNavigationTitleWrapperSlotByIndex()
47
+ ).getAttribute('aria-label');
48
+ const cardNavType = await (await CardNavigationCO.getCardNavigationTypeSlotByIndex()).getAttribute('aria-label');
49
+ await expect(cardNavActions).toEqual('actions aria');
50
+ await expect(cardNavActionButton).toEqual('actionbutton aria');
51
+ await expect(cardNavButtonWrapper).toEqual('buttonwrapper aria');
52
+ await expect(cardNavCentralContent).toEqual('centralcontent aria');
53
+ await expect(cardNavContent).toEqual('content aria');
54
+ await expect(cardNavDescText).toEqual('descriptiontext aria');
55
+ await expect(cardNavInteractElemReg).toEqual('interactiveelemregion aria');
56
+ await expect(cardNavTitle).toEqual('title aria');
57
+ await expect(cardNavRoot).toEqual('root aria');
58
+ await expect(cardNavTitleTypography).toEqual('titletypography aria');
59
+ await expect(cardNavTitleWrapper).toEqual('titlewrapper aria');
60
+ await expect(cardNavType).toEqual('type aria');
61
+ });
62
+ it('02: should have a custom data-testid for each slot', async () => {
63
+ const cardNavActions = await (
64
+ await CardNavigationCO.getCardNavigationActionsSlotByIndex()
65
+ ).getAttribute('data-testid');
66
+ const cardNavActionButton = await (
67
+ await CardNavigationCO.getCardNavigationActionButtonSlotByIndex()
68
+ ).getAttribute('data-testid');
69
+ const cardNavButtonWrapper = await (
70
+ await CardNavigationCO.getCardNavigationButtonWrapperSlotByIndex()
71
+ ).getAttribute('data-testid');
72
+ const cardNavCentralContent = await (
73
+ await CardNavigationCO.getCardNavigationCentralContentSlotByIndex()
74
+ ).getAttribute('data-testid');
75
+ const cardNavContent = await (
76
+ await CardNavigationCO.getCardNavigationContentSlotByIndex()
77
+ ).getAttribute('data-testid');
78
+ const cardNavDescText = await (
79
+ await CardNavigationCO.getCardNavigationDescriptionTextSlotByIndex()
80
+ ).getAttribute('data-testid');
81
+ const cardNavInteractElemReg = await (
82
+ await CardNavigationCO.getCardNavigationInteractiveElementRegionSlotByIndex()
83
+ ).getAttribute('data-testid');
84
+ const cardNavTitle = await (
85
+ await CardNavigationCO.getCardNavigationTitleSlotByIndex()
86
+ ).getAttribute('data-testid');
87
+ const cardNavRoot = await (await CardNavigationCO.getCardNavigationRootSlotByIndex()).getAttribute('data-testid');
88
+ const cardNavTitleTypography = await (
89
+ await CardNavigationCO.getCardNavigationTitleTypographySlotByIndex()
90
+ ).getAttribute('data-testid');
91
+ const cardNavTitleWrapper = await (
92
+ await CardNavigationCO.getCardNavigationTitleWrapperSlotByIndex()
93
+ ).getAttribute('data-testid');
94
+ const cardNavType = await (await CardNavigationCO.getCardNavigationTypeSlotByIndex()).getAttribute('data-testid');
95
+ await expect(cardNavActions).toEqual('actions data');
96
+ await expect(cardNavActionButton).toEqual('actionbutton data');
97
+ await expect(cardNavButtonWrapper).toEqual('buttonwrapper data');
98
+ await expect(cardNavCentralContent).toEqual('centralcontent data');
99
+ await expect(cardNavContent).toEqual('content data');
100
+ await expect(cardNavDescText).toEqual('descriptiontext data');
101
+ await expect(cardNavInteractElemReg).toEqual('interactiveelemregion data');
102
+ await expect(cardNavTitle).toEqual('title data');
103
+ await expect(cardNavRoot).toEqual('root data');
104
+ await expect(cardNavTitleTypography).toEqual('titletypography data');
105
+ await expect(cardNavTitleWrapper).toEqual('titlewrapper data');
106
+ await expect(cardNavType).toEqual('type data');
107
+ });
108
+ it('03: should have a custom lang for each text-containing slot', async () => {
109
+ const cardNavCentralContent = await (
110
+ await CardNavigationCO.getCardNavigationCentralContentSlotByIndex()
111
+ ).getAttribute('lang');
112
+ const cardNavContent = await (await CardNavigationCO.getCardNavigationContentSlotByIndex()).getAttribute('lang');
113
+ const cardNavDescText = await (
114
+ await CardNavigationCO.getCardNavigationDescriptionTextSlotByIndex()
115
+ ).getAttribute('lang');
116
+ const cardNavTitle = await (await CardNavigationCO.getCardNavigationTitleSlotByIndex()).getAttribute('lang');
117
+ const cardNavTitleTypography = await (
118
+ await CardNavigationCO.getCardNavigationTitleTypographySlotByIndex()
119
+ ).getAttribute('lang');
120
+ await expect(cardNavCentralContent).toEqual('es');
121
+ await expect(cardNavContent).toEqual('es');
122
+ await expect(cardNavDescText).toEqual('es');
123
+ await expect(cardNavTitle).toEqual('es');
124
+ await expect(cardNavTitleTypography).toEqual('es');
125
+ });
126
+ });
127
+ }
@@ -0,0 +1,26 @@
1
+ /* eslint-disable max-statements */
2
+ /* eslint-disable prettier/prettier */
3
+ /* eslint-disable max-len */
4
+ // import { Key } from 'webdriverio';
5
+ import CardNavigationCO from './CardNavigationCO';
6
+
7
+ if (
8
+ (!browser.capabilities['ice:options'].isPhone &&
9
+ !browser.capabilities['ice:options'].isTablet &&
10
+ browser.capabilities.browserName === 'chrome') ||
11
+ browser.capabilities.browserName === 'Chrome'
12
+ ) {
13
+ describe('PUI-17283: CardNavigation: Slots -Visual', () => {
14
+ before('loading page', async () => {
15
+ const errorOnGo = await CardNavigationCO.slotsTest.go();
16
+ if (errorOnGo) throw errorOnGo;
17
+ });
18
+ it('01: should have a custom aria-* for each slot', async () => {
19
+ await browser.eyesOpen();
20
+ const cardNavRoot = await CardNavigationCO.getCardNavigationRootSlotByIndex();
21
+ await cardNavRoot.waitForDisplayed();
22
+ const snapshot = await browser.eyesCheckSnapshot(CardNavigationCO.snapshotPath('cardnav-slots-test'));
23
+ await expect(snapshot).toEqual(0);
24
+ });
25
+ });
26
+ }
@@ -14,6 +14,7 @@ import {
14
14
  PATH_E2E_DATATABLE_STATES,
15
15
  PATH_E2E_DATATABLE_CELL,
16
16
  PATH_E2E_DATATABLE_USE_CASES,
17
+ PATH_E2E_DATATABLE_SLOTS,
17
18
  } from '../paths';
18
19
  import { PageObject, Urlbuilder } from '../helpers';
19
20
  import { CellCO } from './components';
@@ -206,6 +207,10 @@ export default class DataTableCO extends PageObject {
206
207
 
207
208
  static integratedExampleWithFilters = new Urlbuilder(PATH_E2E_DATATABLE_USE_CASES, 'integrated-example-with-filters');
208
209
 
210
+ // Slots
211
+
212
+ static slotsFilters = new Urlbuilder(PATH_E2E_DATATABLE_SLOTS, 'slots-filters');
213
+
209
214
  // E2E FOLDER -- TO BE MOVED TO ITS OWN FOLDER
210
215
 
211
216
  static basic = new Urlbuilder(PATH_E2E_DATATABLE, 'basic');
@@ -218,7 +223,7 @@ export default class DataTableCO extends PageObject {
218
223
 
219
224
  static controlledWidthTest = new Urlbuilder(PATH_E2E_DATATABLE, 'controlled-width-test');
220
225
 
221
- static customWithDate = new Urlbuilder(PATH_E2E_DATATABLE, 'custom-render-w-date');
226
+ static customWithDate = new Urlbuilder(PATH_E2E_DATATABLE, 'custom-render-w-date-test');
222
227
 
223
228
  static withCombobox = new Urlbuilder(PATH_E2E_DATATABLE, 'with-combobox');
224
229
 
@@ -13,6 +13,14 @@ export default class FilterBarCO extends PageObject {
13
13
  return $('[data-testid="popper-container"]');
14
14
  }
15
15
 
16
+ static getFilterBarMenuWrapper() {
17
+ return $('[data-testid="ds-flyoutmenu-root"]');
18
+ }
19
+
20
+ static getFilterBarMenuListBox() {
21
+ return $('[data-testid="ds-flyoutmenu-list-wrapper"]');
22
+ }
23
+
16
24
  static getClearFilters() {
17
25
  return $('//li[@role="menuitem"]//span[contains(text(), "Clear Filters")]/ancestor::li');
18
26
  }
@@ -142,4 +142,12 @@ export default class FiltersCO extends PageObject {
142
142
  static getFilterPopoverContent = async () => $('[data-testid="ds-datatable-filter-popover-content"]');
143
143
 
144
144
  static getFreeTextSearchInput = async () => $('[data-testid="data-table-filter-free-text-search"]');
145
+
146
+ static getFilterMenuContentSlot = async () => $('[data-dimsum-slot="dsDatatableFilterPopoverContent"]');
147
+
148
+ static getFilterPopoverSlot = async () => $('[data-dimsum-slot="dsDatatableFilterPopover"]');
149
+
150
+ static getFreeTextSearchWrapperSlot = async () => $('[data-dimsum-slot="dsDatatableFreeTextSearchWrapper"]');
151
+
152
+ static getFreeTextSearchFilterSlot = async () => $('[data-dimsum-parent-slot="dsDatatableFreeTextSearchFilter"]');
145
153
  }
@@ -67,7 +67,43 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
67
67
  await expect(isFilteredJJ).toEqual(true);
68
68
  await expect(pill1).toBeDisplayed();
69
69
  });
70
- it('06: should close the filter - Escape', async () => {
70
+ it('06: should not clear the filter when the input is empty and press Enter', async () => {
71
+ await browser.keys(Key.Return);
72
+ // await browser.keys([Key.Backspace, Key.Backspace, Key.Backspace, Key.Backspace, Key.Backspace]);
73
+ if (browser.capabilities.browserName === 'Safari') {
74
+ await browser.keys([Key.Command, 'A']);
75
+ } else {
76
+ await browser.keys([Key.Control, 'A']);
77
+ }
78
+ await browser.keys(Key.Delete);
79
+ await browser.keys(Key.Return);
80
+ const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
81
+ const results = await RowCO.getRows();
82
+ const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
83
+ const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
84
+ const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
85
+ const pill1 = await FilterBarCO.getPillByText('j');
86
+ await expect(freeTextSearchInput).toBeFocused();
87
+ await expect(isFilteredJWick).toEqual(true);
88
+ await expect(isFilteredJJ).toEqual(true);
89
+ await expect(pill1).toBeDisplayed();
90
+ });
91
+ it('07: should not clear the filter when the input has whitespace and press Enter', async () => {
92
+ await browser.keys(Key.Return);
93
+ await type(' ');
94
+ await browser.keys(Key.Return);
95
+ const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
96
+ const results = await RowCO.getRows();
97
+ const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
98
+ const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
99
+ const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
100
+ const pill1 = await FilterBarCO.getPillByText('j');
101
+ await expect(freeTextSearchInput).toBeFocused();
102
+ await expect(isFilteredJWick).toEqual(true);
103
+ await expect(isFilteredJJ).toEqual(true);
104
+ await expect(pill1).toBeDisplayed();
105
+ });
106
+ it('08: should close the filter - Escape', async () => {
71
107
  await browser.keys(Key.Return);
72
108
  const freeTextPopover = await FiltersCO.getFilterPopoverContent();
73
109
  await freeTextPopover.waitForDisplayed();
@@ -77,14 +113,14 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
77
113
  await expect(freeTextPopover).not.toBeDisplayed();
78
114
  await expect(buttonFirstNameColumn).toBeFocused();
79
115
  });
80
- it('07: should display "no results found" when no matching rows are found', async () => {
116
+ it('09: should display "no results found" when no matching rows are found', async () => {
81
117
  await browser.keys(Key.Return);
82
118
  await type('this is a test');
83
119
  await browser.keys(Key.Return);
84
120
  const noResults = await DSDataTableCO.getDataTableEmptyStateWrapper();
85
121
  const FirstNameColumnHeader = await HeaderCO.getHeaderCellByIndex(1);
86
122
  const buttonFirstNameColumn = await FiltersCO.getHeaderCellFilterButtonByHeaderCell(FirstNameColumnHeader, 0);
87
- const pill1 = await FilterBarCO.getPillByText('john this is a test');
123
+ const pill1 = await FilterBarCO.getPillByText('this is a test');
88
124
  await expect(noResults).toBeDisplayedInViewport();
89
125
  await expect(buttonFirstNameColumn).toBeFocused();
90
126
  await expect(pill1).toBeDisplayed();
@@ -151,7 +187,36 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
151
187
  await expect(isFilteredJJ).toEqual(true);
152
188
  await expect(pill1).toBeDisplayed();
153
189
  });
154
- it('06: should close the filter - Escape', async () => {
190
+ it('06: should not clear the filter when the input is empty and press Enter', async () => {
191
+ await browser.keys(Key.Return);
192
+ await browser.keys(Key.Return);
193
+ const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
194
+ const results = await RowCO.getRows();
195
+ const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
196
+ const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
197
+ const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
198
+ const pill1 = await FilterBarCO.getPillByText('j');
199
+ await expect(freeTextSearchInput).toBeFocused();
200
+ await expect(isFilteredJWick).toEqual(true);
201
+ await expect(isFilteredJJ).toEqual(true);
202
+ await expect(pill1).toBeDisplayed();
203
+ });
204
+ it('07: should not clear the filter when the input has whitespace and press Enter', async () => {
205
+ await browser.keys(Key.Return);
206
+ await type(' ');
207
+ await browser.keys(Key.Return);
208
+ const freeTextSearchInput = await FiltersCO.getFreeTextSearchInput();
209
+ const results = await RowCO.getRows();
210
+ const filteredLastNames = await DSDataTableCO.getAllColumnResults(results, 2);
211
+ const isFilteredJWick = filteredLastNames.some((name) => name.toLowerCase() === 'jane johnson');
212
+ const isFilteredJJ = filteredLastNames.some((name) => name.toLowerCase() === 'jane wick');
213
+ const pill1 = await FilterBarCO.getPillByText('j');
214
+ await expect(freeTextSearchInput).toBeFocused();
215
+ await expect(isFilteredJWick).toEqual(true);
216
+ await expect(isFilteredJJ).toEqual(true);
217
+ await expect(pill1).toBeDisplayed();
218
+ });
219
+ it('08: should close the filter - Escape', async () => {
155
220
  await browser.keys(Key.Return);
156
221
  const freeTextPopover = await FiltersCO.getFilterPopoverContent();
157
222
  await freeTextPopover.waitForDisplayed();
@@ -161,7 +226,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
161
226
  await expect(freeTextPopover).not.toBeDisplayed();
162
227
  await expect(buttonLastNameColumn).toBeFocused();
163
228
  });
164
- it('07: should display "no results found" when no matching rows are found', async () => {
229
+ it('09: should display "no results found" when no matching rows are found', async () => {
165
230
  await browser.keys(Key.Return);
166
231
  await type('this is a test');
167
232
  await browser.keys(Key.Return);
@@ -248,9 +248,9 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
248
248
  await pill2.waitForDisplayed();
249
249
  const filterBarMenuBtn = await FilterBarCO.getFilterBarDropdownMenuButton();
250
250
  await filterBarMenuBtn.click();
251
- const filterBarMenu = await FilterBarCO.getFilterBarDropdownMenu();
251
+ const filterBarMenu = await FilterBarCO.getFilterBarMenuListBox();
252
252
  await filterBarMenu.waitForDisplayed();
253
- const clearFilters = await FilterBarCO.getFilterBarDropDownOption('Clear Filters');
253
+ const clearFilters = await FilterBarCO.getFilterBarDropDownMenuItemByIndex(0);
254
254
  await clearFilters.click();
255
255
  await expect(pill1).not.toBeDisplayed();
256
256
  await expect(pill2).not.toBeDisplayed();
@@ -272,7 +272,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
272
272
  await browser.keys([Key.Shift, Key.Tab]);
273
273
  await browser.keys([Key.Shift, Key.Tab]);
274
274
  await browser.keys(Key.Enter);
275
- const filterBarMenu = await FilterBarCO.getFilterBarDropdownMenu();
275
+ const filterBarMenu = await FilterBarCO.getFilterBarMenuListBox();
276
276
  await filterBarMenu.waitForDisplayed();
277
277
  await browser.keys(Key.Return);
278
278
  await expect(pill1).not.toBeDisplayed();
@@ -5,7 +5,7 @@ import DSDataTableCO from '../DSDataTableCO';
5
5
  import { HeaderCO, RowCO, FiltersCO } from '../components';
6
6
  import { getRadioValue } from '../helpers';
7
7
  import { tabStops, isChecked, type } from '../../helpers';
8
- import DSToggleCO from '../../ds-toggle/DSToggleCO';
8
+ import DSToggleCO from '../../ds-form-toggle/DSToggleCO';
9
9
 
10
10
  if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
11
11
  describe('PUI-7043 - DataTable, Single select disabled selection', () => {
@@ -0,0 +1,40 @@
1
+ /* eslint-disable max-lines */
2
+ import DSDataTableCO from '../DSDataTableCO';
3
+ import DSFiltersCO from '../components/FiltersCO';
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-17326 - DataTable:: FreeTextSearch Slots - Func', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await DSDataTableCO.slotsFilters.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+ it('01: should have custom aria-* for each slot', async () => {
17
+ await DSFiltersCO.openFilterPopperByColumnName('name');
18
+ const dataTableFilterPopoverSlot = await DSFiltersCO.getFilterPopoverSlot();
19
+ const dataTableFilterPopoverContent = await DSFiltersCO.getFilterMenuContentSlot();
20
+ const dataTableFreeTextSearchWrapperSlot = await DSFiltersCO.getFreeTextSearchWrapperSlot();
21
+ const dataTableFreeTextSearchFilterSlot = await DSFiltersCO.getFreeTextSearchFilterSlot();
22
+
23
+ await expect(dataTableFilterPopoverSlot).toHaveAttribute('aria-label', 'Filter popover aria');
24
+ await expect(dataTableFilterPopoverContent).toHaveAttribute('aria-label', 'Filter popover content aria');
25
+ await expect(dataTableFreeTextSearchWrapperSlot).toHaveAttribute('aria-label', 'Free text search wrapper aria');
26
+ await expect(dataTableFreeTextSearchFilterSlot).toHaveAttribute('aria-label', 'Free text search input aria');
27
+ });
28
+ it('02: should have custom data-* for each slot', async () => {
29
+ const dataTableFilterPopoverSlot = await DSFiltersCO.getFilterPopoverSlot();
30
+ const dataTableFilterPopoverContent = await DSFiltersCO.getFilterMenuContentSlot();
31
+ const dataTableFreeTextSearchWrapperSlot = await DSFiltersCO.getFreeTextSearchWrapperSlot();
32
+ const dataTableFreeTextSearchFilterSlot = await DSFiltersCO.getFreeTextSearchFilterSlot();
33
+
34
+ await expect(dataTableFilterPopoverSlot).toHaveAttribute('data-testid', 'Filter popover data');
35
+ await expect(dataTableFilterPopoverContent).toHaveAttribute('data-testid', 'Filter popover content data');
36
+ await expect(dataTableFreeTextSearchWrapperSlot).toHaveAttribute('data-testid', 'Free text search wrapper data');
37
+ await expect(dataTableFreeTextSearchFilterSlot).toHaveAttribute('data-testid', 'Free text search input data');
38
+ });
39
+ });
40
+ }
@@ -0,0 +1,19 @@
1
+ /* eslint-disable max-lines */
2
+ import DSDataTableCO from '../DSDataTableCO';
3
+ import FiltersCO from '../components/FiltersCO';
4
+
5
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
6
+ describe('PUI-17327 - DataTable:: FreeTextSearch Slots -Visual', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSDataTableCO.slotsFilters.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+ it('01: should display FreeTextSearch with customized slots', async () => {
12
+ await browser.eyesOpen();
13
+ await FiltersCO.openFilterPopperByColumnName('name');
14
+
15
+ const snapshot = await browser.eyesCheckSnapshot(DSDataTableCO.snapshotPath('free-text-search-slots'));
16
+ await expect(snapshot).toEqual(0);
17
+ });
18
+ });
19
+ }