22// SPDX-License-Identifier: Apache-2.0
33
44import { ReactElement } from "react" ;
5- import { cleanup , render as libRender } from "@testing-library/react" ;
5+ import { cleanup , fireEvent , render as libRender } from "@testing-library/react" ;
66import { afterEach , describe , expect , test } from "vitest" ;
77
88import Button from "@cloudscape-design/components/button" ;
99import Container from "@cloudscape-design/components/container" ;
1010import ExpandableSection from "@cloudscape-design/components/expandable-section" ;
1111import Header from "@cloudscape-design/components/header" ;
12+ import DragHandleWrapper from "@cloudscape-design/components/test-utils/dom/internal/drag-handle" ;
13+ import TooltipWrapper from "@cloudscape-design/components/test-utils/dom/internal/tooltip" ;
1214
1315import "@cloudscape-design/components/test-utils/dom" ;
1416import BoardItem from "../../../lib/components/board-item" ;
@@ -18,6 +20,8 @@ import { ItemContextWrapper } from "./board-item-wrapper";
1820const i18nStrings = {
1921 dragHandleAriaLabel : "Drag handle" ,
2022 resizeHandleAriaLabel : "Resize handle" ,
23+ dragHandleTooltipText : "Drag or select to move" ,
24+ resizeHandleTooltipText : "Drag or select to resize" ,
2125} ;
2226
2327function render ( jsx : ReactElement ) {
@@ -61,4 +65,72 @@ describe("WidgetContainer", () => {
6165 expect ( getByLabelText ( "Drag handle" ) ) . toBeDefined ( ) ;
6266 expect ( getByLabelText ( "Resize handle" ) ) . toBeDefined ( ) ;
6367 } ) ;
68+
69+ test ( "renders drag handle tooltip text if provided" , ( ) => {
70+ render ( < BoardItem i18nStrings = { i18nStrings } /> ) ;
71+ const wrapper = createWrapper ( ) ;
72+ const dragHandleEl = wrapper . findBoardItem ( ) ! . findDragHandle ( ) . getElement ( ) ;
73+
74+ fireEvent ( dragHandleEl , new MouseEvent ( "pointerover" , { bubbles : true } ) ) ;
75+ const tooltipEl = wrapper . findByClassName ( TooltipWrapper . rootSelector ) ! . getElement ( ) ;
76+ expect ( tooltipEl . textContent ) . toBe ( "Drag or select to move" ) ;
77+ } ) ;
78+
79+ test ( "does not render drag handle tooltip text if not provided" , ( ) => {
80+ render ( < BoardItem i18nStrings = { { ...i18nStrings , dragHandleTooltipText : undefined } } /> ) ;
81+ const wrapper = createWrapper ( ) ;
82+ const dragHandleEl = wrapper . findBoardItem ( ) ! . findDragHandle ( ) . getElement ( ) ;
83+
84+ fireEvent ( dragHandleEl , new MouseEvent ( "pointerover" , { bubbles : true } ) ) ;
85+ expect ( wrapper . findByClassName ( TooltipWrapper . rootSelector ) ) . toBeNull ( ) ;
86+ } ) ;
87+
88+ test ( "renders drag handle UAP actions on handle click" , ( ) => {
89+ render ( < BoardItem i18nStrings = { i18nStrings } /> ) ;
90+ const dragHandleEl = createWrapper ( ) . findBoardItem ( ) ! . findDragHandle ( ) ! . getElement ( ) ;
91+
92+ fireEvent ( dragHandleEl , new MouseEvent ( "pointerdown" , { bubbles : true } ) ) ;
93+ fireEvent ( dragHandleEl , new MouseEvent ( "pointerup" , { bubbles : true } ) ) ;
94+
95+ const dragHandleWrapper = new DragHandleWrapper ( document . body ) ;
96+ expect ( dragHandleWrapper . findAllVisibleDirectionButtons ( ) ) . toHaveLength ( 4 ) ;
97+ expect ( dragHandleWrapper . findVisibleDirectionButtonBlockStart ( ) ) . toBeDefined ( ) ;
98+ expect ( dragHandleWrapper . findVisibleDirectionButtonBlockEnd ( ) ) . toBeDefined ( ) ;
99+ expect ( dragHandleWrapper . findVisibleDirectionButtonInlineStart ( ) ) . toBeDefined ( ) ;
100+ expect ( dragHandleWrapper . findVisibleDirectionButtonInlineEnd ( ) ) . toBeDefined ( ) ;
101+ } ) ;
102+
103+ test ( "renders resize handle tooltip text" , ( ) => {
104+ render ( < BoardItem i18nStrings = { i18nStrings } /> ) ;
105+ const wrapper = createWrapper ( ) ;
106+ const resizeHandleEl = wrapper . findBoardItem ( ) ! . findResizeHandle ( ) ! . getElement ( ) ;
107+
108+ fireEvent ( resizeHandleEl , new MouseEvent ( "pointerover" , { bubbles : true } ) ) ;
109+ const tooltipEl = wrapper . findByClassName ( TooltipWrapper . rootSelector ) ! . getElement ( ) ;
110+ expect ( tooltipEl . textContent ) . toBe ( "Drag or select to resize" ) ;
111+ } ) ;
112+
113+ test ( "does not render resize handle tooltip text if not provided" , ( ) => {
114+ render ( < BoardItem i18nStrings = { { ...i18nStrings , resizeHandleTooltipText : undefined } } /> ) ;
115+ const wrapper = createWrapper ( ) ;
116+ const resizeHandleEl = wrapper . findBoardItem ( ) ! . findResizeHandle ( ) ! . getElement ( ) ;
117+
118+ fireEvent ( resizeHandleEl , new MouseEvent ( "pointerover" , { bubbles : true } ) ) ;
119+ expect ( wrapper . findByClassName ( TooltipWrapper . rootSelector ) ) . toBeNull ( ) ;
120+ } ) ;
121+
122+ test ( "renders resize handle UAP actions on handle click" , ( ) => {
123+ render ( < BoardItem i18nStrings = { i18nStrings } /> ) ;
124+ const resizeHandleEl = createWrapper ( ) . findBoardItem ( ) ! . findResizeHandle ( ) ! . getElement ( ) ;
125+
126+ fireEvent ( resizeHandleEl , new MouseEvent ( "pointerdown" , { bubbles : true } ) ) ;
127+ fireEvent ( resizeHandleEl , new MouseEvent ( "pointerup" , { bubbles : true } ) ) ;
128+
129+ const dragHandleWrapper = new DragHandleWrapper ( document . body ) ;
130+ expect ( dragHandleWrapper . findAllVisibleDirectionButtons ( ) ) . toHaveLength ( 4 ) ;
131+ expect ( dragHandleWrapper . findVisibleDirectionButtonBlockStart ( ) ) . toBeDefined ( ) ;
132+ expect ( dragHandleWrapper . findVisibleDirectionButtonBlockEnd ( ) ) . toBeDefined ( ) ;
133+ expect ( dragHandleWrapper . findVisibleDirectionButtonInlineStart ( ) ) . toBeDefined ( ) ;
134+ expect ( dragHandleWrapper . findVisibleDirectionButtonInlineEnd ( ) ) . toBeDefined ( ) ;
135+ } ) ;
64136} ) ;
0 commit comments