@@ -415,6 +415,172 @@ test(`Does not render ${styles.treeViewNode} element with ${styles.modifiers.cur
415415 expect ( treeViewNode ) . not . toHaveClass ( styles . modifiers . current ) ;
416416} ) ;
417417
418+ // Assisted by Cursor AI
419+ describe ( 'isDisabled prop' , ( ) => {
420+ const user = userEvent . setup ( ) ;
421+ const onSelectMock = jest . fn ( ) ;
422+ const onExpandMock = jest . fn ( ) ;
423+ const onCollapseMock = jest . fn ( ) ;
424+
425+ beforeEach ( ( ) => {
426+ jest . clearAllMocks ( ) ;
427+ } ) ;
428+
429+ test ( 'Renders button with disabled attribute and pf-m-disabled class when isDisabled is true' , ( ) => {
430+ render ( < TreeViewListItem isDisabled { ...requiredProps } /> ) ;
431+
432+ const button = screen . getByRole ( 'button' , { name : requiredProps . name } ) ;
433+ expect ( button ) . toBeDisabled ( ) ;
434+ expect ( button ) . toHaveClass ( 'pf-m-disabled' ) ;
435+ } ) ;
436+
437+ test ( 'Does not render button with disabled attribute when isDisabled is false' , ( ) => {
438+ render ( < TreeViewListItem isDisabled = { false } { ...requiredProps } /> ) ;
439+
440+ expect ( screen . getByRole ( 'button' , { name : requiredProps . name } ) ) . not . toBeDisabled ( ) ;
441+ } ) ;
442+
443+ test ( 'Renders selectable button with disabled attribute when isDisabled is true' , ( ) => {
444+ render ( < TreeViewListItem isSelectable isDisabled { ...requiredProps } /> ) ;
445+
446+ const treeViewNode = screen . getByRole ( 'treeitem' ) . querySelector ( `.${ styles . treeViewNode } ` ) ;
447+ const selectableButton = treeViewNode ?. querySelector ( 'button' ) ;
448+ expect ( selectableButton ) . toBeDisabled ( ) ;
449+ expect ( selectableButton ) . toHaveClass ( 'pf-m-disabled' ) ;
450+ } ) ;
451+
452+ test ( 'Does not call onSelect when isDisabled is true' , async ( ) => {
453+ render ( < TreeViewListItem isDisabled onSelect = { onSelectMock } { ...requiredProps } /> ) ;
454+
455+ await user . click ( screen . getByRole ( 'button' , { name : requiredProps . name } ) ) ;
456+
457+ expect ( onSelectMock ) . not . toHaveBeenCalled ( ) ;
458+ } ) ;
459+
460+ test ( 'Does not call onExpand when isDisabled is true and item is collapsed' , async ( ) => {
461+ render (
462+ < TreeViewListItem isDisabled onExpand = { onExpandMock } { ...requiredProps } >
463+ Content
464+ </ TreeViewListItem >
465+ ) ;
466+
467+ await user . click ( screen . getByRole ( 'button' , { name : requiredProps . name } ) ) ;
468+
469+ expect ( onExpandMock ) . not . toHaveBeenCalled ( ) ;
470+ } ) ;
471+
472+ test ( 'Does not call onCollapse when isDisabled is true and item is expanded' , async ( ) => {
473+ render (
474+ < TreeViewListItem isDisabled isExpanded onCollapse = { onCollapseMock } { ...requiredProps } >
475+ Content
476+ </ TreeViewListItem >
477+ ) ;
478+
479+ await user . click ( screen . getByRole ( 'button' , { name : requiredProps . name } ) ) ;
480+
481+ expect ( onCollapseMock ) . not . toHaveBeenCalled ( ) ;
482+ } ) ;
483+ } ) ;
484+
485+ // Assisted by Cursor AI
486+ describe ( 'isToggleDisabled prop' , ( ) => {
487+ const user = userEvent . setup ( ) ;
488+ const onExpandMock = jest . fn ( ) ;
489+ const onCollapseMock = jest . fn ( ) ;
490+
491+ beforeEach ( ( ) => {
492+ jest . clearAllMocks ( ) ;
493+ } ) ;
494+
495+ test ( 'Renders toggle button with disabled attribute and pf-m-disabled class when isToggleDisabled is true and hasCheckbox is passed' , ( ) => {
496+ render (
497+ < TreeViewListItem hasCheckbox isToggleDisabled { ...requiredProps } >
498+ Content
499+ </ TreeViewListItem >
500+ ) ;
501+
502+ const toggle = screen . getByText ( requiredProps . name ) . previousElementSibling ?. previousElementSibling ;
503+ expect ( toggle ) . toBeDisabled ( ) ;
504+ expect ( toggle ) . toHaveClass ( 'pf-m-disabled' ) ;
505+ } ) ;
506+
507+ test ( 'Renders toggle button with disabled attribute and pf-m-disabled class when isToggleDisabled is true and isSelectable is passed' , ( ) => {
508+ render (
509+ < TreeViewListItem isSelectable isToggleDisabled { ...requiredProps } >
510+ Content
511+ </ TreeViewListItem >
512+ ) ;
513+
514+ const toggle = screen . getByText ( requiredProps . name ) . previousElementSibling ;
515+ expect ( toggle ) . toBeDisabled ( ) ;
516+ expect ( toggle ) . toHaveClass ( 'pf-m-disabled' ) ;
517+ } ) ;
518+
519+ test ( 'Does not render toggle span with disabled attribute when isToggleDisabled is true (toggle is span by default)' , ( ) => {
520+ render (
521+ < TreeViewListItem isToggleDisabled { ...requiredProps } >
522+ Content
523+ </ TreeViewListItem >
524+ ) ;
525+
526+ const toggle = screen . getByText ( requiredProps . name ) . previousElementSibling ;
527+ expect ( toggle ?. tagName ) . toBe ( 'SPAN' ) ;
528+ expect ( toggle ) . not . toHaveAttribute ( 'disabled' ) ;
529+ } ) ;
530+
531+ test ( 'Does not call onExpand when isToggleDisabled is true and hasCheckbox is passed' , async ( ) => {
532+ render (
533+ < TreeViewListItem hasCheckbox isToggleDisabled onExpand = { onExpandMock } { ...requiredProps } >
534+ Content
535+ </ TreeViewListItem >
536+ ) ;
537+
538+ const toggle = screen . getByText ( requiredProps . name ) . previousElementSibling ?. previousElementSibling ;
539+ await user . click ( toggle as Element ) ;
540+
541+ expect ( onExpandMock ) . not . toHaveBeenCalled ( ) ;
542+ } ) ;
543+
544+ test ( 'Does not call onCollapse when isToggleDisabled is true and hasCheckbox is passed' , async ( ) => {
545+ render (
546+ < TreeViewListItem hasCheckbox isToggleDisabled isExpanded onCollapse = { onCollapseMock } { ...requiredProps } >
547+ Content
548+ </ TreeViewListItem >
549+ ) ;
550+
551+ const toggle = screen . getByText ( requiredProps . name ) . previousElementSibling ?. previousElementSibling ;
552+ await user . click ( toggle as Element ) ;
553+
554+ expect ( onCollapseMock ) . not . toHaveBeenCalled ( ) ;
555+ } ) ;
556+
557+ test ( 'Does not call onExpand when isToggleDisabled is true and isSelectable is passed' , async ( ) => {
558+ render (
559+ < TreeViewListItem isSelectable isToggleDisabled onExpand = { onExpandMock } { ...requiredProps } >
560+ Content
561+ </ TreeViewListItem >
562+ ) ;
563+
564+ const toggle = screen . getByText ( requiredProps . name ) . previousElementSibling ;
565+ await user . click ( toggle as Element ) ;
566+
567+ expect ( onExpandMock ) . not . toHaveBeenCalled ( ) ;
568+ } ) ;
569+
570+ test ( 'Does not call onCollapse when isToggleDisabled is true and isSelectable is passed' , async ( ) => {
571+ render (
572+ < TreeViewListItem isSelectable isToggleDisabled isExpanded onCollapse = { onCollapseMock } { ...requiredProps } >
573+ Content
574+ </ TreeViewListItem >
575+ ) ;
576+
577+ const toggle = screen . getByText ( requiredProps . name ) . previousElementSibling ;
578+ await user . click ( toggle as Element ) ;
579+
580+ expect ( onCollapseMock ) . not . toHaveBeenCalled ( ) ;
581+ } ) ;
582+ } ) ;
583+
418584describe ( 'Callback props' , ( ) => {
419585 const user = userEvent . setup ( ) ;
420586 const compareItemsMock = jest . fn ( ) ;
0 commit comments