dimsum-e2e-tests 3.70.0-next.7 → 3.70.0-next.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1079 -721
- package/ds-accordion/DSAccordion.visual.spec.js +6 -0
- package/ds-accordion/DSAccordionCO.js +15 -3
- package/ds-accordion/QA_NOTES.md +105 -0
- package/ds-accordion/controlled/DSAccordion.controlled.func.spec.js +23 -0
- package/ds-accordion/header-structure/DSAccordion.header-structure.func.spec.js +65 -0
- package/ds-accordion/input-inside/DSAccordion.input-inside.func.spec.js +19 -0
- package/ds-apppicker/DSAppPickerCO.js +101 -3
- package/ds-apppicker/aria-pattern/DSAppPicker.aria-pattern.func.spec.js +100 -0
- package/ds-apppicker/basic/DSAppPicker.basic.keyboard-nav.func.spec.js +18 -7
- package/ds-apppicker/closeAfterSelection/DSAppPicker.closeAfterSelection.func.spec.js +1 -1
- package/ds-apppicker/custom-trigger-focus/DSAppPicker.custom-trigger-focus.func.spec.js +82 -0
- package/ds-apppicker/label-expansion-dismissal/DSAppPicker.label-expansion-dismissal.visual.spec.js +108 -0
- package/ds-apppicker/reflow/DSAppPicker.reflow.func.spec.js +32 -0
- package/ds-apppicker/reflow/DSAppPicker.reflow.visual.spec.js +5 -6
- package/ds-apppicker/truncation/DSAppPicker.truncation.visual.spec.js +5 -9
- package/ds-autocomplete/DSAutocomplete.visual.spec.js +34 -0
- package/ds-autocomplete/DSAutocompleteCO.js +36 -1
- package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.axe-core.func.spec.js +50 -0
- package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.func.spec.js +122 -0
- package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.visual.spec.js +48 -0
- package/ds-autocomplete/slots/DSAutocomplete.slots.func.spec.js +6 -1
- package/ds-banner/DSBanner.text-resize.visual.spec.js +5 -2
- package/ds-banner/DSBannerCO.js +4 -0
- package/ds-button-v3/DSButtonV3.aria-disabled-attribute.func.spec.js +33 -0
- package/ds-button-v3/DSButtonV3CO.js +10 -0
- package/ds-button-v3/theme-font/DSButtonV3.theme-font.func.spec.js +30 -0
- package/ds-card/DSCard.cardv2_v1.func.spec.js +54 -0
- package/ds-card/DSCard.cardv2_v1.visual.spec.js +29 -0
- package/ds-card/DSCardCO.js +50 -0
- package/ds-card/detail-slots/DSCard.detail-slots.axe-core.func.spec.js +29 -0
- package/ds-card/detail-slots/DSCard.detail-slots.func.spec.js +72 -0
- package/ds-card/detail-slots/DSCard.detail-slots.visual.spec.js +19 -0
- package/ds-card-v3/DSCardV3CO.js +93 -1
- package/ds-card-v3/accordion/DSCardV3.accordion-aria-structure.func.spec.js +41 -0
- package/ds-card-v3/accordion/DSCardV3.accordion-aria.keyboard.func.spec.js +49 -0
- package/ds-card-v3/accordion/DSCardV3.accordion.axe-core.func.spec.js +28 -0
- package/ds-card-v3/accordion/DSCardV3.accordion.visual.spec.js +4 -6
- package/ds-card-v3/action/DSCardV3.action.axe-core.func.spec.js +24 -0
- package/ds-card-v3/action/DSCardV3.action.func.spec.js +53 -0
- package/ds-card-v3/action/DSCardV3.action.visual.spec.js +28 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.axe-core.func.spec.js +42 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.func.spec.js +129 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.reorder.func.spec.js +73 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.visual.spec.js +5 -12
- package/ds-card-v3/global-attributes/DSCardV3.global-attributes.axe-core.func.spec.js +33 -0
- package/ds-card-v3/global-attributes/DSCardV3.global-attributes.visual.spec.js +20 -0
- package/ds-card-v3/multi-select/DSCardV3.multi-select.aria-grouping.func.spec.js +24 -0
- package/ds-card-v3/multi-select/DSCardV3.multiselect.axe-core.func.spec.js +47 -0
- package/ds-card-v3/multi-select/DSCardV3.multiselect.keyboard.func.spec.js +65 -0
- package/ds-card-v3/multi-select/DSCardV3.multiselect.visual.spec.js +17 -0
- package/ds-card-v3/multiple-action/DSCardV3.multiple-action.axe-core.func.spec.js +35 -0
- package/ds-card-v3/multiple-action/DSCardV3.multiple-action.func.spec.js +53 -0
- package/ds-card-v3/multiple-action/DSCardV3.multiple-action.visual.spec.js +18 -0
- package/ds-card-v3/multiple-control/DSCardV3.multi-control.axe-core.func.spec.js +34 -0
- package/ds-card-v3/multiple-control/DSCardV3.multi-control.func.spec.js +26 -0
- package/ds-card-v3/multiple-control/DSCardV3.multi-control.visual.spec.js +29 -0
- package/ds-card-v3/no-action/DSCardV3.no-action.axe-core.func.spec.js +22 -0
- package/ds-card-v3/no-action/DSCardV3.no-action.func.spec.js +23 -0
- package/ds-card-v3/no-action/DSCardV3.no-action.visual.spec.js +15 -0
- package/ds-card-v3/notification-badges/DSCardV3.notification-badges.axe-core.func.spec.js +33 -0
- package/ds-card-v3/notification-badges/DSCardV3.notification-badges.func.spec.js +19 -0
- package/ds-card-v3/notification-badges/DSCardV3.notification-badges.visual.spec.js +28 -0
- package/ds-card-v3/reflow/DSCardV3.reflow.axe-core.func.spec.js +28 -0
- package/ds-card-v3/reflow/DSCardV3.reflow.func.spec.js +36 -0
- package/ds-card-v3/reflow/DSCardV3.reflow.visual.spec.js +3 -2
- package/ds-card-v3/single-select/DSCardV3.single-select.aria-grouping.func.spec.js +24 -0
- package/ds-card-v3/single-select/DSCardV3.single-select.axe-core.func.spec.js +37 -0
- package/ds-card-v3/single-select/DSCardV3.single-select.visual.spec.js +1 -2
- package/ds-card-v3/slots/DSCardV3.slots.visual.spec.js +1 -2
- package/ds-card-v3/variant-accented/DSCardV3.variant-accented.axe-core.func.spec.js +45 -0
- package/ds-card-v3/variant-accented/DSCardV3.variant-accented.func.spec.js +28 -0
- package/ds-card-v3/variant-accented/DSCardV3.variant-accented.visual.spec.js +35 -0
- package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.axe-core.func.spec.js +35 -0
- package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.func.spec.js +53 -0
- package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.visual.spec.js +28 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.axe-core.func.spec.js +22 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.func.spec.js +61 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.visual.spec.js +20 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variantDisabled-non-interactive.func.spec.js +25 -0
- package/ds-chat/DSChat.axe-core.func.spec.js +2 -2
- package/ds-chat/DSChat.visual.spec.js +4 -4
- package/ds-chat/DSChatCO.js +18 -24
- package/ds-chat/bubbles/slots/DSChatBubble.slots.axe-core.func.spec.js +24 -0
- package/ds-chat/bubbles/slots/DSChatBubble.slots.func.spec.js +49 -0
- package/ds-chat/bubbles/slots/DSChatBubble.slots.visual.spec.js +25 -0
- package/ds-chat/card/slots/DSChatCard.slots.axe-core.func.spec.js +24 -0
- package/ds-chat/card/slots/DSChatCard.slots.func.spec.js +47 -0
- package/ds-chat/card/slots/DSChatCard.slots.visual.spec.js +18 -0
- package/ds-chat/card/truncated-text/DSChatCard.truncated-text.func.spec.js +32 -0
- package/ds-chat/card/truncated-text/DSChatCard.truncated-text.visual.spec.js +26 -0
- package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.axe-core.func.spec.js +23 -0
- package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.visual.spec.js +17 -0
- package/ds-chat/components/BubbleCO.js +46 -3
- package/ds-chat/components/CardCO.js +75 -0
- package/ds-chat/components/ComposerCO.js +6 -6
- package/ds-chat/components/FloatingButtonCO.js +5 -3
- package/ds-chat/components/HeaderCO.js +2 -2
- package/ds-chat/components/TileCO.js +82 -0
- package/ds-chat/components/index.js +3 -2
- package/ds-chat/floatingbutton/DSChat-floating-button.visual.spec.js +1 -1
- package/ds-chat/loadmore/DSChat-loadmore.func.spec.js +1 -1
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.axe-core.func.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.func.spec.js +1 -1
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.visual.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.axe-core.func.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.visual.spec.js +1 -1
- package/ds-chat/tile/slots/DSChatTile.slots.func.spec.js +53 -0
- package/ds-chat/tile/slots/DSChatTile.slots.visual.spec.js +18 -0
- package/ds-chip/label-expansion-dismissal/DSChip.label-expansion-dismissal.visual.spec.js +84 -0
- package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable-tooltip.func.spec.js +47 -0
- package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable.visual.spec.js +12 -21
- package/ds-controlled-form/ds-combobox/disabled/DSCombobox.disabled.visual.spec.js +6 -1
- package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.axe-core.basic.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.basic.visual.spec.js +56 -0
- package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +54 -1
- package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.axe-core.disabled.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.disabled.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.axe-core.hasError.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.has-error.visual.spec.js +71 -1
- package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.axe-core.mixed.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.axe-core.read-only.func.spec.js +3 -3
- package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.read-only.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.axe-core.with-tooltip.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.with-tooltip.visual.spec.js +1 -3
- package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.axe-core.wrap-label.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.wrap-label.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.aria-disabled.visual.spec.js +2 -6
- package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.axe-core.aria-disabled.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/slots/DSControlledCheckbox.slots.func.spec.js +78 -0
- package/ds-controlled-form/ds-controlled-checkbox/theme-font/DSControlledCheckbox.theme-font.func.spec.js +30 -0
- package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.axe-core.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-radio/DSControlledRadioCO.js +50 -1
- package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.axe-core.func.spec.js +16 -2
- package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.func.spec.js +37 -0
- package/ds-controlled-form/ds-controlled-radio/slots/DSControlledRadio.slots.func.spec.js +78 -0
- package/ds-controlled-form/ds-controlled-radio/theme-font/DSControlledRadio.theme-font.func.spec.js +30 -0
- package/ds-controlled-form/react-hook-form/ReactHook.func.spec.js +1 -3
- package/ds-data-table-async/DSDataTableCO.js +187 -10
- package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -1
- package/ds-data-table-async/components/FilterBarCO.js +7 -0
- package/ds-data-table-async/components/FiltersCO.js +1 -1
- package/ds-data-table-async/components/HeaderCO.js +37 -1
- package/ds-data-table-async/dnd/DSDataTable.dnd-keyboard-scroll.func.spec.js +51 -0
- package/ds-data-table-async/filter-menu-close/DSDataTable.filter-menu-close.func.spec.js +77 -0
- package/ds-data-table-async/filter-popover-boundary/DSDataTable.filter-popover-boundary.func.spec.js +98 -0
- package/ds-data-table-async/filters/DSDataTable.filters-creatable-active-descendant.func.spec.js +51 -0
- package/ds-data-table-async/filters/DSDataTable.filters-creatable.func.spec.js +55 -0
- package/ds-data-table-async/filters/DSDataTable.filters.axe-core.func.spec.js +11 -9
- package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatablemultiselect.keyboard.func.spec.js +2 -2
- package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatableselect.keyboard.func.spec.js +2 -2
- package/ds-data-table-async/filtersV2/DSDataTable.filtersV2.axe-core.func.spec.js +45 -29
- package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.axe-core.func.spec.js +23 -0
- package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.func.spec.js +50 -0
- package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.visual.spec.js +21 -0
- package/ds-data-table-async/header-affordances/DSDataTable.header-affordances.func.spec.js +92 -0
- package/ds-data-table-async/helpers/getInputSelection.js +6 -0
- package/ds-data-table-async/helpers/index.js +1 -0
- package/ds-data-table-async/keyboard-scroll/DSDataTable.keyboard-scroll.func.spec.js +39 -0
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.keyboard.func.spec.js +8 -7
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.mouse.func.spec.js +6 -7
- package/ds-data-table-async/pagination/DSDataTable.pagination.func.spec.js +3 -2
- package/ds-data-table-async/resizable/DSDataTable.resize-min-clamp.func.spec.js +72 -0
- package/ds-data-table-async/resizable/DSDataTable.resizerA11y.axe-core.func.spec.js +42 -0
- package/ds-data-table-async/resizable/DSDataTable.resizerA11y.func.spec.js +98 -0
- package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.axe-core.func.spec.js +23 -0
- package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.visual.spec.js +106 -0
- package/ds-data-table-async/textwrapping/DSDataTable.text-wrap-toolbar.visual.spec.js +27 -0
- package/ds-data-table-async/toggle-cell-focus/DSDataTable.toggle-cell-enter-focus.func.spec.js +31 -0
- package/ds-data-table-async/vissibility/DSDataTable.vissibility.visual.spec.js +2 -0
- package/ds-dataviz/DSDataViz.axis.visual.spec.js +1 -2
- package/ds-dataviz/DSDataViz.ticks.visual.spec.js +1 -2
- package/ds-dataviz/DSDataVizCO.js +2 -0
- package/ds-dataviz/axecore/DSDataViz.axis.axe-core.func.spec.js +1 -1
- package/ds-floating-context/DSFloatingContextCO.js +10 -0
- package/ds-floating-context/placement/DSFloatingContext.placement.visual.spec.js +48 -0
- package/ds-form-combobox-multi/DSComboboxMultiCO.js +36 -9
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +55 -0
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
- package/ds-form-combobox-multi/aria-disabled/DSComboboxMulti.aria-disabled.visual.spec.js +19 -2
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.mouse.func.spec.js +0 -2
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.visual.spec.js +22 -0
- package/ds-form-combobox-multi/grouped/DSComboboxMulti.grouped.visual.spec.js +42 -0
- package/ds-form-combobox-multi/inline/DSComboboxMulti.inline.visual.spec.js +21 -0
- package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.func.spec.js +59 -0
- package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.visual.spec.js +39 -0
- package/ds-form-combobox-multi/skeleton/DSComboboxMulti.skeleton.visual.spec.js +25 -0
- package/ds-form-combobox-multi/theme-font/DSComboboxMulti.theme-font.func.spec.js +38 -0
- package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.axe-core.func.spec.js +39 -0
- package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.func.spec.js +39 -0
- package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.visual.spec.js +29 -0
- package/ds-form-combobox-single/DSComboboxSingleCO.js +25 -9
- package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.axe-core.func.spec.js +49 -0
- package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js +54 -0
- package/ds-form-combobox-single/aria-disabled/DSComboboxSingle.aria-disabled.visual.spec.js +18 -0
- package/ds-form-combobox-single/creatable/DSComboboxSingle.creatable.visual.spec.js +30 -0
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.mouse.func.spec.js +0 -2
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.visual.spec.js +22 -0
- package/ds-form-combobox-single/grouped/DSComboboxSingle.grouped.visual.spec.js +45 -0
- package/ds-form-combobox-single/inline/DSComboboxSingle.inline.visual.spec.js +23 -0
- package/ds-form-combobox-single/skeleton/DSComboboxSingle.skeleton.visual.spec.js +25 -0
- package/ds-form-combobox-single/theme-font/DSComboboxSingle.theme-font.func.spec.js +34 -0
- package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.axe-core.func.spec.js +39 -0
- package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.func.spec.js +39 -0
- package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.visual.spec.js +29 -0
- package/ds-form-date-range-picker/DateRangePicker.axe-core.spec.js +5 -0
- package/ds-form-date-range-picker/DateRangePicker.functional.spec.js +80 -18
- package/ds-form-date-range-picker/DateRangePickerCO.js +19 -0
- package/ds-form-date-range-picker/date-segment-aria-labels/DateRangePicker.date-segment-aria-labels.func.spec.js +66 -0
- package/ds-form-date-range-picker/grouped-field-error-announcement/DateRangePicker.grouped-field-error-announcement.func.spec.js +59 -0
- package/ds-form-date-range-picker/picker-callbacks/DateRangePicker.picker-callbacks.func.spec.js +36 -0
- package/ds-form-date-time-picker/DSControlledDateTimePickerCO.js +7 -0
- package/ds-form-date-time-picker/date-time-full/DateTimeFull.axe-core.func.spec.js +8 -1
- package/ds-form-date-time-picker/date-time-full/DateTimePicker.DateTimeFull.visual.spec.js +9 -0
- package/ds-form-date-time-picker/partial-date-open-focus/DateTimePicker.partial-date-open-focus.func.spec.js +45 -0
- package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
- package/ds-form-native-select/NativeSelect.visual.spec.js +33 -0
- package/ds-form-native-select/NativeSelectCO.js +6 -0
- package/ds-form-native-select/option-selection/NativeSelect.option-selection.func.spec.js +25 -0
- package/ds-form-toggle/DSToggle.func.spec.js +20 -23
- package/ds-form-toggle/DSToggleCO.js +11 -2
- package/ds-global-header/GlobalHeader.announcements.func.spec.js +27 -0
- package/ds-global-header/GlobalHeader.axe-core.func.spec.js +15 -15
- package/ds-global-header/GlobalHeader.func.spec.js +70 -1
- package/ds-global-header/GlobalHeaderCO.js +120 -2
- package/ds-global-header/app-picker-passthrough/GlobalHeader.app-picker-passthrough.func.spec.js +113 -0
- package/ds-global-header/popup-menu-focus/GlobalHeader.popup-menu-focus.func.spec.js +63 -0
- package/ds-global-header/popup-menu-slots/GlobalHeader.popup-menu-slots.func.spec.js +70 -0
- package/ds-global-header/search-toggle-slots/GlobalHeader.search-toggle-slots.func.spec.js +118 -0
- package/ds-global-header/toolbar-item-attributes/GlobalHeader.toolbar-item-attributes.func.spec.js +53 -0
- package/ds-grid/DSGridCO.js +20 -0
- package/ds-grid/layout-mode/DSGrid.layout-mode.func.spec.js +51 -0
- package/ds-grid/layout-mode/DSGrid.layout-mode.visual.spec.js +22 -0
- package/ds-hooks/DSHook.UseFontSizeMedia.visual.spec.js +5 -2
- package/ds-hooks/DSHook.usetree.func.spec.js +3 -2
- package/ds-hooks/DSHookCO.js +56 -23
- package/ds-hooks/useFocusStack/DSHook.useFocusStack.func.spec.js +83 -0
- package/ds-hooks/useFocusTrap/UseFocusTrapCO.js +2 -0
- package/ds-hooks/useFocusTrap/UseFocusTrapToggle.func.spec.js +48 -0
- package/ds-hooks/useMask/Number/UseNumberMask.axe-core.func.spec.js +48 -0
- package/ds-menu-button/DSMenuButtonCO.js +23 -0
- package/ds-menu-button/slots/DSMenuButton.slots.axe-core.func.spec.js +28 -0
- package/ds-menu-button/slots/DSMenuButton.slots.func.spec.js +59 -0
- package/ds-menu-button/slots/DSMenuButton.slots.visual.spec.js +26 -0
- package/ds-modal-slide/ModalSlideCO.js +7 -0
- package/ds-modal-slide/custom-header/ModalSlide.customHeader.focusRing.visual.spec.js +2 -1
- package/ds-modal-slide/heading-level/ModalSlide.headingLevel.axe-core.func.spec.js +25 -0
- package/ds-modal-slide/heading-level/ModalSlide.headingLevel.func.spec.js +25 -0
- package/ds-modal-slide/slots/ModalSlide.slots.func.spec.js +18 -0
- package/ds-notification-badge/DSNotificationBadge.visual.spec.js +17 -20
- package/ds-page-layout/PageLayoutCO.js +4 -4
- package/ds-pills-v2/DSPillsV2CO.js +12 -0
- package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.func.spec.js +53 -0
- package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.visual.spec.js +26 -0
- package/ds-pills-v2/disabled/DSPills.disabled.func.spec.js +53 -0
- package/ds-pills-v2/disabled/DSPills.disabled.visual.spec.js +33 -0
- package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +2 -0
- package/ds-progress-indicator/DSProgressIndicatorCO.js +1 -1
- package/ds-query-builder/DSQueryBuilder.visual.spec.js +6 -6
- package/ds-shuttle-v2/DSShuttleV2CO.js +15 -1
- package/ds-shuttle-v2/breadcrumb-a11y/DSShuttleV2.breadcrumb-a11y.func.spec.js +43 -0
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.func.spec.js +37 -0
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.visual.spec.js +30 -0
- package/ds-shuttle-v2/extra/DSShuttleV2.extra.visual.spec.js +8 -3
- package/ds-shuttle-v2/items/DSShuttleV2.items.func.spec.js +4 -2
- package/ds-shuttle-v2/skipped/DSShuttleV2.extra.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.filter.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.globalcheckbox.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.items.axe-core.skipped.js +3 -3
- package/ds-shuttle-v2/skipped/DSShuttleV2.skipped.js +5 -5
- package/ds-slider-v2/DSSliderV2.func.spec.js +36 -25
- package/ds-slider-v2/DSSliderV2CO.js +10 -0
- package/ds-slider-v2/min-range/DSSliderV2.min-range.func.spec.js +69 -0
- package/ds-tab-button/DSTabButton.func.spec.js +1 -1
- package/ds-tabs/DSTabsCO.js +4 -0
- package/ds-tabs/notification-badge/DSTabs.notification-badge.axe-core.func.spec.js +28 -0
- package/ds-tabs/notification-badge/DSTabs.notification-badge.func.spec.js +51 -0
- package/ds-tooltip-v3/DSTooltipV3CO.js +21 -0
- package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js +23 -0
- package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.func.spec.js +29 -0
- package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.func.spec.js +45 -0
- package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.visual.spec.js +29 -0
- package/ds-treeview/DSTreeViewCO.js +23 -0
- package/ds-treeview/dragAndDrop/TreeView-dnd_keyboard.func.spec.js +96 -0
- package/ds-typography/DSTypographyCO.js +10 -0
- package/ds-typography/theme-font/DSTypography.theme-font.func.spec.js +30 -0
- package/package.json +150 -153
- package/paths.js +16 -6
- package/ds-card-v3/disabled/DSCardV3.disabled.visual.spec.js +0 -17
- package/ds-chat-tile/TileCO.js +0 -35
- package/ds-hooks/DSHook.func.spec.js +0 -60
- package/ds-hooks/useFocusStack/DSHook.useFocusStack.skipped.js +0 -57
- package/ds-treeview/dragAndDrop/TreeView-dnd_mouse.func.spec.js +0 -61
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { axeCoreCheck } from '../../helpers';
|
|
2
|
+
import DSMenuButtonCO from '../DSMenuButtonCO';
|
|
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-17845 - DSMenuButton:: Slots - AxeCore', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSMenuButtonCO.slotsTest.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should render slots story with custom theme and pass axe-core scan with menu open', async () => {
|
|
17
|
+
const triggerBtn = await DSMenuButtonCO.getSlotsOpinionatedButtonRoot();
|
|
18
|
+
await triggerBtn.waitForDisplayed();
|
|
19
|
+
await triggerBtn.click();
|
|
20
|
+
|
|
21
|
+
const flyoutRoot = await DSMenuButtonCO.getSlotsFlyoutMenuRoot();
|
|
22
|
+
await flyoutRoot.waitForDisplayed();
|
|
23
|
+
|
|
24
|
+
const result = await axeCoreCheck();
|
|
25
|
+
expect(result.length).toBe(0);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import DSMenuButtonCO from '../DSMenuButtonCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
describe('PUI-18356 - DSMenuButton:: Slots - Func', () => {
|
|
5
|
+
before('loading page', async () => {
|
|
6
|
+
const errorOnGo = await DSMenuButtonCO.slotsTest.go();
|
|
7
|
+
if (errorOnGo) throw errorOnGo;
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it('01: should have custom aria-label to each slot', async () => {
|
|
11
|
+
const triggerBtn = await DSMenuButtonCO.getSlotsOpinionatedButtonRoot();
|
|
12
|
+
await expect(triggerBtn).toHaveAttribute('aria-label', 'im dsOpinionatedbuttonRoot aria');
|
|
13
|
+
await triggerBtn.click();
|
|
14
|
+
|
|
15
|
+
const flyoutRoot = await DSMenuButtonCO.getSlotsFlyoutMenuRoot();
|
|
16
|
+
await flyoutRoot.waitForDisplayed();
|
|
17
|
+
const listWrapper = await DSMenuButtonCO.getSlotsListWrapper();
|
|
18
|
+
const floatingWrapper = await DSMenuButtonCO.getSlotsFloatingWrapper();
|
|
19
|
+
const menuItem = await DSMenuButtonCO.getSlotsMenuItemWrappers();
|
|
20
|
+
await expect(listWrapper).toHaveAttribute('aria-label', 'im dsFlyoutmenuListWrapper aria');
|
|
21
|
+
await expect(flyoutRoot).toHaveAttribute('aria-label', 'im dsFlyoutmenuRoot aria');
|
|
22
|
+
await expect(floatingWrapper).toHaveAttribute('aria-label', 'im dsFlyoutmenuFloatingWrapper aria');
|
|
23
|
+
await expect(menuItem).toHaveAttribute('aria-label', 'im dsMenuitemMenuItemWrapper aria');
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('02: should apply custom data-testid to each slot', async () => {
|
|
27
|
+
const triggerBtn = await DSMenuButtonCO.getSlotsOpinionatedButtonRoot();
|
|
28
|
+
const flyoutRoot = await DSMenuButtonCO.getSlotsFlyoutMenuRoot();
|
|
29
|
+
const listWrapper = await DSMenuButtonCO.getSlotsListWrapper();
|
|
30
|
+
const floatingWrapper = await DSMenuButtonCO.getSlotsFloatingWrapper();
|
|
31
|
+
const menuItem = await DSMenuButtonCO.getSlotsMenuItemWrappers();
|
|
32
|
+
|
|
33
|
+
await expect(triggerBtn).toHaveAttribute('data-testid', 'im dsOpinionatedbuttonRoot data');
|
|
34
|
+
await expect(flyoutRoot).toHaveAttribute('data-testid', 'im dsFlyoutmenuRoot data');
|
|
35
|
+
await expect(listWrapper).toHaveAttribute('data-testid', 'im dsFlyoutmenuListWrapper data');
|
|
36
|
+
await expect(floatingWrapper).toHaveAttribute('data-testid', 'im dsFlyoutmenuFloatingWrapper data');
|
|
37
|
+
await expect(menuItem).toHaveAttribute('data-testid', 'im dsMenuitemMenuItemWrapper data');
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('03: should apply per-item attributes from the item-slot function to each menu item', async () => {
|
|
41
|
+
const firstItem = await DSMenuButtonCO.getSlotsMenuItemWrappers(0);
|
|
42
|
+
const secondItem = await DSMenuButtonCO.getSlotsMenuItemWrappers(1);
|
|
43
|
+
const thirdItem = await DSMenuButtonCO.getSlotsMenuItemWrappers(2);
|
|
44
|
+
|
|
45
|
+
await expect(firstItem).toHaveAttribute(
|
|
46
|
+
'data-menu-item-wrapper',
|
|
47
|
+
'menu item wrapper for item with label Action 1',
|
|
48
|
+
);
|
|
49
|
+
await expect(secondItem).toHaveAttribute(
|
|
50
|
+
'data-menu-item-wrapper',
|
|
51
|
+
'menu item wrapper for item with label Action 2',
|
|
52
|
+
);
|
|
53
|
+
await expect(thirdItem).toHaveAttribute(
|
|
54
|
+
'data-menu-item-wrapper',
|
|
55
|
+
'menu item wrapper for item with label Action 3',
|
|
56
|
+
);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import DSMenuButtonCO from '../DSMenuButtonCO';
|
|
2
|
+
|
|
3
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
4
|
+
describe('PUI-18357 - DSMenuButton:: Slots - Visual', () => {
|
|
5
|
+
before('loading page', async () => {
|
|
6
|
+
const errorOnGo = await DSMenuButtonCO.slotsTest.go();
|
|
7
|
+
if (errorOnGo) throw errorOnGo;
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it('01: should display slots story in dark theme default state correctly', async () => {
|
|
11
|
+
const triggerBtn = await DSMenuButtonCO.getSlotsOpinionatedButtonRoot();
|
|
12
|
+
await triggerBtn.waitForDisplayed();
|
|
13
|
+
const snapshot = await browser.percyCheckScreenshot(DSMenuButtonCO.snapshotPath('slots-default'));
|
|
14
|
+
await expect(snapshot).toEqual(0);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('02: should display slots story with menu open in dark theme correctly', async () => {
|
|
18
|
+
const triggerBtn = await DSMenuButtonCO.getSlotsOpinionatedButtonRoot();
|
|
19
|
+
await triggerBtn.click();
|
|
20
|
+
const flyoutRoot = await DSMenuButtonCO.getSlotsFlyoutMenuRoot();
|
|
21
|
+
await flyoutRoot.waitForDisplayed();
|
|
22
|
+
const snapshot = await browser.percyCheckScreenshot(DSMenuButtonCO.snapshotPath('slots-open'));
|
|
23
|
+
await expect(snapshot).toEqual(0);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
}
|
|
@@ -33,6 +33,8 @@ export default class ModalSlideCO extends PageObject {
|
|
|
33
33
|
|
|
34
34
|
static slotsTest = new Urlbuilder(PATH_E2E_MODALSLIDE, 'slots-test');
|
|
35
35
|
|
|
36
|
+
static headingLevelURL = new Urlbuilder(PATH_E2E_MODALSLIDE, 'heading-level-test');
|
|
37
|
+
|
|
36
38
|
static async getModalSlide() {
|
|
37
39
|
return $('[data-testid="ds-modal-slide"]');
|
|
38
40
|
}
|
|
@@ -134,6 +136,11 @@ export default class ModalSlideCO extends PageObject {
|
|
|
134
136
|
return $('[data-dimsum-parent-slot="dsModalslideTitle"]');
|
|
135
137
|
}
|
|
136
138
|
|
|
139
|
+
// Title element — the heading whose tag is driven by the `headingLevel` prop
|
|
140
|
+
static async getModalTitle() {
|
|
141
|
+
return $('[data-dimsum-parent-slot="dsModalslideTitle"]');
|
|
142
|
+
}
|
|
143
|
+
|
|
137
144
|
// Snapshots
|
|
138
145
|
static snapshotPath(example = 'basic') {
|
|
139
146
|
return PageObject.getSnapshotPathBuilder('ModalSlide', example, 'ds-modal-slide');
|
|
@@ -10,7 +10,8 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
10
10
|
});
|
|
11
11
|
|
|
12
12
|
it('01: should show consistent focus ring on modal body (5th tab stop)', async () => {
|
|
13
|
-
await ModalSlideCO.
|
|
13
|
+
const trigger = await ModalSlideCO.getOpenModalSlideBtn();
|
|
14
|
+
await trigger.click();
|
|
14
15
|
// Tab through CustomHeader: backarrow(1) -> breadcrumb items(2,3,4) -> body(5)
|
|
15
16
|
await browser.keys(Key.Tab);
|
|
16
17
|
await browser.keys(Key.Tab);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Tests for the feature introduced in PUI-15612 (ModalSlide flexible title heading level).
|
|
2
|
+
// The story models correct usage: an h2 title above h3/h4 content, producing a valid outline.
|
|
3
|
+
import ModalSlideCO from '../ModalSlideCO';
|
|
4
|
+
import { axeCoreCheck } from '../../helpers';
|
|
5
|
+
|
|
6
|
+
if (
|
|
7
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
8
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
9
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
10
|
+
browser.capabilities.browserName === 'Chrome'
|
|
11
|
+
) {
|
|
12
|
+
describe('PUI-18688 - ModalSlide:: title headingLevel prop - Axe-Core', () => {
|
|
13
|
+
before(async () => {
|
|
14
|
+
const errorOnGo = await ModalSlideCO.headingLevelURL.go();
|
|
15
|
+
if (errorOnGo) throw errorOnGo;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('01: should have no accessibility violations with a nested heading hierarchy', async () => {
|
|
19
|
+
await ModalSlideCO.openModalSlide();
|
|
20
|
+
await (await ModalSlideCO.getModalTitle()).waitForDisplayed();
|
|
21
|
+
const result = await axeCoreCheck();
|
|
22
|
+
expect(result.length).toBe(0);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Tests for the feature introduced in PUI-15612 (ModalSlide flexible title heading level).
|
|
2
|
+
// The `headingLevel` prop drives the semantic tag of the title element; the default is `h3`.
|
|
3
|
+
import ModalSlideCO from '../ModalSlideCO';
|
|
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-18687 - ModalSlide:: title headingLevel prop - Func', () => {
|
|
12
|
+
before(async () => {
|
|
13
|
+
const errorOnGo = await ModalSlideCO.headingLevelURL.go();
|
|
14
|
+
if (errorOnGo) throw errorOnGo;
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('01: should render the title with the tag from headingLevel (h2)', async () => {
|
|
18
|
+
await ModalSlideCO.openModalSlide();
|
|
19
|
+
const title = await ModalSlideCO.getModalTitle();
|
|
20
|
+
await title.waitForDisplayed();
|
|
21
|
+
await expect(await title.getTagName()).toBe('h2');
|
|
22
|
+
await expect(title).toHaveText('Loan Summary');
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -52,5 +52,23 @@ if (
|
|
|
52
52
|
await expect(overlay).toHaveAttribute('data-testid', 'overlay data');
|
|
53
53
|
await expect(root).toHaveAttribute('data-testid', 'root data');
|
|
54
54
|
});
|
|
55
|
+
it('03: each ModalSlide slot to have custom lang attribute', async () => {
|
|
56
|
+
const actualContent = await ModalSlideCO.getSlotActualContent();
|
|
57
|
+
const content = await ModalSlideCO.getSlotContent();
|
|
58
|
+
const contentWrapper = await ModalSlideCO.getSlotContentWrapper();
|
|
59
|
+
const footerSeparator = await ModalSlideCO.getSlotFooterSeparator();
|
|
60
|
+
const gridContent = await ModalSlideCO.getSlotGridContent();
|
|
61
|
+
const headerSeparator = await ModalSlideCO.getSlotHeaderSeparator();
|
|
62
|
+
const overlay = await ModalSlideCO.getSlotOverlay();
|
|
63
|
+
const root = await ModalSlideCO.getSlotRoot();
|
|
64
|
+
await expect(actualContent).toHaveAttribute('lang', 'en');
|
|
65
|
+
await expect(content).toHaveAttribute('lang', 'es');
|
|
66
|
+
await expect(contentWrapper).toHaveAttribute('lang', 'fr');
|
|
67
|
+
await expect(footerSeparator).toHaveAttribute('lang', 'de');
|
|
68
|
+
await expect(gridContent).toHaveAttribute('lang', 'it');
|
|
69
|
+
await expect(headerSeparator).toHaveAttribute('lang', 'pt');
|
|
70
|
+
await expect(overlay).toHaveAttribute('lang', 'ja');
|
|
71
|
+
await expect(root).toHaveAttribute('lang', 'zh');
|
|
72
|
+
});
|
|
55
73
|
});
|
|
56
74
|
}
|
|
@@ -7,8 +7,8 @@ describe('PUI-9354:: Notification Badge: Relate to component', () => {
|
|
|
7
7
|
if (errorOnGo) throw errorOnGo;
|
|
8
8
|
});
|
|
9
9
|
it('01: Should display relate to component', async () => {
|
|
10
|
-
await
|
|
11
|
-
const snapshot = await browser.
|
|
10
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
11
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
12
12
|
await expect(snapshot).toEqual(0);
|
|
13
13
|
});
|
|
14
14
|
});
|
|
@@ -19,8 +19,8 @@ describe('PUI-9353:: Notification Badge: Disabled', () => {
|
|
|
19
19
|
if (errorOnGo) throw errorOnGo;
|
|
20
20
|
});
|
|
21
21
|
it('01: Should display disabled badge', async () => {
|
|
22
|
-
await
|
|
23
|
-
const snapshot = await browser.
|
|
22
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
23
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
24
24
|
await expect(snapshot).toEqual(0);
|
|
25
25
|
});
|
|
26
26
|
});
|
|
@@ -31,8 +31,8 @@ describe('PUI-9352:: Notification Badge: Background color', () => {
|
|
|
31
31
|
if (errorOnGo) throw errorOnGo;
|
|
32
32
|
});
|
|
33
33
|
it('01: Should display custom background color badges', async () => {
|
|
34
|
-
await
|
|
35
|
-
const snapshot = await browser.
|
|
34
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
35
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
36
36
|
await expect(snapshot).toEqual(0);
|
|
37
37
|
});
|
|
38
38
|
});
|
|
@@ -43,8 +43,8 @@ describe('PUI-9355:: Notification Badge: Alphanumerical', () => {
|
|
|
43
43
|
if (errorOnGo) throw errorOnGo;
|
|
44
44
|
});
|
|
45
45
|
it('01: Should display custom background color badges', async () => {
|
|
46
|
-
await
|
|
47
|
-
const snapshot = await browser.
|
|
46
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
47
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
48
48
|
await expect(snapshot).toEqual(0);
|
|
49
49
|
});
|
|
50
50
|
});
|
|
@@ -55,8 +55,8 @@ describe('PUI-11412:: Notification Badge: Chip, Icon and Button integration -Vis
|
|
|
55
55
|
if (errorOnGo) throw errorOnGo;
|
|
56
56
|
});
|
|
57
57
|
it('01: Should display integration with Chips and Button components correctly', async () => {
|
|
58
|
-
await
|
|
59
|
-
const snapshot = await browser.
|
|
58
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
59
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
60
60
|
await expect(snapshot).toEqual(0);
|
|
61
61
|
});
|
|
62
62
|
});
|
|
@@ -66,8 +66,8 @@ describe('PUI-11413:: Notification Badge: Custom Component Integration -Visual T
|
|
|
66
66
|
if (errorOnGo) throw errorOnGo;
|
|
67
67
|
});
|
|
68
68
|
it('01: Should display integration with custom components correctly', async () => {
|
|
69
|
-
await
|
|
70
|
-
const snapshot = await browser.
|
|
69
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(0).waitForDisplayed();
|
|
70
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
71
71
|
await expect(snapshot).toEqual(0);
|
|
72
72
|
});
|
|
73
73
|
});
|
|
@@ -81,7 +81,7 @@ describe('PUI-11817:: NotificationBadge: with LeftNavigation example -Visual', (
|
|
|
81
81
|
await browser.eyesOpen();
|
|
82
82
|
const notification = await DSNotificationBadgeCO.getNotificationBadgeByIndex(1);
|
|
83
83
|
await notification.waitForDisplayed();
|
|
84
|
-
const snapshot = await browser.
|
|
84
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
85
85
|
await expect(snapshot).toEqual(0);
|
|
86
86
|
});
|
|
87
87
|
it('02: should display left nav with badged items selected, one focused correctly', async () => {
|
|
@@ -89,7 +89,7 @@ describe('PUI-11817:: NotificationBadge: with LeftNavigation example -Visual', (
|
|
|
89
89
|
|
|
90
90
|
const item = await DSNotificationBadgeCO.getIconByIndex(2);
|
|
91
91
|
await item.click();
|
|
92
|
-
const snapshot = await browser.
|
|
92
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
93
93
|
await expect(snapshot).toEqual(0);
|
|
94
94
|
});
|
|
95
95
|
});
|
|
@@ -99,10 +99,8 @@ describe('PUI-14185:: NotificationBadge: textColor prop - Visual Test ', () => {
|
|
|
99
99
|
if (errorOnGo) throw errorOnGo;
|
|
100
100
|
});
|
|
101
101
|
it('01: should display notification badge with custom textColor', async () => {
|
|
102
|
-
await
|
|
103
|
-
const
|
|
104
|
-
await notification.waitForDisplayed();
|
|
105
|
-
const snapshot = await browser.eyesCheckSnapshot(DSNotificationBadgeCO.snapshotPath('badge-with-custom-textColor'));
|
|
102
|
+
await DSNotificationBadgeCO.getNotificationBadgeByIndex(1).waitForDisplayed();
|
|
103
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
106
104
|
await expect(snapshot).toEqual(0);
|
|
107
105
|
});
|
|
108
106
|
});
|
|
@@ -114,12 +112,11 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
114
112
|
if (errorOnGo) throw errorOnGo;
|
|
115
113
|
});
|
|
116
114
|
it('01: should display toolbar with toolbar correctly', async () => {
|
|
117
|
-
await browser.eyesOpen();
|
|
118
115
|
const notification = await DSNotificationBadgeCO.getNotificationBadgeByIndex(1);
|
|
119
116
|
await notification.waitForDisplayed();
|
|
120
117
|
await browser.keys(Key.Tab);
|
|
121
118
|
await browser.keys(Key.ArrowRight);
|
|
122
|
-
const snapshot = await browser.
|
|
119
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
123
120
|
await expect(snapshot).toEqual(0);
|
|
124
121
|
});
|
|
125
122
|
});
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PATH_E2E_PAGE_LAYOUT } from '../paths';
|
|
2
2
|
import { PageObject, Urlbuilder } from '../helpers';
|
|
3
3
|
|
|
4
4
|
export default class PageLayoutCO extends PageObject {
|
|
5
|
-
static basicURL = new Urlbuilder(
|
|
5
|
+
static basicURL = new Urlbuilder(PATH_E2E_PAGE_LAYOUT, 'basic-test');
|
|
6
6
|
|
|
7
|
-
static complexURL = new Urlbuilder(
|
|
7
|
+
static complexURL = new Urlbuilder(PATH_E2E_PAGE_LAYOUT, 'complex-page-test');
|
|
8
8
|
|
|
9
|
-
static integratedURL = new Urlbuilder(
|
|
9
|
+
static integratedURL = new Urlbuilder(PATH_E2E_PAGE_LAYOUT, 'integrated-example-test');
|
|
10
10
|
|
|
11
11
|
// Snapshots
|
|
12
12
|
static snapshotPath(example = 'basic') {
|
|
@@ -63,6 +63,18 @@ export default class DSPillsV2CO extends PageObject {
|
|
|
63
63
|
return $$(' [data-testid="ds-pill-wrapper"]');
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
static async getRemovablePills() {
|
|
67
|
+
return $$('.ds-pill-wrapper-removable');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
static async getPillByLabel(label) {
|
|
71
|
+
return $(`[data-testid="ds-pill-wrapper"][data-label="${label}"]`);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
static async getCloseButtonByPillLabel(label) {
|
|
75
|
+
return $(`[data-testid="ds-pill-wrapper"][data-label="${label}"] [data-testid="ds-pill-close-icon"]`);
|
|
76
|
+
}
|
|
77
|
+
|
|
66
78
|
static async getFloatingWrapper() {
|
|
67
79
|
return $('[data-testid="ds-floating-wrapper-root"]');
|
|
68
80
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSPillsV2CO from '../DSPillsV2CO';
|
|
3
|
+
import { tabStops } from '../../helpers';
|
|
4
|
+
|
|
5
|
+
// Tests for the fix delivered in PUI-17870 (missing disabled behaviour on the removable pill button,
|
|
6
|
+
// originally shipped with PUI-17861). Unlike `disabled`, `applyAriaDisabled` must keep the remove
|
|
7
|
+
// button FOCUSABLE (WCAG 2.1.1) while blocking the removal on both mouse and keyboard activation.
|
|
8
|
+
// The `apply-aria-disabled-test` story renders 6 aria-disabled removable pills; the first 4 tab
|
|
9
|
+
// stops belong to the aria-disabled tooltip buttons of the value pills above them.
|
|
10
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
11
|
+
describe('PUI-18841 - DSPillsV2:: aria-disabled removable pill remove button - Func', () => {
|
|
12
|
+
before('loading page', async () => {
|
|
13
|
+
const errorOnGo = await DSPillsV2CO.applyAriaDisabled.go();
|
|
14
|
+
if (errorOnGo) throw errorOnGo;
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('01: should expose aria-disabled on the remove button while keeping it focusable', async () => {
|
|
18
|
+
const closeBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment');
|
|
19
|
+
await closeBtn.waitForDisplayed();
|
|
20
|
+
|
|
21
|
+
await tabStops(5);
|
|
22
|
+
const closeBtnFocused = await closeBtn.isFocused();
|
|
23
|
+
|
|
24
|
+
await expect(closeBtn).toHaveAttribute('aria-disabled', 'true');
|
|
25
|
+
// aria-disabled must NOT fall back to the native disabled attribute
|
|
26
|
+
await expect(closeBtn).toBeEnabled();
|
|
27
|
+
await expect(closeBtn).toHaveAttribute('tabindex', '0');
|
|
28
|
+
await expect(closeBtnFocused).toEqual(true);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('02: should not remove the pill when Enter or Space is pressed on the remove button', async () => {
|
|
32
|
+
await browser.keys(Key.Enter);
|
|
33
|
+
const removableAfterEnter = (await DSPillsV2CO.getRemovablePills()).length;
|
|
34
|
+
|
|
35
|
+
await browser.keys(Key.Space);
|
|
36
|
+
const removableAfterSpace = (await DSPillsV2CO.getRemovablePills()).length;
|
|
37
|
+
|
|
38
|
+
await expect(removableAfterEnter).toEqual(6);
|
|
39
|
+
await expect(removableAfterSpace).toEqual(6);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('03: should not remove the pill when the remove button is clicked', async () => {
|
|
43
|
+
const closeBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment');
|
|
44
|
+
await closeBtn.click();
|
|
45
|
+
|
|
46
|
+
const pill = await DSPillsV2CO.getPillByLabel('Value segment');
|
|
47
|
+
const removablePills = await DSPillsV2CO.getRemovablePills();
|
|
48
|
+
|
|
49
|
+
await expect(pill).toBeExisting();
|
|
50
|
+
await expect(removablePills.length).toEqual(6);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import DSPillsV2CO from '../DSPillsV2CO';
|
|
2
|
+
import { mouseOver } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
// Tests for the fix delivered in PUI-17870 (missing icon color and hover style on the removable pill
|
|
5
|
+
// button, originally shipped with PUI-17861). An `applyAriaDisabled` removable pill must render a
|
|
6
|
+
// dimmed remove icon and must NOT paint the hover background that an enabled one does.
|
|
7
|
+
// Applitools Eyes is used instead of Percy on purpose: Percy serializes the DOM and re-renders it
|
|
8
|
+
// without a pointer, so a CSS-only `:hover` state would be lost from the snapshot.
|
|
9
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
10
|
+
describe('PUI-18842 - DSPillsV2:: aria-disabled removable pill remove button hover - Visual', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSPillsV2CO.applyAriaDisabled.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should keep the aria-disabled remove button dimmed with no hover background', async () => {
|
|
17
|
+
await browser.eyesOpen();
|
|
18
|
+
const closeBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment');
|
|
19
|
+
await closeBtn.waitForDisplayed();
|
|
20
|
+
await mouseOver(closeBtn);
|
|
21
|
+
const snapshotName = 'pills-v2-aria-disabled-remove-hover';
|
|
22
|
+
const snapshot = await browser.eyesCheckSnapshot(DSPillsV2CO.snapshotPath(snapshotName));
|
|
23
|
+
await expect(snapshot).toEqual(0);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSPillsV2CO from '../DSPillsV2CO';
|
|
3
|
+
import { tabStops } from '../../helpers';
|
|
4
|
+
|
|
5
|
+
// Tests for the fix delivered in PUI-17870 (missing disabled behaviour on the removable pill button,
|
|
6
|
+
// originally shipped with PUI-17861). A removable pill rendered with `disabled` must expose a
|
|
7
|
+
// natively disabled remove button: out of the tab order, unreachable via ArrowRight, and unable to
|
|
8
|
+
// remove the pill. The `removable-pill-test` story renders 6 pills where the last one
|
|
9
|
+
// ("Value segment 3") is the disabled one.
|
|
10
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
11
|
+
describe('PUI-18839 - DSPillsV2:: disabled removable pill remove button - Func', () => {
|
|
12
|
+
before('loading page', async () => {
|
|
13
|
+
const errorOnGo = await DSPillsV2CO.removableURL.go();
|
|
14
|
+
if (errorOnGo) throw errorOnGo;
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('01: should keep the disabled remove button unfocusable via Tab and ArrowRight', async () => {
|
|
18
|
+
const disabledCloseBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment 3');
|
|
19
|
+
await disabledCloseBtn.waitForDisplayed();
|
|
20
|
+
const lastEnabledCloseBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment 2');
|
|
21
|
+
const resetBtn = await DSPillsV2CO.getResetBtn();
|
|
22
|
+
|
|
23
|
+
// 5 Tab stops reach the remove button of the last ENABLED pill
|
|
24
|
+
await tabStops(5);
|
|
25
|
+
const enabledFocusedAfterTabs = await lastEnabledCloseBtn.isFocused();
|
|
26
|
+
|
|
27
|
+
// ArrowRight cannot move focus onto the disabled remove button, so focus stays where it was
|
|
28
|
+
await browser.keys(Key.ArrowRight);
|
|
29
|
+
const enabledFocusedAfterArrowRight = await lastEnabledCloseBtn.isFocused();
|
|
30
|
+
|
|
31
|
+
// Tab skips the disabled remove button entirely and lands on the Reset button
|
|
32
|
+
await browser.keys(Key.Tab);
|
|
33
|
+
const resetFocusedAfterTab = await resetBtn.isFocused();
|
|
34
|
+
|
|
35
|
+
await expect(disabledCloseBtn).toBeDisabled();
|
|
36
|
+
await expect(disabledCloseBtn).toHaveAttribute('tabindex', '-1');
|
|
37
|
+
await expect(enabledFocusedAfterTabs).toEqual(true);
|
|
38
|
+
await expect(enabledFocusedAfterArrowRight).toEqual(true);
|
|
39
|
+
await expect(resetFocusedAfterTab).toEqual(true);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('02: should not remove the disabled pill when its remove button is clicked', async () => {
|
|
43
|
+
const disabledCloseBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment 3');
|
|
44
|
+
await disabledCloseBtn.click();
|
|
45
|
+
|
|
46
|
+
const disabledPill = await DSPillsV2CO.getPillByLabel('Value segment 3');
|
|
47
|
+
const pills = await DSPillsV2CO.getPills();
|
|
48
|
+
|
|
49
|
+
await expect(disabledPill).toBeExisting();
|
|
50
|
+
await expect(pills.length).toEqual(6);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import DSPillsV2CO from '../DSPillsV2CO';
|
|
2
|
+
import { mouseOver } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
// Tests for the fix delivered in PUI-17870 (missing icon color and hover style on the removable pill
|
|
5
|
+
// button, originally shipped with PUI-17861). A `disabled` removable pill must render a dimmed remove
|
|
6
|
+
// icon and must NOT paint the hover background that an enabled one does.
|
|
7
|
+
// Applitools Eyes is used instead of Percy on purpose: Percy serializes the DOM and re-renders it
|
|
8
|
+
// without a pointer, so a CSS-only `:hover` state would be lost from the snapshot.
|
|
9
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
10
|
+
describe('PUI-18840 - DSPillsV2:: disabled removable pill remove button hover - Visual', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSPillsV2CO.removableURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should paint the hover background on an enabled remove button', async () => {
|
|
17
|
+
await browser.eyesOpen();
|
|
18
|
+
const enabledCloseBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment 2');
|
|
19
|
+
await enabledCloseBtn.waitForDisplayed();
|
|
20
|
+
await mouseOver(enabledCloseBtn);
|
|
21
|
+
const snapshot = await browser.eyesCheckSnapshot(DSPillsV2CO.snapshotPath('pills-v2-remove-hover-enabled'));
|
|
22
|
+
await expect(snapshot).toEqual(0);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('02: should keep the disabled remove button dimmed with no hover background', async () => {
|
|
26
|
+
await browser.eyesOpen();
|
|
27
|
+
const disabledCloseBtn = await DSPillsV2CO.getCloseButtonByPillLabel('Value segment 3');
|
|
28
|
+
await mouseOver(disabledCloseBtn);
|
|
29
|
+
const snapshot = await browser.eyesCheckSnapshot(DSPillsV2CO.snapshotPath('pills-v2-remove-hover-disabled'));
|
|
30
|
+
await expect(snapshot).toEqual(0);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable wdio/no-pause */
|
|
1
2
|
import DSProgressIndicatorCO from './DSProgressIndicatorCO';
|
|
2
3
|
import { axeCoreCheck } from '../helpers';
|
|
3
4
|
|
|
@@ -14,6 +15,7 @@ if (
|
|
|
14
15
|
});
|
|
15
16
|
it('01: should display basic progress indicator and pass axe-core', async () => {
|
|
16
17
|
await (await DSProgressIndicatorCO.getUploadLabel()).waitForDisplayed();
|
|
18
|
+
await browser.pause(500);
|
|
17
19
|
const result = await axeCoreCheck();
|
|
18
20
|
expect(result.length).toBe(0);
|
|
19
21
|
});
|
|
@@ -8,22 +8,22 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
8
8
|
const errorOnGo = await DSQueryBuilderCO.dateRangeV2.go();
|
|
9
9
|
if (errorOnGo) throw errorOnGo;
|
|
10
10
|
});
|
|
11
|
-
it('should be displayed date range inputs empties', async () => {
|
|
11
|
+
it('01: should be displayed date range inputs empties', async () => {
|
|
12
12
|
await (await DSQueryBuilderCO.getDatePickerBtn()).waitForDisplayed();
|
|
13
|
-
const snapshot = await browser.
|
|
13
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
14
14
|
await expect(snapshot).toEqual(0);
|
|
15
15
|
});
|
|
16
|
-
it('should be displayed
|
|
16
|
+
it('should be displayed date range inputs filled', async () => {
|
|
17
17
|
await (await DSQueryBuilderCO.getDatePickerBtn()).click();
|
|
18
18
|
await (await DSQueryBuilderCO.getDate(12)).waitForDisplayed();
|
|
19
19
|
await (await DSQueryBuilderCO.getDate(12)).click();
|
|
20
20
|
await (await DSQueryBuilderCO.getDate(16)).click();
|
|
21
|
-
const snapshot = await browser.
|
|
21
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
22
22
|
await expect(snapshot).toEqual(0);
|
|
23
23
|
});
|
|
24
|
-
it('should be displayed date range values entered', async () => {
|
|
24
|
+
it('03: should be displayed date range values entered', async () => {
|
|
25
25
|
await (await DSQueryBuilderCO.getDatePickerBtn()).click();
|
|
26
|
-
const snapshot = await browser.
|
|
26
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
27
27
|
await expect(snapshot).toEqual(0);
|
|
28
28
|
});
|
|
29
29
|
});
|