* clean up and test segment integration * add tests for action utils * add tests for store aggregator and utils * clean up un-used paths in thunkAction testUtils * clean up filter reducer coverage * add filter reducer tests for filterMenu actions * clean up grades selectors coverage * separate App and add unit tests * ignore external files in coverage analysis * remove old/unused code from StrictDict and clean up tests * clean up FileUploadForm coverage * more cleanup for StrictDict tests * clean up GradesTab test coverage * clean up GradesTab coverage * ignore reducer-mapping for unit-test coverage * clean up AssignmentFilter test coverage * add index-level test coverage * temp remove snapshots * re-add App snapshot * v1.4.41
100 lines
3.4 KiB
JavaScript
100 lines
3.4 KiB
JavaScript
import { applyMiddleware } from 'redux';
|
|
import thunkMiddleware from 'redux-thunk';
|
|
import { composeWithDevTools } from 'redux-devtools-extension/logOnlyInProduction';
|
|
import { createLogger } from 'redux-logger';
|
|
import { createMiddleware } from 'redux-beacon';
|
|
import Segment from '@redux-beacon/segment';
|
|
|
|
import actions from './actions';
|
|
import selectors from './selectors';
|
|
import reducers from './reducers';
|
|
import eventsMap from './services/segment/mapping';
|
|
import { configuration } from '../config';
|
|
|
|
import exportedStore, { createStore } from './store';
|
|
|
|
jest.mock('./reducers', () => 'REDUCER');
|
|
jest.mock('./actions', () => 'ACTIONS');
|
|
jest.mock('./selectors', () => 'SELECTORS');
|
|
jest.mock('./services/segment/mapping', () => 'EVENTS MAP');
|
|
|
|
jest.mock('redux-logger', () => ({
|
|
createLogger: () => 'logger',
|
|
}));
|
|
jest.mock('redux-thunk', () => 'thunkMiddleware');
|
|
jest.mock('../config', () => ({
|
|
configuration: {
|
|
SEGMENT_KEY: 'a-fake-segment-key',
|
|
},
|
|
}));
|
|
jest.mock('redux-beacon', () => ({
|
|
createMiddleware: jest.fn((map, model) => ({ map, model })),
|
|
}));
|
|
jest.mock('@redux-beacon/segment', () => () => 'Segment');
|
|
jest.mock('redux', () => ({
|
|
applyMiddleware: (...middleware) => ({ applied: middleware }),
|
|
createStore: (reducer, middleware) => ({ reducer, middleware }),
|
|
}));
|
|
jest.mock('redux-devtools-extension/logOnlyInProduction', () => ({
|
|
composeWithDevTools: (middleware) => ({ withDevTools: middleware }),
|
|
}));
|
|
|
|
describe('store aggregator module', () => {
|
|
describe('exported store', () => {
|
|
it('is generated by createStore', () => {
|
|
expect(exportedStore).toEqual(createStore());
|
|
});
|
|
it('creates store with connected reducers', () => {
|
|
expect(createStore().reducer).toEqual(reducers);
|
|
});
|
|
describe('middleware', () => {
|
|
describe('if SEGMENT_KEY is in the configuration', () => {
|
|
it('also adds segment middleware from eventMap', () => {
|
|
expect(createStore().middleware).toEqual(
|
|
composeWithDevTools(applyMiddleware(
|
|
thunkMiddleware,
|
|
createLogger(),
|
|
createMiddleware(eventsMap, Segment()),
|
|
)),
|
|
);
|
|
});
|
|
});
|
|
describe('if no SEGMENT_KEY', () => {
|
|
const key = configuration.SEGMENT_KEY;
|
|
beforeEach(() => {
|
|
configuration.SEGMENT_KEY = false;
|
|
});
|
|
it('exports thunk and logger middleware, composed and applied with dev tools', () => {
|
|
expect(createStore().middleware).toEqual(
|
|
composeWithDevTools(applyMiddleware(thunkMiddleware, createLogger())),
|
|
);
|
|
});
|
|
afterEach(() => {
|
|
configuration.SEGMENT_KEY = key;
|
|
});
|
|
});
|
|
});
|
|
});
|
|
describe('dev exposed tools', () => {
|
|
beforeEach(() => {
|
|
window.store = undefined;
|
|
window.actions = undefined;
|
|
window.selectors = undefined;
|
|
});
|
|
it('exposes redux tools if in development env', () => {
|
|
process.env.NODE_ENV = 'development';
|
|
const store = createStore();
|
|
expect(window.store).toEqual(store);
|
|
expect(window.actions).toEqual(actions);
|
|
expect(window.selectors).toEqual(selectors);
|
|
});
|
|
it('does not expose redux tools if in production env', () => {
|
|
process.env.NODE_ENV = 'production';
|
|
createStore();
|
|
expect(window.store).toEqual(undefined);
|
|
expect(window.actions).toEqual(undefined);
|
|
expect(window.selectors).toEqual(undefined);
|
|
});
|
|
});
|
|
});
|