11import { ZIndex } from '@primeuix/utils/zindex'
2- import { render , screen } from '@testing-library/vue'
2+ import { render , screen , within } from '@testing-library/vue'
33import userEvent from '@testing-library/user-event'
4- import { afterEach , describe , expect , it } from 'vitest'
4+ import type { MenuItem } from 'primevue/menuitem'
5+ import { afterEach , describe , expect , it , vi } from 'vitest'
56import { createI18n } from 'vue-i18n'
67
78import enMessages from '@/locales/en/main.json'
@@ -14,9 +15,9 @@ const i18n = createI18n({
1415 messages : { en : enMessages }
1516} )
1617
17- function renderMenu ( ) {
18+ function renderMenu ( entries : MenuItem [ ] = [ { label : 'Item A' } ] ) {
1819 return render ( DropdownMenu , {
19- props : { entries : [ { label : 'Item A' } ] } ,
20+ props : { entries } ,
2021 global : { plugins : [ i18n ] , directives : { tooltip : { } } }
2122 } )
2223}
@@ -53,4 +54,32 @@ describe('DropdownMenu z-index', () => {
5354 expect ( menu . style . zIndex ) . toBe ( '' )
5455 expect ( menu . className ) . toContain ( 'z-1700' )
5556 } )
57+
58+ it ( 'opens a nested menu above a registered dialog' , async ( ) => {
59+ openModal = document . createElement ( 'div' )
60+ ZIndex . set ( 'modal' , openModal , 1700 )
61+ const dialogZ = Number ( openModal . style . zIndex )
62+ const command = vi . fn ( )
63+ const user = userEvent . setup ( )
64+ renderMenu ( [
65+ {
66+ label : 'Change role' ,
67+ items : [
68+ { label : 'Owner' , command } ,
69+ { label : 'Member' , command }
70+ ]
71+ }
72+ ] )
73+
74+ await user . click ( screen . getByRole ( 'button' ) )
75+ await user . click ( screen . getByRole ( 'menuitem' , { name : 'Change role' } ) )
76+
77+ expect ( await screen . findByRole ( 'menuitem' , { name : 'Owner' } ) ) . toBeVisible ( )
78+ expect ( screen . getByRole ( 'menuitem' , { name : 'Member' } ) ) . toBeVisible ( )
79+ const submenu = screen
80+ . getAllByRole ( 'menu' )
81+ . find ( ( menu ) => within ( menu ) . queryByRole ( 'menuitem' , { name : 'Owner' } ) )
82+ expect ( submenu ) . toBeDefined ( )
83+ expect ( Number ( submenu ?. style . zIndex ) ) . toBeGreaterThan ( dialogZ )
84+ } )
5685} )
0 commit comments