@@ -639,15 +639,102 @@ describe('packages/menu', () => {
639639 } ) ;
640640 } ) ;
641641
642- // eslint-disable-next-line jest/no-disabled-tests
643- describe . skip ( 'Types work as expected' , ( ) => {
644- test ( 'Types work as expected' , ( ) => {
645- render (
646- < Menu data-testid = "menu" >
647- < MenuItem > Item</ MenuItem >
648- < MenuItem > Item</ MenuItem >
642+ describe ( 'refEl and trigger props' , ( ) => {
643+ test ( 'Menu works with only trigger prop' , async ( ) => {
644+ const trigger = < button data-testid = "trigger-btn" > Open Menu</ button > ;
645+ const { getByTestId, findByTestId } = render (
646+ < Menu trigger = { trigger } >
647+ < MenuItem data-testid = "menu-item" > Item</ MenuItem >
649648 </ Menu > ,
650649 ) ;
650+
651+ const triggerBtn = getByTestId ( 'trigger-btn' ) ;
652+ expect ( triggerBtn ) . toBeInTheDocument ( ) ;
653+
654+ userEvent . click ( triggerBtn ) ;
655+
656+ const menu = await findByTestId ( lgIds . root ) ;
657+ expect ( menu ) . toBeInTheDocument ( ) ;
658+
659+ const menuItem = getByTestId ( 'menu-item' ) ;
660+ expect ( menuItem ) . toBeInTheDocument ( ) ;
661+ } ) ;
662+
663+ test ( 'Menu works with only refEl prop' , async ( ) => {
664+ const refEl = React . createRef < HTMLButtonElement > ( ) ;
665+ const { getByTestId, findByTestId } = render (
666+ < >
667+ < button ref = { refEl } data-testid = "ref-element" >
668+ Reference Element
669+ </ button >
670+ < Menu refEl = { refEl } open >
671+ < MenuItem data-testid = "menu-item" > Item</ MenuItem >
672+ </ Menu >
673+ </ > ,
674+ ) ;
675+
676+ const refElement = getByTestId ( 'ref-element' ) ;
677+ expect ( refElement ) . toBeInTheDocument ( ) ;
678+
679+ const menu = await findByTestId ( lgIds . root ) ;
680+ expect ( menu ) . toBeInTheDocument ( ) ;
681+
682+ const menuItem = getByTestId ( 'menu-item' ) ;
683+ expect ( menuItem ) . toBeInTheDocument ( ) ;
684+ } ) ;
685+
686+ test ( 'Menu works with both trigger and refEl props' , async ( ) => {
687+ const refEl = React . createRef < HTMLDivElement > ( ) ;
688+ const trigger = < button data-testid = "trigger-btn" > Open Menu</ button > ;
689+ const { getByTestId, findByTestId } = render (
690+ < >
691+ < div ref = { refEl } data-testid = "ref-element" >
692+ Reference Element
693+ </ div >
694+ < Menu trigger = { trigger } refEl = { refEl } >
695+ < MenuItem data-testid = "menu-item" > Item</ MenuItem >
696+ </ Menu >
697+ </ > ,
698+ ) ;
699+
700+ const triggerBtn = getByTestId ( 'trigger-btn' ) ;
701+ expect ( triggerBtn ) . toBeInTheDocument ( ) ;
702+
703+ userEvent . click ( triggerBtn ) ;
704+
705+ const menu = await findByTestId ( lgIds . root ) ;
706+ expect ( menu ) . toBeInTheDocument ( ) ;
707+
708+ const menuItem = getByTestId ( 'menu-item' ) ;
709+ expect ( menuItem ) . toBeInTheDocument ( ) ;
710+ } ) ;
711+ } ) ;
712+
713+ // eslint-disable-next-line jest/no-disabled-tests
714+ describe . skip ( 'Types work as expected' , ( ) => {
715+ test ( 'Menu requires at least one of refEl or trigger' , ( ) => {
716+ const refEl = React . createRef < HTMLDivElement > ( ) ;
717+ const trigger = < button > Open Menu</ button > ;
718+
719+ // @ts -expect-error - Missing both refEl and trigger
720+ < Menu >
721+ < MenuItem > Item</ MenuItem >
722+ </ Menu > ;
723+
724+ // Valid: Menu with only trigger
725+ < Menu trigger = { trigger } >
726+ < MenuItem > Item</ MenuItem >
727+ </ Menu > ;
728+
729+ // Valid: Menu with only refEl
730+ < Menu refEl = { refEl } open >
731+ < MenuItem > Item</ MenuItem >
732+ </ Menu > ;
733+
734+ // Valid: Menu with both trigger and refEl
735+ < Menu trigger = { trigger } refEl = { refEl } >
736+ < MenuItem > Item</ MenuItem >
737+ </ Menu > ;
651738 } ) ;
652739 } ) ;
653740} ) ;
0 commit comments