From fa34ff03aed2afd72c2d0fa433c4efb4358705cf Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Tue, 12 Mar 2024 11:49:16 +0100 Subject: [PATCH] fix: broadcast channel state Signed-off-by: Camila Belo --- .../TechDocsAuthProvider.tsx | 4 ++- .../TechDocsReaderPage.test.tsx | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsAuthProvider.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsAuthProvider.tsx index dcd8324169..d248af6d1f 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsAuthProvider.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsAuthProvider.tsx @@ -53,7 +53,9 @@ export function TechDocsAuthProvider({ children }: { children: ReactNode }) { const app = useApp(); const { Progress } = app.getComponents(); - const [channel] = useState(new BroadcastChannel('techdocs-cookie-refresh')); + const [channel] = useState( + () => new BroadcastChannel('techdocs-cookie-refresh'), + ); const { loading, error, value, retry, refresh } = useTechDocsCookie(); diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.test.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.test.tsx index 3add949419..605decae12 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.test.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPage/TechDocsReaderPage.test.tsx @@ -115,8 +115,35 @@ const mountedRoutes = { describe('', () => { beforeEach(() => { + type Listener = (event: { data: any }) => void; + + global.BroadcastChannel = jest + .fn() + .mockImplementation((_channelName: string) => { + let listeners: Listener[] = []; + return { + postMessage: jest.fn((message: any) => { + listeners.forEach(listener => listener({ data: message })); + }), + addEventListener: jest.fn((event: string, listener: Listener) => { + if (event === 'message') { + listeners.push(listener); + } + }), + removeEventListener: jest.fn((event: string, listener: Listener) => { + if (event === 'message') { + listeners = listeners.filter(l => l !== listener); + } + }), + }; + }); + getEntityMetadata.mockResolvedValue(mockEntityMetadata); getTechDocsMetadata.mockResolvedValue(mockTechDocsMetadata); + getCookie.mockResolvedValue({ + // Expires in 10 minutes + expiresAt: new Date(Date.now() + 10 * 60 * 1000).toISOString(), + }); }); afterEach(() => {