11import * as React from 'react' ;
2- import { render , screen } from '../../../../test-utils/testing-library' ;
2+ import { render , screen , userEvent } from '../../../../test-utils/testing-library' ;
33import SubHeaderRight , { SubHeaderRightProps } from '../SubHeaderRight' ;
4- import { VIEW_FOLDER , VIEW_MODE_GRID } from '../../../../constants' ;
4+ import { VIEW_FOLDER , VIEW_METADATA , VIEW_MODE_GRID } from '../../../../constants' ;
5+ import { FeatureProvider } from '../../feature-checking' ;
56
67describe ( 'elements/common/sub-header/SubHeaderRight' , ( ) => {
78 const defaultProps = {
@@ -21,8 +22,12 @@ describe('elements/common/sub-header/SubHeaderRight', () => {
2122 viewMode : VIEW_MODE_GRID ,
2223 } ;
2324
24- const renderComponent = ( props : Partial < SubHeaderRightProps > = { } ) =>
25- render ( < SubHeaderRight { ...defaultProps } { ...props } /> ) ;
25+ const renderComponent = ( props : Partial < SubHeaderRightProps > = { } , features = { } ) =>
26+ render (
27+ < FeatureProvider features = { features } >
28+ < SubHeaderRight { ...defaultProps } { ...props } />
29+ </ FeatureProvider > ,
30+ ) ;
2631
2732 test ( 'should render GridViewSlider when there are items and viewMode is grid' , ( ) => {
2833 renderComponent ( {
@@ -82,4 +87,95 @@ describe('elements/common/sub-header/SubHeaderRight', () => {
8287 renderComponent ( defaultProps ) ;
8388 expect ( screen . queryByRole ( 'button' , { name : 'Add' } ) ) . not . toBeInTheDocument ( ) ;
8489 } ) ;
90+
91+ describe ( 'metadataViewV2' , ( ) => {
92+ const metadataViewV2Props = {
93+ ...defaultProps ,
94+ selectedItemIds : 'all' as const ,
95+ bulkItemActions : [
96+ {
97+ label : 'Download' ,
98+ onClick : jest . fn ( ) ,
99+ } ,
100+ ] ,
101+ view : VIEW_METADATA ,
102+ onMetadataSidePanelToggle : jest . fn ( ) ,
103+ } ;
104+
105+ test . each ( [
106+ {
107+ selectedItemIds : 'all' as const ,
108+ } ,
109+ {
110+ selectedItemIds : new Set ( [ '1' , '2' ] ) ,
111+ } ,
112+ ] ) ( 'should render bulkItemActionMenu when selectedItemIds is $selectedItemIds' , async ( { selectedItemIds } ) => {
113+ const features = {
114+ contentExplorer : {
115+ metadataViewV2 : true , // enable the feature flag
116+ } ,
117+ } ;
118+
119+ renderComponent (
120+ {
121+ ...metadataViewV2Props ,
122+ selectedItemIds,
123+ } ,
124+ features ,
125+ ) ;
126+
127+ expect ( screen . getByRole ( 'button' , { name : 'Bulk actions' } ) ) . toBeInTheDocument ( ) ;
128+ } ) ;
129+
130+ test ( 'should call onClick when a bulk item action is clicked' , async ( ) => {
131+ const mockOnClick = jest . fn ( ) ;
132+ const user = userEvent ( ) ;
133+ const features = {
134+ contentExplorer : {
135+ metadataViewV2 : true , // enable the feature flag
136+ } ,
137+ } ;
138+
139+ renderComponent (
140+ {
141+ ...metadataViewV2Props ,
142+ bulkItemActions : [
143+ {
144+ label : 'Download' ,
145+ onClick : mockOnClick ,
146+ } ,
147+ ] ,
148+ } ,
149+ features ,
150+ ) ;
151+
152+ const ellipsisButton = screen . getByRole ( 'button' , { name : 'Bulk actions' } ) ;
153+
154+ await user . click ( ellipsisButton ) ;
155+
156+ const downloadAction = screen . getByRole ( 'menuitem' , { name : 'Download' } ) ;
157+ await user . click ( downloadAction ) ;
158+
159+ const expectedOnClickArgument = 'all' ;
160+ expect ( mockOnClick ) . toHaveBeenCalledWith ( expectedOnClickArgument ) ;
161+ } ) ;
162+
163+ test ( 'should not render metadata button when metadataViewV2 feature is disabled' , async ( ) => {
164+ const features = {
165+ contentExplorer : {
166+ metadataViewV2 : false , // Disable the feature flag
167+ } ,
168+ } ;
169+
170+ renderComponent (
171+ {
172+ ...metadataViewV2Props ,
173+ } ,
174+ features ,
175+ ) ;
176+
177+ expect ( screen . queryByRole ( 'button' , { name : 'Bulk actions' } ) ) . not . toBeInTheDocument ( ) ;
178+ expect ( screen . queryByRole ( 'button' , { name : 'Metadata' } ) ) . not . toBeInTheDocument ( ) ;
179+ } ) ;
180+ } ) ;
85181} ) ;
0 commit comments