1010import React , { useState } from 'react' ;
1111import { render , screen , waitFor } from '@testing-library/react' ;
1212import { userEvent } from '@testing-library/user-event' ;
13- import { TabbedContent , type TabbedContentProps } from './tabbed_content' ;
13+ import type { TabbedContentProps } from './tabbed_content' ;
14+ import { TabbedContent } from './tabbed_content' ;
1415import { getPreviewDataMock } from '../../../__mocks__/get_preview_data' ;
1516import { servicesMock } from '../../../__mocks__/services' ;
1617
@@ -20,18 +21,18 @@ const NEW_TAB = {
2021} ;
2122
2223describe ( 'TabbedContent' , ( ) => {
23- const user = userEvent . setup ( ) ;
24-
2524 const TabsWrapper = ( {
2625 initialItems,
2726 initialSelectedItemId,
2827 onChanged,
2928 onEBTEvent,
29+ disableRenderContent = false ,
3030 } : {
3131 initialItems : TabbedContentProps [ 'items' ] ;
3232 initialSelectedItemId ?: TabbedContentProps [ 'selectedItemId' ] ;
3333 onChanged : TabbedContentProps [ 'onChanged' ] ;
3434 onEBTEvent : TabbedContentProps [ 'onEBTEvent' ] ;
35+ disableRenderContent ?: boolean ;
3536 } ) => {
3637 const [ { managedItems, managedSelectedItemId } , setState ] = useState < {
3738 managedItems : TabbedContentProps [ 'items' ] ;
@@ -57,9 +58,11 @@ describe('TabbedContent', () => {
5758 } }
5859 onEBTEvent = { onEBTEvent }
5960 onClearRecentlyClosed = { jest . fn ( ) }
60- renderContent = { ( item ) => (
61- < div style = { { paddingTop : '16px' } } > Content for tab: { item . label } </ div >
62- ) }
61+ renderContent = {
62+ ! disableRenderContent
63+ ? ( item ) => < div style = { { paddingTop : '16px' } } > Content for tab: { item . label } </ div >
64+ : undefined
65+ }
6366 />
6467 ) ;
6568 } ;
@@ -198,6 +201,12 @@ describe('TabbedContent', () => {
198201 } ) ;
199202
200203 it ( 'correctly numbers duplicate tabs when multiple copies exist' , async ( ) => {
204+ const user = userEvent . setup ( {
205+ delay : null ,
206+ advanceTimers : jest . advanceTimersByTime ,
207+ pointerEventsCheck : 0 ,
208+ } ) ;
209+
201210 const initialItems = [
202211 { id : 'tab1' , label : 'Tab 1' } ,
203212 { id : 'tab2' , label : 'Tab 1 (copy)' } ,
@@ -237,6 +246,8 @@ describe('TabbedContent', () => {
237246 } ) ;
238247
239248 it ( 'correctly duplicates tabs with regex special characters in the label' , async ( ) => {
249+ const user = userEvent . setup ( { delay : null , advanceTimers : jest . advanceTimersByTime } ) ;
250+
240251 const tabWithSpecialChars = { id : 'tab1' , label : 'Tab (1+2)*.?' } ;
241252 const initialItems = [ tabWithSpecialChars , { id : 'tab2' , label : 'Regular Tab' } ] ;
242253 const onChanged = jest . fn ( ) ;
@@ -270,6 +281,8 @@ describe('TabbedContent', () => {
270281 } ) ;
271282
272283 it ( 'can switch to a different tab and sends tabSwitched event' , async ( ) => {
284+ const user = userEvent . setup ( { delay : null , advanceTimers : jest . advanceTimersByTime } ) ;
285+
273286 const initialItems = [
274287 { id : 'tab1' , label : 'Tab 1' } ,
275288 { id : 'tab2' , label : 'Tab 2' } ,
@@ -287,7 +300,7 @@ describe('TabbedContent', () => {
287300 />
288301 ) ;
289302
290- await userEvent . click ( screen . getByTestId ( `unifiedTabs_selectTabBtn_${ secondTab . id } ` ) ) ;
303+ await user . click ( screen . getByTestId ( `unifiedTabs_selectTabBtn_${ secondTab . id } ` ) ) ;
291304 await waitFor ( ( ) => {
292305 expect ( onEBTEvent ) . toHaveBeenCalledWith ( {
293306 eventName : 'tabSwitched' ,
@@ -303,6 +316,8 @@ describe('TabbedContent', () => {
303316 } ) ;
304317
305318 it ( 'can close other tabs and sends tabClosedOthers event' , async ( ) => {
319+ const user = userEvent . setup ( { delay : null , advanceTimers : jest . advanceTimersByTime } ) ;
320+
306321 const initialItems = [
307322 { id : 'tab1' , label : 'Tab 1' } ,
308323 { id : 'tab2' , label : 'Tab 2' } ,
@@ -347,6 +362,8 @@ describe('TabbedContent', () => {
347362 } ) ;
348363
349364 it ( 'can close tabs to the right and sends tabClosedToTheRight event' , async ( ) => {
365+ const user = userEvent . setup ( { delay : null , advanceTimers : jest . advanceTimersByTime } ) ;
366+
350367 const initialItems = [
351368 { id : 'tab1' , label : 'Tab 1' } ,
352369 { id : 'tab2' , label : 'Tab 2' } ,
@@ -387,4 +404,52 @@ describe('TabbedContent', () => {
387404 } ) ;
388405 } ) ;
389406 } ) ;
407+
408+ it ( 'renders tab content when renderContent is provided' , ( ) => {
409+ const initialItems = [
410+ { id : 'tab1' , label : 'Tab 1' } ,
411+ { id : 'tab2' , label : 'Tab 2' } ,
412+ ] ;
413+ const onChanged = jest . fn ( ) ;
414+ const onEBTEvent = jest . fn ( ) ;
415+
416+ render (
417+ < TabsWrapper
418+ initialItems = { initialItems }
419+ initialSelectedItemId = { initialItems [ 0 ] . id }
420+ onChanged = { onChanged }
421+ onEBTEvent = { onEBTEvent }
422+ />
423+ ) ;
424+
425+ // The tabs bar should be rendered
426+ expect ( screen . queryByTestId ( 'unifiedTabs_tabsBar' ) ) . toBeInTheDocument ( ) ;
427+ // When renderContent is provided, the tab content area should be rendered
428+ expect ( screen . getByTestId ( 'unifiedTabs_selectedTabContent' ) ) . toBeInTheDocument ( ) ;
429+ expect ( screen . getByText ( 'Content for tab: Tab 1' ) ) . toBeInTheDocument ( ) ;
430+ } ) ;
431+
432+ it ( 'does not render tab content when renderContent is not provided' , ( ) => {
433+ const initialItems = [
434+ { id : 'tab1' , label : 'Tab 1' } ,
435+ { id : 'tab2' , label : 'Tab 2' } ,
436+ ] ;
437+ const onChanged = jest . fn ( ) ;
438+ const onEBTEvent = jest . fn ( ) ;
439+
440+ render (
441+ < TabsWrapper
442+ initialItems = { initialItems }
443+ initialSelectedItemId = { initialItems [ 0 ] . id }
444+ onChanged = { onChanged }
445+ onEBTEvent = { onEBTEvent }
446+ disableRenderContent = { true }
447+ />
448+ ) ;
449+
450+ // The tabs bar should still be rendered
451+ expect ( screen . queryByTestId ( 'unifiedTabs_tabsBar' ) ) . toBeInTheDocument ( ) ;
452+ // When renderContent is not provided, the tab content area should NOT be rendered
453+ expect ( screen . queryByTestId ( 'unifiedTabs_selectedTabContent' ) ) . not . toBeInTheDocument ( ) ;
454+ } ) ;
390455} ) ;
0 commit comments