123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- // TODO: add tests of extension alerts
- /* eslint-env jest */
- import {AlertTypes, AlertLevels} from '../../../src/lib/alerts/index.jsx';
- import alertsReducer from '../../../src/reducers/alerts';
- import {
- closeAlert,
- closeAlertWithId,
- filterInlineAlerts,
- filterPopupAlerts,
- showStandardAlert
- } from '../../../src/reducers/alerts';
- test('initialState', () => {
- let defaultState;
- /* alertsReducer(state, action) */
- expect(alertsReducer(defaultState, {type: 'anything'})).toBeDefined();
- expect(alertsReducer(defaultState, {type: 'anything'}).visible).toBe(true);
- expect(alertsReducer(defaultState, {type: 'anything'}).alertsList).toEqual([]);
- });
- test('create one standard alert', () => {
- let defaultState;
- const action = showStandardAlert('creating');
- const resultState = alertsReducer(defaultState, action);
- expect(resultState.alertsList.length).toBe(1);
- expect(resultState.alertsList[0].alertId).toBe('creating');
- expect(resultState.alertsList[0].alertType).toBe(AlertTypes.STANDARD);
- expect(resultState.alertsList[0].level).toBe(AlertLevels.SUCCESS);
- });
- test('add several standard alerts', () => {
- const initialState = {
- visible: true,
- alertsList: [
- {
- alertId: 'saving',
- alertType: AlertTypes.INLINE,
- level: AlertLevels.SUCCESS,
- content: null,
- iconURL: '/no_image_here.jpg'
- }
- ]
- };
- const action = showStandardAlert('creating');
- let resultState = alertsReducer(initialState, action);
- resultState = alertsReducer(resultState, action);
- resultState = alertsReducer(resultState, action);
- expect(resultState.alertsList.length).toBe(1);
- expect(resultState.alertsList[0].alertType).toBe(AlertTypes.STANDARD);
- expect(resultState.alertsList[0].iconURL).not.toBe('/no_image_here.jpg');
- expect(resultState.alertsList[0].alertId).toBe('creating');
- });
- test('create one inline alert message', () => {
- let defaultState;
- const action = showStandardAlert('saving');
- const resultState = alertsReducer(defaultState, action);
- expect(resultState.alertsList.length).toBe(1);
- expect(resultState.alertsList[0].alertId).toBe('saving');
- expect(resultState.alertsList[0].alertType).toBe(AlertTypes.INLINE);
- expect(resultState.alertsList[0].level).toBe(AlertLevels.INFO);
- });
- test('can close alerts by index', () => {
- const initialState = {
- visible: true,
- alertsList: [
- {
- alertId: 'saving',
- alertType: AlertTypes.INLINE,
- level: AlertLevels.SUCCESS,
- content: null,
- iconURL: '/no_image_here.jpg'
- }
- ]
- };
- const closeAction = closeAlert(0);
- let resultState = alertsReducer(initialState, closeAction);
- expect(resultState.alertsList.length).toBe(0);
- const createAction = showStandardAlert('creating');
- resultState = alertsReducer(resultState, createAction);
- expect(resultState.alertsList.length).toBe(1);
- resultState = alertsReducer(initialState, closeAction);
- expect(resultState.alertsList.length).toBe(0);
- resultState = alertsReducer(resultState, createAction);
- });
- test('can close a single alert by id', () => {
- const initialState = {
- visible: true,
- alertsList: [
- {alertId: 'saving'},
- {alertId: 'creating'},
- {alertId: 'saving'},
- {alertId: 'saving'}
- ]
- };
- const closeAction = closeAlertWithId('saving');
- let resultState = alertsReducer(initialState, closeAction);
- expect(resultState.alertsList.map(a => a.alertId)).toEqual([
- 'creating', 'saving', 'saving'
- ]);
- resultState = alertsReducer(resultState, closeAction);
- expect(resultState.alertsList.map(a => a.alertId)).toEqual([
- 'creating', 'saving'
- ]);
- resultState = alertsReducer(resultState, closeAction);
- expect(resultState.alertsList.map(a => a.alertId)).toEqual([
- 'creating'
- ]);
- resultState = alertsReducer(resultState, closeAction);
- expect(resultState.alertsList.map(a => a.alertId)).toEqual([
- 'creating'
- ]);
- });
- test('related alerts can clear each other', () => {
- const initialState = {
- visible: true,
- alertsList: [
- {
- alertId: 'saving',
- alertType: AlertTypes.INLINE,
- level: AlertLevels.SUCCESS,
- content: null,
- iconURL: '/no_image_here.jpg'
- },
- {
- alertId: 'creating',
- alertType: AlertTypes.STANDARD,
- level: AlertLevels.SUCCESS,
- content: null,
- iconURL: '/no_image_here.jpg'
- }
- ]
- };
- const action = showStandardAlert('saveSuccess');
- const resultState = alertsReducer(initialState, action);
- expect(resultState.alertsList.length).toBe(2);
- expect(resultState.alertsList[0].alertId).toBe('creating');
- expect(resultState.alertsList[1].alertId).toBe('saveSuccess');
- });
- test('several related alerts can be cleared at once', () => {
- const initialState = {
- visible: true,
- alertsList: []
- };
- const createAction = showStandardAlert('creating');
- let resultState = alertsReducer(initialState, createAction);
- resultState = alertsReducer(resultState, createAction);
- resultState = alertsReducer(resultState, createAction);
- const createSuccessAction = showStandardAlert('createSuccess');
- resultState = alertsReducer(resultState, createSuccessAction);
- expect(resultState.alertsList.length).toBe(1);
- expect(resultState.alertsList[0].alertId).toBe('createSuccess');
- });
- test('filterInlineAlerts only returns inline type alerts', () => {
- const alerts = [
- {
- alertId: 'extension',
- alertType: AlertTypes.EXTENSION
- },
- {
- alertId: 'inline',
- alertType: AlertTypes.INLINE
- },
- {
- alertId: 'standard',
- alertType: AlertTypes.STANDARD
- },
- {
- alertId: 'non-existent type',
- alertType: 'wirly-burly'
- }
- ];
- const filtered = filterInlineAlerts(alerts);
- expect(filtered.length).toEqual(1);
- expect(filtered[0].alertId).toEqual('inline');
- });
- test('filterPopupAlerts returns standard and extension type alerts', () => {
- const alerts = [
- {
- alertId: 'extension',
- alertType: AlertTypes.EXTENSION
- },
- {
- alertId: 'inline',
- alertType: AlertTypes.INLINE
- },
- {
- alertId: 'standard',
- alertType: AlertTypes.STANDARD
- },
- {
- alertId: 'non-existent type',
- alertType: 'wirly-burly'
- }
- ];
- const filtered = filterPopupAlerts(alerts);
- expect(filtered.length).toEqual(2);
- expect(filtered[0].alertId).toEqual('extension');
- expect(filtered[1].alertId).toEqual('standard');
- });
|