11import { render , screen , waitFor , act } from '@testing-library/react' ;
22import userEvent from '@testing-library/user-event' ;
3+ // Import from the sub-path (not the barrel) so this suite — which mocks
4+ // @backstage /core-plugin-api — doesn't transitively load @backstage/test-utils'
5+ // TestApiProvider (which runs attachComponentData at import and would break).
6+ import { createQueryClientWrapper } from '@openchoreo/test-utils/src/queryClientBareWrapper' ;
37import { CellDiagram } from './CellDiagram' ;
48
9+ // useCellEnvironments is now backed by useOpenChoreoQuery, which needs a
10+ // QueryClientProvider in the tree. Wrap in a fresh, retry-free cache each render
11+ // (a bare provider, not TestApiProvider — this suite mocks core-plugin-api and
12+ // supplies APIs through the useApi mock, so TestApiProvider isn't wanted).
13+ const renderCell = ( ) =>
14+ render ( < CellDiagram /> , { wrapper : createQueryClientWrapper ( ) } ) ;
15+
516// ---- Mocks ----
617
718jest . mock ( '@backstage/plugin-catalog-react' , ( ) => ( {
@@ -46,11 +57,19 @@ jest.mock('@openchoreo/backstage-design-system', () => ({
4657jest . mock ( '@openchoreo/backstage-plugin-react' , ( ) => {
4758 // eslint-disable-next-line @typescript-eslint/no-require-imports
4859 const React = require ( 'react' ) ;
60+ // Keep the real caching wrapper (useCellEnvironments now calls
61+ // useOpenChoreoQuery). Pull it from its own module rather than the barrel so
62+ // we don't drag in the whole package (which imports the mocked core-plugin-api
63+ // and breaks on attachComponentData).
64+ const { useOpenChoreoQuery } =
65+ // eslint-disable-next-line @typescript-eslint/no-require-imports
66+ jest . requireActual ( '@openchoreo/backstage-plugin-react/src/hooks/useOpenChoreoQuery' ) ;
4967 // Each recompute advances "now" (mirroring the real calculateTimeRange,
5068 // which uses `new Date()`), so the Refresh button produces a new fetch key
5169 // and triggers a refetch.
5270 let rangeCall = 0 ;
5371 return {
72+ useOpenChoreoQuery,
5473 EmptyState : ( { title, description, action } : any ) => (
5574 < div data-testid = "empty-state" >
5675 < div > { title } </ div >
@@ -408,7 +427,7 @@ describe('CellDiagram', () => {
408427 const mockClient = setupMockClient ( ) ;
409428
410429 await act ( async ( ) => {
411- render ( < CellDiagram /> ) ;
430+ renderCell ( ) ;
412431 } ) ;
413432
414433 await waitFor ( ( ) => {
@@ -438,7 +457,7 @@ describe('CellDiagram', () => {
438457 const mockClient = setupMockClient ( ) ;
439458
440459 await act ( async ( ) => {
441- render ( < CellDiagram /> ) ;
460+ renderCell ( ) ;
442461 } ) ;
443462
444463 await waitFor ( ( ) => {
@@ -480,7 +499,7 @@ describe('CellDiagram', () => {
480499 setupMockClient ( ) ;
481500
482501 await act ( async ( ) => {
483- render ( < CellDiagram /> ) ;
502+ renderCell ( ) ;
484503 } ) ;
485504
486505 await waitFor ( ( ) => {
@@ -522,7 +541,7 @@ describe('CellDiagram', () => {
522541 setupMockClient ( ) ;
523542
524543 await act ( async ( ) => {
525- render ( < CellDiagram /> ) ;
544+ renderCell ( ) ;
526545 } ) ;
527546
528547 await waitFor ( ( ) => {
@@ -570,7 +589,7 @@ describe('CellDiagram', () => {
570589 } ) ;
571590
572591 await act ( async ( ) => {
573- render ( < CellDiagram /> ) ;
592+ renderCell ( ) ;
574593 } ) ;
575594
576595 await waitFor ( ( ) => {
@@ -615,7 +634,7 @@ describe('CellDiagram', () => {
615634 } ) ;
616635
617636 await act ( async ( ) => {
618- render ( < CellDiagram /> ) ;
637+ renderCell ( ) ;
619638 } ) ;
620639
621640 const toggle = screen . getByRole ( 'switch' , {
@@ -658,7 +677,7 @@ describe('CellDiagram', () => {
658677 } ) ;
659678
660679 await act ( async ( ) => {
661- render ( < CellDiagram /> ) ;
680+ renderCell ( ) ;
662681 } ) ;
663682
664683 // Toggle OFF → architecture
@@ -706,7 +725,7 @@ describe('CellDiagram', () => {
706725 } ) ;
707726
708727 await act ( async ( ) => {
709- render ( < CellDiagram /> ) ;
728+ renderCell ( ) ;
710729 } ) ;
711730
712731 const toggle = screen . getByRole ( 'switch' , {
@@ -728,7 +747,7 @@ describe('CellDiagram', () => {
728747 const mockClient = setupMockClient ( ) ;
729748
730749 await act ( async ( ) => {
731- render ( < CellDiagram /> ) ;
750+ renderCell ( ) ;
732751 } ) ;
733752
734753 await waitFor ( ( ) => {
@@ -768,7 +787,7 @@ describe('CellDiagram', () => {
768787 } ) ;
769788
770789 await act ( async ( ) => {
771- render ( < CellDiagram /> ) ;
790+ renderCell ( ) ;
772791 } ) ;
773792
774793 await waitFor ( ( ) => {
@@ -795,7 +814,7 @@ describe('CellDiagram', () => {
795814 } ) ;
796815
797816 await act ( async ( ) => {
798- render ( < CellDiagram /> ) ;
817+ renderCell ( ) ;
799818 } ) ;
800819
801820 await waitFor ( ( ) => {
0 commit comments