@@ -8,7 +8,7 @@ import { forwardRef } from '@wordpress/element';
88// eslint-disable-next-line @wordpress/use-recommended-components
99import { Menu } from '@wordpress/ui' ;
1010import MoreMenuItem from '../more-menu-item' ;
11- import MoreMenuGroup from '../more-menu-group ' ;
11+ import MoreMenuSubmenu , { toMenuItems } from '../more-menu-submenu ' ;
1212
1313// `MenuItem` renders a `Button`, which turns into a link given an address.
1414// Neither of them declares `href` among its props.
@@ -20,9 +20,7 @@ function renderMenu( children: ReactNode ) {
2020 return render (
2121 < Menu . Root >
2222 < Menu . Trigger > Options</ Menu . Trigger >
23- < Menu . Popup >
24- < MoreMenuGroup label = "Panels" > { children } </ MoreMenuGroup >
25- </ Menu . Popup >
23+ < Menu . Popup > { children } </ Menu . Popup >
2624 </ Menu . Root >
2725 ) ;
2826}
@@ -32,12 +30,39 @@ async function openMenu( user: UserEvent ) {
3230 await screen . findByRole ( 'menu' ) ;
3331}
3432
35- describe ( 'MoreMenuGroup' , ( ) => {
33+ describe ( 'MoreMenuSubmenu' , ( ) => {
34+ it ( 'opens its items from a labelled menu item' , async ( ) => {
35+ const user = userEvent . setup ( ) ;
36+
37+ renderMenu (
38+ < MoreMenuSubmenu label = "Panels" >
39+ { toMenuItems ( < MenuItem > Legacy item</ MenuItem > ) }
40+ </ MoreMenuSubmenu >
41+ ) ;
42+ await openMenu ( user ) ;
43+
44+ const trigger = screen . getByRole ( 'menuitem' , { name : 'Panels' } ) ;
45+ expect ( trigger ) . toHaveAttribute ( 'aria-haspopup' , 'menu' ) ;
46+ expect (
47+ screen . queryByRole ( 'menuitem' , { name : 'Legacy item' } )
48+ ) . not . toBeInTheDocument ( ) ;
49+
50+ await user . click ( trigger ) ;
51+
52+ expect (
53+ await screen . findByRole ( 'menuitem' , { name : 'Legacy item' } )
54+ ) . toBeVisible ( ) ;
55+ } ) ;
56+ } ) ;
57+
58+ describe ( 'toMenuItems' , ( ) => {
3659 it ( 'adopts legacy menu items as menu items' , async ( ) => {
3760 const user = userEvent . setup ( ) ;
3861 const onClick = vi . fn ( ) ;
3962
40- renderMenu ( < MenuItem onClick = { onClick } > Legacy item</ MenuItem > ) ;
63+ renderMenu (
64+ toMenuItems ( < MenuItem onClick = { onClick } > Legacy item</ MenuItem > )
65+ ) ;
4166 await openMenu ( user ) ;
4267
4368 const item = screen . getByRole ( 'menuitem' , { name : 'Legacy item' } ) ;
@@ -53,7 +78,9 @@ describe( 'MoreMenuGroup', () => {
5378 const user = userEvent . setup ( ) ;
5479
5580 renderMenu (
56- < MenuItem info = "Legacy description" > Legacy item</ MenuItem >
81+ toMenuItems (
82+ < MenuItem info = "Legacy description" > Legacy item</ MenuItem >
83+ )
5784 ) ;
5885 await openMenu ( user ) ;
5986
@@ -68,9 +95,11 @@ describe( 'MoreMenuGroup', () => {
6895 const user = userEvent . setup ( ) ;
6996
7097 renderMenu (
71- < LinkMenuItem href = "https://wordpress.org" >
72- Legacy link
73- </ LinkMenuItem >
98+ toMenuItems (
99+ < LinkMenuItem href = "https://wordpress.org" >
100+ Legacy link
101+ </ LinkMenuItem >
102+ )
74103 ) ;
75104 await openMenu ( user ) ;
76105
@@ -82,7 +111,9 @@ describe( 'MoreMenuGroup', () => {
82111 it ( 'adopts a legacy link item of an empty address as a link item' , async ( ) => {
83112 const user = userEvent . setup ( ) ;
84113
85- renderMenu ( < LinkMenuItem href = "" > Legacy link</ LinkMenuItem > ) ;
114+ renderMenu (
115+ toMenuItems ( < LinkMenuItem href = "" > Legacy link</ LinkMenuItem > )
116+ ) ;
86117 await openMenu ( user ) ;
87118
88119 expect (
@@ -94,10 +125,12 @@ describe( 'MoreMenuGroup', () => {
94125 const user = userEvent . setup ( ) ;
95126 const NothingMenuItem = forwardRef ( ( ) => null ) ;
96127
97- renderMenu ( [
98- < NothingMenuItem key = "nothing" /> ,
99- < MenuItem key = "legacy" > Legacy item</ MenuItem > ,
100- ] ) ;
128+ renderMenu (
129+ toMenuItems ( [
130+ < NothingMenuItem key = "nothing" /> ,
131+ < MenuItem key = "legacy" > Legacy item</ MenuItem > ,
132+ ] )
133+ ) ;
101134 await openMenu ( user ) ;
102135
103136 await user . keyboard ( '{ArrowDown}' ) ;
@@ -109,7 +142,7 @@ describe( 'MoreMenuGroup', () => {
109142 it ( 'leaves more menu items alone' , async ( ) => {
110143 const user = userEvent . setup ( ) ;
111144
112- renderMenu ( < MoreMenuItem > Plugin item</ MoreMenuItem > ) ;
145+ renderMenu ( toMenuItems ( < MoreMenuItem > Plugin item</ MoreMenuItem > ) ) ;
113146 await openMenu ( user ) ;
114147
115148 expect ( screen . getAllByRole ( 'menuitem' ) ) . toHaveLength ( 1 ) ;
0 commit comments