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
|
@@ -12,6 +12,7 @@ const DSShuttleV2DataTestIds = {
|
|
|
12
12
|
ITEM_LABEL_WRAPPER: 'ds-shuttlev2-item-label-wrapper',
|
|
13
13
|
ITEM_MIDSECTION_WRAPPER: 'ds-shuttlev2-item-midsection-wrapper',
|
|
14
14
|
ITEM_SELECTION: 'ds-shuttlev2-item-selection',
|
|
15
|
+
ITEM_SELECTION_CHECKBOX_UI: 'ds-shuttlev2-item-selection-checkbox-ui',
|
|
15
16
|
ITEM_ACTIONS_WRAPPER: 'ds-shuttlev2-item-actions-wrapper',
|
|
16
17
|
ITEM_ACTION_WRAPPER: 'ds-shuttlev2-item-action-wrapper',
|
|
17
18
|
ITEM_ACTION_BTN: 'ds-shuttlev2-item-action-btn',
|
|
@@ -27,7 +28,6 @@ const DSShuttleV2DataTestIds = {
|
|
|
27
28
|
MOVE_MULTIPLE_WRAPPER: 'ds-shuttlev2-move-multiple-wrapper',
|
|
28
29
|
MOVE_MULTIPLE_BTN: 'ds-shuttlev2-move-multiple-btn',
|
|
29
30
|
LIST_WRAPPER_MID: 'ds-shuttlev2-list-wrapper-mid',
|
|
30
|
-
LIST_WRAPPER_MID_SCROLLER: 'ds-shuttlev2-list-wrapper-mid-scroller',
|
|
31
31
|
LIST_WRAPPER_TOP: 'ds-shuttlev2-list-wrapper-top',
|
|
32
32
|
AREA_SEARCH_WRAPPER: 'ds-shuttlev2-area-search-wrapper',
|
|
33
33
|
AREA_SEARCH_BAR: 'ds-shuttlev2-area-search-bar',
|
|
@@ -42,6 +42,8 @@ export default class DSShuttleV2CO extends PageObject {
|
|
|
42
42
|
|
|
43
43
|
static basicURL = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'basic-test');
|
|
44
44
|
|
|
45
|
+
static breadcrumbAccessibleURL = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'breadcrumb-accessible-test');
|
|
46
|
+
|
|
45
47
|
static adHocRenderAfterBulkMove = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'ad-hoc-render-after-bulk-move');
|
|
46
48
|
|
|
47
49
|
static ariaPropsUrl = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'aria-props-test');
|
|
@@ -78,6 +80,8 @@ export default class DSShuttleV2CO extends PageObject {
|
|
|
78
80
|
|
|
79
81
|
static insideDialogURL = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'inside-dialog-test');
|
|
80
82
|
|
|
83
|
+
static explicitSelectionUIURL = new Urlbuilder(PATH_E2E_SHUTTLE_V2, 'explicit-selection-ui-test');
|
|
84
|
+
|
|
81
85
|
// Getter's
|
|
82
86
|
|
|
83
87
|
static getHeaderSearchIcon = async (index = 0) =>
|
|
@@ -104,6 +108,14 @@ export default class DSShuttleV2CO extends PageObject {
|
|
|
104
108
|
|
|
105
109
|
static getItemSelection = async (index = 0) => $$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION}]`)[index];
|
|
106
110
|
|
|
111
|
+
static getItemSelectionCheckboxUI = async (index = 0) =>
|
|
112
|
+
$$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION_CHECKBOX_UI}]`)[index];
|
|
113
|
+
|
|
114
|
+
static getItemSelections = async () => $$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION}]`);
|
|
115
|
+
|
|
116
|
+
static getItemSelectionCheckboxUIs = async () =>
|
|
117
|
+
$$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_SELECTION_CHECKBOX_UI}]`);
|
|
118
|
+
|
|
107
119
|
static getItemsActionsWrapper = async (index = 0) =>
|
|
108
120
|
$$(`[data-testid=${DSShuttleV2DataTestIds.ITEM_ACTIONS_WRAPPER}]`)[index];
|
|
109
121
|
|
|
@@ -182,6 +194,8 @@ export default class DSShuttleV2CO extends PageObject {
|
|
|
182
194
|
|
|
183
195
|
static getBreadcrumbs = async () => $$(`[data-testid="ds-breadcrumb-link"]`);
|
|
184
196
|
|
|
197
|
+
static getActiveBreadcrumb = async () => $(`[data-testid="ds-breadcrumb-link"][aria-current="step"]`);
|
|
198
|
+
|
|
185
199
|
static getSubtitleByItem = async (item) => item.$$(`p`)[1];
|
|
186
200
|
|
|
187
201
|
static getActionButtonByItemAndIndex = async (item, index = 0) =>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import DSShuttleV2CO from '../DSShuttleV2CO';
|
|
2
|
+
|
|
3
|
+
// Tests for the fix introduced in PUI-17395 (ShuttleV2 breadcrumb a11y):
|
|
4
|
+
// every step renders as a focusable <button> and the active/current step exposes
|
|
5
|
+
// aria-current="step". DOM-attribute assertions are browser-agnostic, so this runs Chrome-only.
|
|
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-18762 - DSShuttleV2:: breadcrumb active step aria-current -Func', () => {
|
|
13
|
+
before(async () => {
|
|
14
|
+
const errorOnGo = await DSShuttleV2CO.breadcrumbAccessibleURL.go();
|
|
15
|
+
if (errorOnGo) throw errorOnGo;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('01: active step exposes aria-current="step" and every step is a focusable button', async () => {
|
|
19
|
+
// Drill down two levels so the breadcrumb has multiple steps (ancestors + current)
|
|
20
|
+
const rootItem = await DSShuttleV2CO.getItemFromSourceByIndex(1);
|
|
21
|
+
await (await DSShuttleV2CO.getActionButtonByItemAndIndex(rootItem, 0)).click();
|
|
22
|
+
const subItem = await DSShuttleV2CO.getItemFromSourceByIndex(2);
|
|
23
|
+
await (await DSShuttleV2CO.getActionButtonByItemAndIndex(subItem, 0)).click();
|
|
24
|
+
|
|
25
|
+
// Gather elements/values
|
|
26
|
+
const crumbs = await DSShuttleV2CO.getBreadcrumbs();
|
|
27
|
+
const activeCrumb = await DSShuttleV2CO.getActiveBreadcrumb();
|
|
28
|
+
const activeCrumbTag = await activeCrumb.getTagName();
|
|
29
|
+
const firstCrumb = crumbs[0];
|
|
30
|
+
const firstCrumbTag = await firstCrumb.getTagName();
|
|
31
|
+
|
|
32
|
+
// Assertions
|
|
33
|
+
await expect(crumbs.length).toBeGreaterThan(1);
|
|
34
|
+
// The current/active step (last) is announced as the current step
|
|
35
|
+
await expect(activeCrumb).toBeExisting();
|
|
36
|
+
await expect(activeCrumb).toHaveAttribute('aria-current', 'step');
|
|
37
|
+
await expect(activeCrumbTag).toBe('button');
|
|
38
|
+
// Non-active ancestor steps are buttons without aria-current
|
|
39
|
+
await expect(firstCrumbTag).toBe('button');
|
|
40
|
+
await expect(firstCrumb).not.toHaveAttribute('aria-current');
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import DSShuttleV2CO from '../DSShuttleV2CO';
|
|
2
|
+
|
|
3
|
+
// Tests for the WCAG 1.4.1 "Use of Color" fix introduced in PUI-15539:
|
|
4
|
+
// the `explicitSelectionUI` flag swaps the color-only vertical bar for an
|
|
5
|
+
// explicit checkbox as the per-item selection indicator.
|
|
6
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
7
|
+
describe('PUI-18638 - DSShuttleV2:: explicitSelectionUI checkbox indicator - func', () => {
|
|
8
|
+
before(async () => {
|
|
9
|
+
const errorOnGo = await DSShuttleV2CO.explicitSelectionUIURL.go();
|
|
10
|
+
if (errorOnGo) throw errorOnGo;
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('01: should render an explicit checkbox indicator per item and no color-only vertical bar', async () => {
|
|
14
|
+
const verticalBars = await DSShuttleV2CO.getItemSelections();
|
|
15
|
+
const checkboxUIs = await DSShuttleV2CO.getItemSelectionCheckboxUIs();
|
|
16
|
+
await expect(verticalBars.length).toBe(0);
|
|
17
|
+
await expect(checkboxUIs.length).toBeGreaterThan(0);
|
|
18
|
+
await expect(await DSShuttleV2CO.getItemSelectionCheckboxUI(0)).toBeExisting();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('02: should check the selection indicator after selecting a selectable item', async () => {
|
|
22
|
+
const selectableItem = await DSShuttleV2CO.getItemWrapper(0); // "Source 0.0" — even index, selectable
|
|
23
|
+
const selectableCheckbox = await DSShuttleV2CO.getItemCheckboxByIndex(0);
|
|
24
|
+
await expect(await selectableCheckbox.getAttribute('aria-checked')).toBe('false');
|
|
25
|
+
await selectableItem.click();
|
|
26
|
+
await expect(await selectableCheckbox.getAttribute('aria-checked')).toBe('true');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('03: should keep the selection-prevented item disabled and unchecked after click', async () => {
|
|
30
|
+
const preventedItem = await DSShuttleV2CO.getItemWrapper(1); // "Source 0.1" — odd index, prevented
|
|
31
|
+
const preventedCheckbox = await DSShuttleV2CO.getItemCheckboxByIndex(1);
|
|
32
|
+
await expect(await preventedCheckbox.getAttribute('aria-disabled')).toBe('true');
|
|
33
|
+
await preventedItem.click();
|
|
34
|
+
await expect(await preventedCheckbox.getAttribute('aria-checked')).toBe('false');
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import DSShuttleV2CO from '../DSShuttleV2CO';
|
|
2
|
+
|
|
3
|
+
// Visual coverage for the WCAG 1.4.1 "Use of Color" fix (PUI-15539): with
|
|
4
|
+
// `explicitSelectionUI`, items expose unselected, selected and disabled
|
|
5
|
+
// checkbox states as a non-color selection indicator.
|
|
6
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
7
|
+
describe('PUI-18639 - DSShuttleV2:: explicitSelectionUI checkbox indicators - visual', () => {
|
|
8
|
+
before(async () => {
|
|
9
|
+
const errorOnGo = await DSShuttleV2CO.explicitSelectionUIURL.go();
|
|
10
|
+
if (errorOnGo) throw errorOnGo;
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('01: should display unselected checkboxes and disabled checkboxes on prevented items', async () => {
|
|
14
|
+
const firstSelectable = await DSShuttleV2CO.getItemWrapper(0); // "Source 0.0" — selectable
|
|
15
|
+
await firstSelectable.waitForDisplayed();
|
|
16
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
17
|
+
await expect(snapshot).toEqual(0);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('02: should display checked checkboxes and the BAB after selecting selectable items', async () => {
|
|
21
|
+
const firstSelectable = await DSShuttleV2CO.getItemWrapper(0); // "Source 0.0" — selectable
|
|
22
|
+
await firstSelectable.waitForDisplayed();
|
|
23
|
+
await firstSelectable.click();
|
|
24
|
+
const secondSelectable = await DSShuttleV2CO.getItemWrapper(2); // "Source 0.2" — selectable
|
|
25
|
+
await secondSelectable.click();
|
|
26
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
27
|
+
await expect(snapshot).toEqual(0);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
@@ -51,19 +51,24 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
51
51
|
before(async () => {
|
|
52
52
|
const errorOnGo = await DSShuttleV2CO.loadMoreURL.go();
|
|
53
53
|
if (errorOnGo) throw errorOnGo;
|
|
54
|
-
await browser.maximizeWindow();
|
|
55
54
|
});
|
|
56
55
|
it('01: should move all the items a, focus jump to body panel and load more items', async () => {
|
|
57
|
-
await browser.eyesOpen();
|
|
58
56
|
const selectAllCheckbox = await DSShuttleV2CO.getCheckboxByIndex(0);
|
|
59
57
|
await selectAllCheckbox.click();
|
|
60
58
|
const bab = await DSShuttleV2CO.getMoveMultipleButton();
|
|
61
59
|
await bab.click();
|
|
60
|
+
// await browser.keys(Key.Tab);
|
|
61
|
+
// await browser.keys(Key.Return);
|
|
62
62
|
const loadMoreBtn = await DSShuttleV2CO.getSourceLoadMore();
|
|
63
63
|
await loadMoreBtn.click();
|
|
64
64
|
const firstItem = await DSShuttleV2CO.getItemFromSourceByIndex(0);
|
|
65
65
|
await firstItem.waitForDisplayed();
|
|
66
|
-
const
|
|
66
|
+
const sourcePanelBody = await DSShuttleV2CO.getListWrapperMid(0);
|
|
67
|
+
await browser.waitUntil(async () => sourcePanelBody.isFocused(), {
|
|
68
|
+
timeout: 5000,
|
|
69
|
+
timeoutMsg: 'Source panel body never received focus before snapshot',
|
|
70
|
+
});
|
|
71
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
67
72
|
await expect(snapshot).toEqual(0);
|
|
68
73
|
});
|
|
69
74
|
});
|
|
@@ -74,11 +74,13 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
74
74
|
it('01: should not move the item when the disabled move action button is clicked', async () => {
|
|
75
75
|
const testItem = await DSShuttleV2CO.getItemWrapper(1);
|
|
76
76
|
const testItemMoveBtn = await DSShuttleV2CO.getActionButtonByItemAndIndex(testItem, 1);
|
|
77
|
-
const testItemMoveBtnDisabled = await testItemMoveBtn.getAttribute('aria-disabled');
|
|
78
77
|
const testItemText = await testItem.getText();
|
|
79
78
|
await testItemMoveBtn.click();
|
|
80
79
|
await expect(testItemText).toBe('Source 0.1');
|
|
81
|
-
|
|
80
|
+
// PUI-17909: a natively disabled DSButton emits the native `disabled` attribute and
|
|
81
|
+
// intentionally omits aria-disabled (that is reserved for applyAriaDisabled). Assert the
|
|
82
|
+
// native disabled state instead of the now-absent aria-disabled.
|
|
83
|
+
await expect(testItemMoveBtn).toBeDisabled();
|
|
82
84
|
});
|
|
83
85
|
it('02: should not display the BAB when a disabled item is clicked', async () => {
|
|
84
86
|
const testItem = await DSShuttleV2CO.getItemWrapper(1);
|
|
@@ -7,7 +7,7 @@ if (
|
|
|
7
7
|
browser.capabilities.browserName === 'Chrome') ||
|
|
8
8
|
browser.capabilities.browserName === 'chrome'
|
|
9
9
|
) {
|
|
10
|
-
// to be unskiped after PUI-
|
|
10
|
+
// to be unskiped after PUI-18632 is fixed
|
|
11
11
|
describe.skip('PUI-10774 - Shuttle V2, Load More -AxeCore.', () => {
|
|
12
12
|
before(async () => {
|
|
13
13
|
const errorOnGo = await DSShuttleV2CO.loadMoreURL.go();
|
|
@@ -7,7 +7,7 @@ if (
|
|
|
7
7
|
browser.capabilities.browserName === 'Chrome') ||
|
|
8
8
|
browser.capabilities.browserName === 'chrome'
|
|
9
9
|
) {
|
|
10
|
-
// to be unskiped after PUI-
|
|
10
|
+
// to be unskiped after PUI-18632 is fixed
|
|
11
11
|
describe.skip('PUI-10775 - Shuttle V2, Filter axe-core -Func.', () => {
|
|
12
12
|
before(async () => {
|
|
13
13
|
const errorOnGo = await DSShuttleV2CO.filterURL.go();
|
|
@@ -7,7 +7,7 @@ if (
|
|
|
7
7
|
browser.capabilities.browserName === 'Chrome') ||
|
|
8
8
|
browser.capabilities.browserName === 'chrome'
|
|
9
9
|
) {
|
|
10
|
-
// to be unskiped after PUI-
|
|
10
|
+
// to be unskiped after PUI-18632 is fixed
|
|
11
11
|
describe.skip('PUI-10776 - Shuttle V2, Select/deselect with disabled items -AxeCore.', () => {
|
|
12
12
|
before(async () => {
|
|
13
13
|
const errorOnGo = await DSShuttleV2CO.disabledItemsURL.go();
|
|
@@ -7,7 +7,7 @@ if (
|
|
|
7
7
|
browser.capabilities.browserName === 'Chrome') ||
|
|
8
8
|
browser.capabilities.browserName === 'chrome'
|
|
9
9
|
) {
|
|
10
|
-
// to be unskiped after PUI-
|
|
10
|
+
// to be unskiped after PUI-18632 is fixed
|
|
11
11
|
describe.skip('PUI-10777 - Shuttle V2, Soft delete -AxeCore.', () => {
|
|
12
12
|
before(async () => {
|
|
13
13
|
const errorOnGo = await DSShuttleV2CO.softDeleteURL.go();
|
|
@@ -28,7 +28,7 @@ if (
|
|
|
28
28
|
expect(result.length).toBe(0);
|
|
29
29
|
});
|
|
30
30
|
});
|
|
31
|
-
// to be unskiped after PUI-
|
|
31
|
+
// to be unskiped after PUI-18632 is fixed
|
|
32
32
|
describe.skip('PUI-10778 - Shuttle V2, Subtitle -AxeCore.', () => {
|
|
33
33
|
before(async () => {
|
|
34
34
|
const errorOnGo = await DSShuttleV2CO.subtitleURL.go();
|
|
@@ -46,7 +46,7 @@ if (
|
|
|
46
46
|
expect(result.length).toBe(0);
|
|
47
47
|
});
|
|
48
48
|
});
|
|
49
|
-
// to be unskiped after PUI-
|
|
49
|
+
// to be unskiped after PUI-18632 is fixed
|
|
50
50
|
describe.skip('PUI-10779 - Shuttle V2, Max selected items -AxeCore.', () => {
|
|
51
51
|
before(async () => {
|
|
52
52
|
const errorOnGo = await DSShuttleV2CO.maxSelectedURL.go();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable max-statements */
|
|
2
2
|
/* eslint-disable max-lines */
|
|
3
|
-
// to be unskiped after PUI-
|
|
3
|
+
// to be unskiped after PUI-18632 is fixed
|
|
4
4
|
describe.skip('PUI-10768 - Shuttle V2, Basic -AxeCore.', () => {
|
|
5
5
|
before(async () => {
|
|
6
6
|
const errorOnGo = await DSShuttleV2CO.basicURL.go();
|
|
@@ -25,7 +25,7 @@ describe.skip('PUI-10768 - Shuttle V2, Basic -AxeCore.', () => {
|
|
|
25
25
|
});
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
-
// to be unskiped after PUI-
|
|
28
|
+
// to be unskiped after PUI-18632 is fixed
|
|
29
29
|
describe.skip('PUI-10770 - Shuttle V2, Tooltip with keyboard -AxeCore.', () => {
|
|
30
30
|
before(async () => {
|
|
31
31
|
const errorOnGo = await DSShuttleV2CO.customRendererURL.go();
|
|
@@ -46,7 +46,7 @@ describe.skip('PUI-10770 - Shuttle V2, Tooltip with keyboard -AxeCore.', () =>
|
|
|
46
46
|
|
|
47
47
|
// From drilldown
|
|
48
48
|
|
|
49
|
-
// to be unskiped after PUI-
|
|
49
|
+
// to be unskiped after PUI-18632 is fixed
|
|
50
50
|
describe.skip('PUI-10771 - Shuttle V2, Drill Down and NOT Keep parent -AxeCore.', () => {
|
|
51
51
|
before(async () => {
|
|
52
52
|
const errorOnGo = await DSShuttleV2CO.basicURL.go();
|
|
@@ -72,7 +72,7 @@ describe.skip('PUI-10771 - Shuttle V2, Drill Down and NOT Keep parent -AxeCore.'
|
|
|
72
72
|
expect(result.length).toBe(0);
|
|
73
73
|
});
|
|
74
74
|
});
|
|
75
|
-
// to be unskiped after PUI-
|
|
75
|
+
// to be unskiped after PUI-18632 is fixed
|
|
76
76
|
describe.skip('PUI-10772 - Shuttle V2, Drill down and keep parent -AxeCore.', () => {
|
|
77
77
|
before(async () => {
|
|
78
78
|
const errorOnGo = await DSShuttleV2CO.basicKeepParentURL.go();
|
|
@@ -92,7 +92,7 @@ describe.skip('PUI-10772 - Shuttle V2, Drill down and keep parent -AxeCore.', (
|
|
|
92
92
|
|
|
93
93
|
// From drilldown KB
|
|
94
94
|
|
|
95
|
-
// To be unskipped and steps to be added after
|
|
95
|
+
// To be unskipped and steps to be added after PUI-18632 is fixed
|
|
96
96
|
describe.skip('PUI-10109 - Shuttle V2, Drill down and keep parent, KB -Func.', () => {
|
|
97
97
|
before(async () => {
|
|
98
98
|
const errorOnGo = await DSShuttleV2CO.basicKeepParentURL.go();
|
|
@@ -105,8 +105,9 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
105
105
|
await expect(valueAfterChange).toEqual('75');
|
|
106
106
|
await expect(value2AfterChange).toEqual('100');
|
|
107
107
|
});
|
|
108
|
-
it
|
|
109
|
-
//
|
|
108
|
+
it('04: should move second multiple slider handler to 75 (uncomplete step backwards fromm 100)', async () => {
|
|
109
|
+
// Unskipped after PUI-12653 / PUI-12643: handlers can no longer cross, so the max handler
|
|
110
|
+
// stepping back from 100 is capped by the min handler (75) instead of landing on 25.
|
|
110
111
|
const handler = await DSSliderV2CO.getSliderThumb(1);
|
|
111
112
|
const handler2 = await DSSliderV2CO.getSliderThumb(2);
|
|
112
113
|
await browser.keys(Key.Tab);
|
|
@@ -199,35 +200,27 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
199
200
|
await expect(valueHandler1after).toEqual('25');
|
|
200
201
|
await expect(valueHandler2after).toEqual('75');
|
|
201
202
|
});
|
|
202
|
-
it('02: should
|
|
203
|
+
it('02: should stop the max handler at the min handler value (with mouse)', async () => {
|
|
204
|
+
// PUI-12643: dragging the max handler well past the min handler no longer swaps their order,
|
|
205
|
+
// the min handler acts as the limit for that direction and both end up sharing the same value.
|
|
203
206
|
const minSlider = await DSSliderV2CO.getMinHandlerByAriaLabel();
|
|
204
207
|
const maxSlider = await DSSliderV2CO.getMaxHandlerByAriaLabel();
|
|
205
|
-
await minSlider.dragAndDrop({ x: 550, y: 0 });
|
|
206
208
|
await maxSlider.dragAndDrop({ x: -1200, y: 0 });
|
|
207
209
|
const valueMinSliderAfter = await DSSliderV2CO.getSliderValue(minSlider);
|
|
208
210
|
const valueMaxSliderAfter = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
209
|
-
await expect(valueMinSliderAfter).toEqual('
|
|
210
|
-
await expect(valueMaxSliderAfter).toEqual('
|
|
211
|
+
await expect(valueMinSliderAfter).toEqual('25');
|
|
212
|
+
await expect(valueMaxSliderAfter).toEqual('25');
|
|
211
213
|
});
|
|
212
|
-
it('03: should
|
|
214
|
+
it('03: should separate both handlers again after they overlap (with mouse)', async () => {
|
|
215
|
+
// Both handlers share the value 25, so the pointer lands on the topmost one (the max handler).
|
|
216
|
+
// Dragging it away from the min handler must re-open the range.
|
|
213
217
|
const minSlider = await DSSliderV2CO.getMinHandlerByAriaLabel();
|
|
214
218
|
const maxSlider = await DSSliderV2CO.getMaxHandlerByAriaLabel();
|
|
215
|
-
await minSlider.dragAndDrop({ x: 900, y: 0 });
|
|
216
|
-
await maxSlider.dragAndDrop({ x: 900, y: 0 });
|
|
217
219
|
await maxSlider.dragAndDrop({ x: 900, y: 0 });
|
|
218
220
|
const valueMinSliderAfter = await DSSliderV2CO.getSliderValue(minSlider);
|
|
219
221
|
const valueMaxSliderAfter = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
220
|
-
await expect(valueMinSliderAfter).toEqual('
|
|
221
|
-
await expect(valueMaxSliderAfter).
|
|
222
|
-
});
|
|
223
|
-
it('04: should be to move from 100', async () => {
|
|
224
|
-
const minSlider = await DSSliderV2CO.getMinHandlerByAriaLabel();
|
|
225
|
-
const maxSlider = await DSSliderV2CO.getMaxHandlerByAriaLabel();
|
|
226
|
-
await minSlider.dragAndDrop({ x: -750, y: 0 });
|
|
227
|
-
const valueMinSliderAfter = await DSSliderV2CO.getSliderValue(minSlider);
|
|
228
|
-
const valueMaxSliderAfter = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
229
|
-
await expect(valueMinSliderAfter).toEqual('100');
|
|
230
|
-
await expect(valueMaxSliderAfter).toEqual('50');
|
|
222
|
+
await expect(valueMinSliderAfter).toEqual('25');
|
|
223
|
+
await expect(Number(valueMaxSliderAfter)).toBeGreaterThan(Number(valueMinSliderAfter));
|
|
231
224
|
});
|
|
232
225
|
});
|
|
233
226
|
|
|
@@ -253,27 +246,45 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
253
246
|
await expect(valueHandler1after).toEqual('25');
|
|
254
247
|
await expect(valueHandler2after).toEqual('75');
|
|
255
248
|
});
|
|
256
|
-
it('02: should
|
|
249
|
+
it('02: should not let either handler cross the other one (with KB)', async () => {
|
|
250
|
+
// PUI-12643: the max handler stops on the min handler value (25) and further ArrowLeft presses
|
|
251
|
+
// are ignored; the same applies to the min handler pressing ArrowRight against the max handler.
|
|
252
|
+
// The aria-labels stay bound to their handler, so min/max never swap roles.
|
|
257
253
|
const minSlider = await DSSliderV2CO.getMinHandlerByAriaLabel();
|
|
258
254
|
const maxSlider = await DSSliderV2CO.getMaxHandlerByAriaLabel();
|
|
259
255
|
await browser.keys(Key.ArrowLeft);
|
|
260
256
|
await browser.keys(Key.ArrowLeft);
|
|
257
|
+
await browser.keys(Key.ArrowLeft);
|
|
261
258
|
await browser.keys([Key.Shift, Key.Tab]);
|
|
262
259
|
await browser.keys(Key.ArrowRight);
|
|
263
260
|
const valueMinSliderAfter = await DSSliderV2CO.getSliderValue(minSlider);
|
|
264
261
|
const valueMaxSliderAfter = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
265
|
-
await expect(valueMinSliderAfter).toEqual('
|
|
262
|
+
await expect(valueMinSliderAfter).toEqual('25');
|
|
266
263
|
await expect(valueMaxSliderAfter).toEqual('25');
|
|
264
|
+
await expect(minSlider).toBeFocused();
|
|
267
265
|
});
|
|
268
|
-
it('03: should
|
|
266
|
+
it('03: should move both handlers away from the upper limit (with KB)', async () => {
|
|
267
|
+
// PUI-12653: with both handlers stacked on the right-most limit the keyboard must still be able
|
|
268
|
+
// to move them, which is the accessible escape hatch the mouse does not provide.
|
|
269
269
|
const minSlider = await DSSliderV2CO.getMinHandlerByAriaLabel();
|
|
270
270
|
const maxSlider = await DSSliderV2CO.getMaxHandlerByAriaLabel();
|
|
271
271
|
await browser.keys(Key.Tab);
|
|
272
272
|
await browser.keys(Key.ArrowRight);
|
|
273
|
+
await browser.keys(Key.ArrowRight);
|
|
274
|
+
await browser.keys(Key.ArrowRight);
|
|
275
|
+
await browser.keys([Key.Shift, Key.Tab]);
|
|
276
|
+
await browser.keys(Key.ArrowRight);
|
|
277
|
+
await browser.keys(Key.ArrowRight);
|
|
278
|
+
await browser.keys(Key.ArrowRight);
|
|
279
|
+
const valueMinAtLimit = await DSSliderV2CO.getSliderValue(minSlider);
|
|
280
|
+
const valueMaxAtLimit = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
281
|
+
await expect(valueMinAtLimit).toEqual('100');
|
|
282
|
+
await expect(valueMaxAtLimit).toEqual('100');
|
|
283
|
+
await browser.keys(Key.ArrowLeft);
|
|
273
284
|
const valueMinSliderAfter = await DSSliderV2CO.getSliderValue(minSlider);
|
|
274
285
|
const valueMaxSliderAfter = await DSSliderV2CO.getSliderValue(maxSlider);
|
|
275
|
-
await expect(valueMinSliderAfter).toEqual('
|
|
276
|
-
await expect(valueMaxSliderAfter).toEqual('
|
|
286
|
+
await expect(valueMinSliderAfter).toEqual('75');
|
|
287
|
+
await expect(valueMaxSliderAfter).toEqual('100');
|
|
277
288
|
});
|
|
278
289
|
});
|
|
279
290
|
|
|
@@ -9,6 +9,8 @@ export default class DSSliderCO extends PageObject {
|
|
|
9
9
|
|
|
10
10
|
static multipleURL = new Urlbuilder(PATH_E2E_SLIDER_V2, 'multiple-test');
|
|
11
11
|
|
|
12
|
+
static minRangeURL = new Urlbuilder(PATH_E2E_SLIDER_V2, 'min-range-test');
|
|
13
|
+
|
|
12
14
|
static slotsTest = new Urlbuilder(PATH_E2E_SLIDER_V2, 'slots-test');
|
|
13
15
|
|
|
14
16
|
static singleURL = new Urlbuilder(PATH_E2E_SLIDER_V2, 'single-test');
|
|
@@ -93,6 +95,14 @@ export default class DSSliderCO extends PageObject {
|
|
|
93
95
|
return $('[aria-label="Max Range slider multiple aria"]');
|
|
94
96
|
}
|
|
95
97
|
|
|
98
|
+
static async getMinRangeMinHandler() {
|
|
99
|
+
return $('[aria-label="Min Range slider minRange aria"]');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
static async getMinRangeMaxHandler() {
|
|
103
|
+
return $('[aria-label="Max Range slider minRange aria"]');
|
|
104
|
+
}
|
|
105
|
+
|
|
96
106
|
// actions
|
|
97
107
|
static async getSliderValue(sliderThumb) {
|
|
98
108
|
return sliderThumb.getAttribute('aria-valuenow');
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSSliderV2CO from '../DSSliderV2CO';
|
|
3
|
+
|
|
4
|
+
// Tests for the fix introduced in PUI-12643 ([SliderV2] Can move a handler over the other).
|
|
5
|
+
// The fix relies on the `minRange` prop: on a multiple slider the neighbouring handler acts as the
|
|
6
|
+
// limit for that direction, so the handlers can neither cross over nor sit on top of each other.
|
|
7
|
+
// The story uses minValue 0, maxValue 100, step 25 and minRange 25, so the smallest allowed
|
|
8
|
+
// distance between both handlers is exactly one step.
|
|
9
|
+
if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
|
|
10
|
+
describe('PUI-12646 - DSSliderV2:: multiple handlers cannot overlap with minRange - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSSliderV2CO.minRangeURL.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should stop the min handler one minRange away from the max handler (with KB)', async () => {
|
|
17
|
+
const minHandler = await DSSliderV2CO.getMinRangeMinHandler();
|
|
18
|
+
const maxHandler = await DSSliderV2CO.getMinRangeMaxHandler();
|
|
19
|
+
await browser.keys(Key.Tab);
|
|
20
|
+
await browser.keys(Key.ArrowRight);
|
|
21
|
+
await browser.keys(Key.ArrowRight);
|
|
22
|
+
await browser.keys(Key.ArrowRight);
|
|
23
|
+
const valueMinAtLimit = await DSSliderV2CO.getSliderValue(minHandler);
|
|
24
|
+
// the next step would put the min handler on 100, closing the range below minRange
|
|
25
|
+
await browser.keys(Key.ArrowRight);
|
|
26
|
+
const valueMinAfter = await DSSliderV2CO.getSliderValue(minHandler);
|
|
27
|
+
const valueMaxAfter = await DSSliderV2CO.getSliderValue(maxHandler);
|
|
28
|
+
await expect(valueMinAtLimit).toEqual('75');
|
|
29
|
+
await expect(valueMinAfter).toEqual('75');
|
|
30
|
+
await expect(valueMaxAfter).toEqual('100');
|
|
31
|
+
await expect(minHandler).toBeFocused();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('02: should not let the max handler close the gap below minRange (with KB)', async () => {
|
|
35
|
+
const minHandler = await DSSliderV2CO.getMinRangeMinHandler();
|
|
36
|
+
const maxHandler = await DSSliderV2CO.getMinRangeMaxHandler();
|
|
37
|
+
await browser.keys(Key.Tab);
|
|
38
|
+
await browser.keys(Key.ArrowLeft);
|
|
39
|
+
const valueMinAfter = await DSSliderV2CO.getSliderValue(minHandler);
|
|
40
|
+
const valueMaxAfter = await DSSliderV2CO.getSliderValue(maxHandler);
|
|
41
|
+
await expect(valueMinAfter).toEqual('75');
|
|
42
|
+
await expect(valueMaxAfter).toEqual('100');
|
|
43
|
+
await expect(maxHandler).toBeFocused();
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('03: should move the min handler back to the start of the track (with KB)', async () => {
|
|
47
|
+
const minHandler = await DSSliderV2CO.getMinRangeMinHandler();
|
|
48
|
+
const maxHandler = await DSSliderV2CO.getMinRangeMaxHandler();
|
|
49
|
+
// the min handler travels freely while the gap allows it, leaving the range fully open
|
|
50
|
+
await browser.keys([Key.Shift, Key.Tab]);
|
|
51
|
+
await browser.keys(Key.ArrowLeft);
|
|
52
|
+
await browser.keys(Key.ArrowLeft);
|
|
53
|
+
await browser.keys(Key.ArrowLeft);
|
|
54
|
+
const valueMinAfter = await DSSliderV2CO.getSliderValue(minHandler);
|
|
55
|
+
const valueMaxAfter = await DSSliderV2CO.getSliderValue(maxHandler);
|
|
56
|
+
await expect(valueMinAfter).toEqual('0');
|
|
57
|
+
await expect(valueMaxAfter).toEqual('100');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Pointer coverage is deliberately NOT part of this describe. Dragging a handler on a multiple
|
|
61
|
+
// slider currently runs into the known defects tracked in PUI-18876: a handler sitting on the
|
|
62
|
+
// right-most position cannot be actuated with the mouse (item 2) and a drag leaves no thumb
|
|
63
|
+
// focused (item 4). Asserting around those would either encode the broken behavior or produce a
|
|
64
|
+
// test that fails for reasons unrelated to minRange.
|
|
65
|
+
// The minRange guard itself lives in the `handleOnChange` of MainContent and filters the change
|
|
66
|
+
// regardless of the input device, so the keyboard cases above fully cover the contract.
|
|
67
|
+
// Mouse dragging on a multiple slider stays covered by PUI-12328.
|
|
68
|
+
});
|
|
69
|
+
}
|
|
@@ -12,7 +12,7 @@ import DSTabButtonCO from './DSTabButtonCO';
|
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
*/
|
|
15
|
-
describe('PUI-XXXX - TabButton:: example test - data-testid exists', () => {
|
|
15
|
+
describe.skip('PUI-XXXX - TabButton:: example test - data-testid exists', () => {
|
|
16
16
|
before('loading page', async () => {
|
|
17
17
|
const errorOnGo = await DSTabButtonCO.basic.go();
|
|
18
18
|
if (errorOnGo) throw errorOnGo;
|
package/ds-tabs/DSTabsCO.js
CHANGED
|
@@ -60,6 +60,8 @@ export default class DSTabsCO extends PageObject {
|
|
|
60
60
|
|
|
61
61
|
static allTabsDisabled = new Urlbuilder(PATH_E2E_TABS, 'all-tabs-disabled');
|
|
62
62
|
|
|
63
|
+
static withNotificationBadge = new Urlbuilder(PATH_E2E_TABS, 'with-notification-badge-test');
|
|
64
|
+
|
|
63
65
|
static getUrl(component = 'basic') {
|
|
64
66
|
return PageObject.getUrl(PATH_E2E_TABS, component);
|
|
65
67
|
}
|
|
@@ -102,6 +104,8 @@ export default class DSTabsCO extends PageObject {
|
|
|
102
104
|
|
|
103
105
|
static getTabByName = async (name) => $(`button*=${name}`);
|
|
104
106
|
|
|
107
|
+
static getTabBadges = async () => (await this.getTabsList()).$$('[data-testid="ds-notification-badge"]');
|
|
108
|
+
|
|
105
109
|
// Snapshots
|
|
106
110
|
static snapshotPath(example = 'basic') {
|
|
107
111
|
return PageObject.getSnapshotPathBuilder('Tabs', example);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import DSTabsCO from '../DSTabsCO';
|
|
2
|
+
import { axeCoreCheck } from '../../helpers';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
8
|
+
browser.capabilities.browserName === 'Chrome'
|
|
9
|
+
) {
|
|
10
|
+
describe('PUI-18932 - DSTabs:: notification badge tab list a11y scan - Axe-Core', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSTabsCO.withNotificationBadge.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should have no violations with the badged tab selected', async () => {
|
|
17
|
+
await (await DSTabsCO.getTabsList()).waitForDisplayed();
|
|
18
|
+
const result = await axeCoreCheck();
|
|
19
|
+
await expect(result).toHaveLength(0);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('02: should have no violations after switching to a tab without a badge', async () => {
|
|
23
|
+
await (await DSTabsCO.getTabsByIndex(1)).click();
|
|
24
|
+
const result = await axeCoreCheck();
|
|
25
|
+
await expect(result).toHaveLength(0);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import DSTabsCO from '../DSTabsCO';
|
|
2
|
+
import DSNotificationBadgeCO from '../../ds-notification-badge/DSNotificationBadgeCO';
|
|
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-18931 - DSTabs:: notification badge in the tab accessible name - Func', () => {
|
|
11
|
+
before('loading page', async () => {
|
|
12
|
+
const errorOnGo = await DSTabsCO.withNotificationBadge.go();
|
|
13
|
+
if (errorOnGo) throw errorOnGo;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('01: should expose a named badge into the tab name', async () => {
|
|
17
|
+
const badgedTab = await DSTabsCO.getTabsByIndex(0);
|
|
18
|
+
await badgedTab.waitForDisplayed();
|
|
19
|
+
|
|
20
|
+
const badge = await DSNotificationBadgeCO.getNotificationBadgeByIndex(0);
|
|
21
|
+
await expect(badge).toBeExisting();
|
|
22
|
+
await expect(badge).toHaveText('3');
|
|
23
|
+
|
|
24
|
+
const wrapper = await badge.parentElement();
|
|
25
|
+
await expect(wrapper).toHaveAttribute('role', 'img');
|
|
26
|
+
await expect(wrapper).toHaveAttribute('aria-label', '3 new notifications');
|
|
27
|
+
|
|
28
|
+
const computedName = await badgedTab.getComputedLabel();
|
|
29
|
+
expect(computedName).toMatch(/Fields Sent\s*3 new notifications/i);
|
|
30
|
+
expect(await badgedTab.getComputedRole()).toBe('tab');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('02: should announce tabs without a badge by their title only', async () => {
|
|
34
|
+
const plainTab = await DSTabsCO.getTabsByIndex(1);
|
|
35
|
+
const plainName = await plainTab.getComputedLabel();
|
|
36
|
+
expect(plainName.trim()).toMatch(/^Fields Received$/i);
|
|
37
|
+
expect(plainName).not.toContain('3');
|
|
38
|
+
|
|
39
|
+
const badges = await DSTabsCO.getTabBadges();
|
|
40
|
+
await expect(badges).toHaveLength(1);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('03: should keep the required tab announcing its Required indicator', async () => {
|
|
44
|
+
const requiredTab = await DSTabsCO.getTabsByIndex(3);
|
|
45
|
+
await expect(requiredTab).toHaveAttribute('data-required', 'true');
|
|
46
|
+
|
|
47
|
+
const requiredName = await requiredTab.getComputedLabel();
|
|
48
|
+
expect(requiredName).toMatch(/Required docs\s*Required/i);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|