@@ -14,6 +14,7 @@ import {
1414 findActiveDrawerLandmark ,
1515 getActiveDrawerWidth ,
1616 getGlobalDrawersTestUtils ,
17+ manyDrawers ,
1718 testDrawer ,
1819} from './utils' ;
1920
@@ -1386,5 +1387,58 @@ describe('toolbar mode only features', () => {
13861387 globalDrawersWrapper . findCloseButtonByActiveDrawerId ( drawerIdWithToggle ) ! . click ( ) ;
13871388 expect ( onToggle ) . toHaveBeenCalledWith ( { isOpen : false , initiatedByUserAction : true } ) ;
13881389 } ) ;
1390+
1391+ describe ( 'global drawers aria role in overflow menu' , ( ) => {
1392+ const registerGlobalDrawers = ( count : number ) => {
1393+ for ( let i = 1 ; i <= count ; i ++ ) {
1394+ awsuiPlugins . appLayout . registerDrawer ( {
1395+ ...drawerDefaults ,
1396+ id : `global-drawer${ i } ` ,
1397+ type : 'global' ,
1398+ } ) ;
1399+ }
1400+ } ;
1401+
1402+ test ( 'assigns correct ARIA roles when mixing global and regular drawers' , async ( ) => {
1403+ registerGlobalDrawers ( 2 ) ;
1404+ const { wrapper } = await renderComponent ( < AppLayout drawers = { manyDrawers } /> ) ;
1405+ const buttonDropdown = wrapper . findDrawersOverflowTrigger ( ) ;
1406+
1407+ buttonDropdown ! . openDropdown ( ) ;
1408+
1409+ expect ( buttonDropdown ! . findItemById ( 'global-drawer1' ) ) . toBeTruthy ( ) ;
1410+ expect ( buttonDropdown ! . findItemById ( 'global-drawer2' ) ) . toBeTruthy ( ) ;
1411+
1412+ const menu = buttonDropdown ! . findOpenDropdown ( ) ! . find ( '[role="menu"]' ) ! ;
1413+ // Global drawers should have role=menuitemcheckbox
1414+ const menuItemCheckboxesLength = menu . findAll ( '[role="menuitemcheckbox"]' ) . length ;
1415+ expect ( menuItemCheckboxesLength ) . toBe ( 2 ) ;
1416+
1417+ // Regular drawers should have role=menuitem
1418+ const menuItemsLength = menu . findAll ( '[role="menuitem"]' ) . length ;
1419+ expect ( menuItemsLength ) . toBe ( manyDrawers . length - menuItemCheckboxesLength ) ;
1420+ } ) ;
1421+
1422+ test ( 'assigns menuitemcheckbox role to global drawers in overflow menu' , async ( ) => {
1423+ registerGlobalDrawers ( 3 ) ;
1424+
1425+ // In mobile view, two drawers are visible in the toolbar, the others are placed in the overflow menu
1426+ const { wrapper, globalDrawersWrapper } = await renderComponent ( < AppLayout drawers = { [ testDrawer ] } /> ) ;
1427+ const buttonDropdown = wrapper . findDrawersOverflowTrigger ( ) ;
1428+
1429+ expect ( globalDrawersWrapper . findDrawerById ( 'global-drawer2' ) ) . toBeFalsy ( ) ;
1430+ expect ( globalDrawersWrapper . findDrawerById ( 'global-drawer3' ) ) . toBeFalsy ( ) ;
1431+
1432+ buttonDropdown ! . openDropdown ( ) ;
1433+
1434+ const menuItemCheckboxItemsLength = buttonDropdown !
1435+ . findOpenDropdown ( ) !
1436+ . find ( '[role="menu"]' ) !
1437+ . findAll ( '[role="menuitemcheckbox"]' ) . length ;
1438+ expect ( menuItemCheckboxItemsLength ) . toBe ( 2 ) ;
1439+ expect ( buttonDropdown ! . findItemById ( 'global-drawer2' ) ) . toBeTruthy ( ) ;
1440+ expect ( buttonDropdown ! . findItemById ( 'global-drawer3' ) ) . toBeTruthy ( ) ;
1441+ } ) ;
1442+ } ) ;
13891443 } ) ;
13901444} ) ;
0 commit comments