Spaces:
Runtime error
Runtime error
| // TODO: add tests of extension alerts | |
| /* eslint-env jest */ | |
| import {AlertTypes, AlertLevels} from '../../../src/lib/alerts/index.jsx'; | |
| import alertsReducer, { | |
| 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'); | |
| }); | |