@@ -9,6 +9,8 @@ import { getItemKey, NormalizedItem } from './itemUtils';
99import { wrapIcon , wrapPrimitiveWithText } from './itemWrapperUtils' ;
1010import { ListActionGroup } from '../ListActionGroup' ;
1111import { ActionGroup } from '../ActionGroup' ;
12+ import { ListActionMenu } from '../ListActionMenu' ;
13+ import ActionMenu from '../ActionMenu' ;
1214
1315jest . mock ( './itemWrapperUtils' ) ;
1416
@@ -21,13 +23,44 @@ beforeEach(() => {
2123
2224const onAction = jest . fn ( ) ;
2325const onChange = jest . fn ( ) ;
26+ const onOpenChange = jest . fn ( ) ;
2427
2528const listActionGroup = (
2629 < ListActionGroup onAction = { onAction } onChange = { onChange } >
2730 < Item > Item 1</ Item >
2831 </ ListActionGroup >
2932) ;
3033
34+ const listActionMenu = (
35+ < ListActionMenu onAction = { onAction } onOpenChange = { onOpenChange } >
36+ < Item > Item 1</ Item >
37+ </ ListActionMenu >
38+ ) ;
39+
40+ const expectedActions = new Map ( [
41+ [ undefined , null ] ,
42+ [
43+ listActionGroup ,
44+ // eslint-disable-next-line react/jsx-key
45+ < ActionGroup
46+ // eslint-disable-next-line react/jsx-props-no-spreading
47+ { ...listActionGroup . props }
48+ onAction = { expect . any ( Function ) }
49+ onChange = { expect . any ( Function ) }
50+ /> ,
51+ ] ,
52+ [
53+ listActionMenu ,
54+ // eslint-disable-next-line react/jsx-key
55+ < ActionMenu
56+ // eslint-disable-next-line react/jsx-props-no-spreading
57+ { ...listActionMenu . props }
58+ onAction = { expect . any ( Function ) }
59+ onOpenChange = { expect . any ( Function ) }
60+ /> ,
61+ ] ,
62+ ] ) ;
63+
3164describe . each ( [
3265 [ true , true , null , undefined ] ,
3366 [ true , true , { placement : 'top' } , undefined ] ,
@@ -46,12 +79,23 @@ describe.each([
4679 [ false , true , { placement : 'top' } , listActionGroup ] ,
4780 [ false , false , null , listActionGroup ] ,
4881 [ false , false , { placement : 'top' } , listActionGroup ] ,
82+ // ListActionMenu
83+ [ true , true , null , listActionMenu ] ,
84+ [ true , true , { placement : 'top' } , listActionMenu ] ,
85+ [ true , false , null , listActionMenu ] ,
86+ [ true , false , { placement : 'top' } , listActionMenu ] ,
87+ [ false , true , null , listActionMenu ] ,
88+ [ false , true , { placement : 'top' } , listActionMenu ] ,
89+ [ false , false , null , listActionMenu ] ,
90+ [ false , false , { placement : 'top' } , listActionMenu ] ,
4991] as const ) (
5092 'useRenderNormalizedItem: %s, %s, %s' ,
5193 ( showItemIcons , showItemDescriptions , tooltipOptions , actions ) => {
5294 beforeEach ( ( ) => {
5395 asMock ( onAction ) . mockName ( 'onAction' ) ;
5496 asMock ( onChange ) . mockName ( 'onChange' ) ;
97+ asMock ( onOpenChange ) . mockName ( 'onOpenChange' ) ;
98+
5599 asMock ( wrapIcon ) . mockImplementation ( ( a , b ) => `wrapIcon(${ a } , ${ b } )` ) ;
56100 asMock ( wrapPrimitiveWithText ) . mockImplementation (
57101 ( a , b ) => `wrapPrimitiveWithText(${ a } , ${ b } )`
@@ -138,14 +182,7 @@ describe.each([
138182 { showItemIcons ? icon : null }
139183 { content }
140184 { showItemDescriptions ? description : null }
141- { actions === listActionGroup ? (
142- < ActionGroup
143- // eslint-disable-next-line react/jsx-props-no-spreading
144- { ...listActionGroup . props }
145- onAction = { expect . any ( Function ) }
146- onChange = { expect . any ( Function ) }
147- />
148- ) : null }
185+ { expectedActions . get ( actions ) }
149186 </ ItemContent >
150187 </ Item >
151188 ) ;
@@ -161,6 +198,17 @@ describe.each([
161198 const actionKeys = [ 'actionKey1' , 'actionKey2' ] ;
162199 actionGroup . props . onChange ( actionKeys ) ;
163200 expect ( onChange ) . toHaveBeenCalledWith ( actionKeys , itemKey ) ;
201+ } else if ( actions === listActionMenu ) {
202+ const actionMenu = actual . props . children . props . children [ 3 ] ;
203+ expect ( isElementOfType ( actionMenu , ActionMenu ) ) . toBe ( true ) ;
204+
205+ const actionKey = 'actionKey' ;
206+ actionMenu . props . onAction ( actionKey ) ;
207+ expect ( onAction ) . toHaveBeenCalledWith ( actionKey , itemKey ) ;
208+
209+ const isOpen = true ;
210+ actionMenu . props . onOpenChange ( isOpen ) ;
211+ expect ( onOpenChange ) . toHaveBeenCalledWith ( isOpen , itemKey ) ;
164212 }
165213 }
166214 ) ;
0 commit comments