test: mock broadcast channel
Signed-off-by: Camila Belo <camilaibs@gmail.com>
This commit is contained in:
+2
-2
@@ -59,12 +59,12 @@ const mockTechDocsMetadata = {
|
||||
|
||||
const getEntityMetadata = jest.fn();
|
||||
const getTechDocsMetadata = jest.fn();
|
||||
const issueUserCookie = jest.fn();
|
||||
const getCookie = jest.fn();
|
||||
|
||||
const techdocsApiMock = {
|
||||
getEntityMetadata,
|
||||
getTechDocsMetadata,
|
||||
issueUserCookie,
|
||||
getCookie,
|
||||
};
|
||||
|
||||
const techdocsStorageApiMock: jest.Mocked<typeof techdocsStorageApiRef.T> = {
|
||||
|
||||
@@ -181,15 +181,17 @@ function TechDocsAuthProvider({ children }: { children: ReactNode }) {
|
||||
if (!value) return () => {};
|
||||
channel.postMessage({ action: 'COOKIE_REFRESHED', payload: value });
|
||||
let stopCookieRefresh = startCookieRefresh(value.expiresAt);
|
||||
channel.onmessage = event => {
|
||||
const handleMessage = (event: MessageEvent<any>): void => {
|
||||
const { action, payload } = event.data;
|
||||
if (action === 'COOKIE_REFRESHED') {
|
||||
stopCookieRefresh();
|
||||
stopCookieRefresh = startCookieRefresh(payload.expiresAt);
|
||||
}
|
||||
};
|
||||
channel.addEventListener('message', handleMessage);
|
||||
return () => {
|
||||
stopCookieRefresh();
|
||||
channel.removeEventListener('message', handleMessage);
|
||||
};
|
||||
}, [value, channel, startCookieRefresh]);
|
||||
|
||||
|
||||
@@ -17,3 +17,28 @@
|
||||
import '@testing-library/jest-dom';
|
||||
|
||||
Element.prototype.scrollIntoView = jest.fn();
|
||||
|
||||
type Listener = (event: { data: any }) => void;
|
||||
|
||||
global.BroadcastChannel = jest
|
||||
.fn()
|
||||
.mockImplementation((_channelName: string) => {
|
||||
let listeners: Listener[] = [];
|
||||
return {
|
||||
postMessage: jest.fn((message: any) => {
|
||||
// Simulate message event for all listeners
|
||||
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);
|
||||
}
|
||||
}),
|
||||
close: jest.fn(),
|
||||
};
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user