68 lines
2.0 KiB
JavaScript
68 lines
2.0 KiB
JavaScript
import {
|
|
APP_INIT_ERROR, APP_READY, subscribe,
|
|
} from '@edx/frontend-platform';
|
|
|
|
// Jest needs this for module resolution
|
|
import * as app from '.'; // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
|
|
// These need to be var not let so they get hoisted
|
|
// and can be used by jest.mock (which is also hoisted)
|
|
var mockRender; // eslint-disable-line no-var
|
|
var mockCreateRoot; // eslint-disable-line no-var
|
|
jest.mock('react-dom/client', () => {
|
|
mockRender = jest.fn();
|
|
mockCreateRoot = jest.fn(() => ({
|
|
render: mockRender,
|
|
}));
|
|
|
|
return ({
|
|
createRoot: mockCreateRoot,
|
|
});
|
|
});
|
|
|
|
jest.mock('@edx/frontend-platform', () => ({
|
|
APP_READY: 'app-is-ready-key',
|
|
APP_INIT_ERROR: 'app-init-error',
|
|
subscribe: jest.fn(),
|
|
initialize: jest.fn(),
|
|
mergeConfig: jest.fn(),
|
|
getConfig: () => ({
|
|
FAVICON_URL: 'favicon-url',
|
|
}),
|
|
ensureConfig: jest.fn(),
|
|
}));
|
|
|
|
jest.mock('./components/bulk-email-tool/BulkEmailTool', () => 'Bulk Email Tool');
|
|
jest.mock('./components/page-container/PageContainer', () => 'Page Container');
|
|
|
|
describe('app registry', () => {
|
|
let getElement;
|
|
|
|
beforeEach(() => {
|
|
mockCreateRoot.mockClear();
|
|
mockRender.mockClear();
|
|
|
|
getElement = window.document.getElementById;
|
|
window.document.getElementById = jest.fn(id => ({ id }));
|
|
});
|
|
afterAll(() => {
|
|
window.document.getElementById = getElement;
|
|
});
|
|
|
|
test('subscribe: APP_READY. links App to root element', () => {
|
|
const callArgs = subscribe.mock.calls[0];
|
|
expect(callArgs[0]).toEqual(APP_READY);
|
|
callArgs[1]();
|
|
const [rendered] = mockRender.mock.calls[0];
|
|
expect(rendered).toMatchSnapshot();
|
|
});
|
|
test('subscribe: APP_INIT_ERROR. snapshot: displays an ErrorPage to root element', () => {
|
|
const callArgs = subscribe.mock.calls[1];
|
|
expect(callArgs[0]).toEqual(APP_INIT_ERROR);
|
|
const error = { message: 'test-error-message' };
|
|
callArgs[1](error);
|
|
const [rendered] = mockRender.mock.calls[0];
|
|
expect(rendered).toMatchSnapshot();
|
|
});
|
|
});
|