Before, gradebook was reading config from `process.env` directly, which locked the app into using only static (build-time) configuration. In order to enable dynamic (runtime) configuration, we update gradebook to use frontend-platform's standard configuration interface: `mergeConfig()` and `getConfig()`. Bumps version from 1.5.0 to 1.6.0. (I would normally just do a patch release for a fix, but the version was hasn't been bumped for a while, so adding in full runtime configuration support seemed like it warranted a proper minor version bump.) Co-authored-by: Ghassan Maslamani <ghassan.maslamani@gmail.com>
71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
import React from 'react';
|
|
import ReactDOM from 'react-dom';
|
|
|
|
import {
|
|
APP_READY,
|
|
initialize,
|
|
mergeConfig,
|
|
subscribe,
|
|
} from '@edx/frontend-platform';
|
|
import { messages as headerMessages } from '@edx/frontend-component-header';
|
|
import { messages as footerMessages } from '@edx/frontend-component-footer';
|
|
|
|
import appMessages from './i18n';
|
|
import App from './App';
|
|
import '.';
|
|
|
|
jest.mock('react-dom', () => ({
|
|
render: jest.fn(),
|
|
}));
|
|
jest.mock('@edx/frontend-platform', () => ({
|
|
APP_READY: 'app-is-ready-key',
|
|
initialize: jest.fn(),
|
|
mergeConfig: jest.fn(),
|
|
subscribe: jest.fn(),
|
|
}));
|
|
jest.mock('@edx/frontend-component-header', () => ({
|
|
messages: ['some', 'messages'],
|
|
}));
|
|
jest.mock('@edx/frontend-component-footer', () => ({
|
|
messages: ['some', 'messages'],
|
|
}));
|
|
jest.mock('./App', () => 'App');
|
|
|
|
describe('app registry', () => {
|
|
let getElement;
|
|
|
|
beforeEach(() => {
|
|
getElement = window.document.getElementById;
|
|
window.document.getElementById = jest.fn(id => ({ id }));
|
|
});
|
|
afterAll(() => {
|
|
window.document.getElementById = getElement;
|
|
});
|
|
test('subscribe is called for APP_READY, linking App to root element', () => {
|
|
const callArgs = subscribe.mock.calls[0];
|
|
expect(callArgs[0]).toEqual(APP_READY);
|
|
expect(callArgs[1]()).toEqual(
|
|
ReactDOM.render(<App />, document.getElementById('root')),
|
|
);
|
|
});
|
|
test('initialize is called with requireAuthenticatedUser, messages, and a config handler', () => {
|
|
expect(initialize).toHaveBeenCalledWith({
|
|
messages: [appMessages, headerMessages, footerMessages],
|
|
requireAuthenticatedUser: true,
|
|
handlers: {
|
|
config: expect.any(Function),
|
|
},
|
|
});
|
|
});
|
|
test('initialize config loads LMS_BASE_URL from env', () => {
|
|
const oldEnv = process.env;
|
|
const initializeArg = initialize.mock.calls[0][0];
|
|
process.env = { ...oldEnv, LMS_BASE_URL: 'http://example.com/fake' };
|
|
initializeArg.handlers.config();
|
|
expect(mergeConfig).toHaveBeenCalledWith(
|
|
expect.objectContaining({ LMS_BASE_URL: 'http://example.com/fake' }),
|
|
);
|
|
process.env = oldEnv;
|
|
});
|
|
});
|