import { Record as ImmutableRecord, List as ImmutableList } from 'immutable'; import { ALERT_SHOW, ALERT_DISMISS, ALERT_CLEAR, } from 'soapbox/actions/alerts'; import { applyActions } from 'soapbox/test_helpers'; import reducer from '../alerts'; describe('alerts reducer', () => { it('should return the initial state', () => { expect(reducer(undefined, {})).toEqual(ImmutableList()); }); describe('ALERT_SHOW', () => { it('imports the alert', () => { const action = { type: ALERT_SHOW, title: 'alert_title', message: 'this is an alert message', }; const expected = [{ key: 0, message: 'this is an alert message', title: 'alert_title', }]; const result = reducer(undefined, action); expect(ImmutableRecord.isRecord(result.get(0))).toBe(true); expect(result.toJS()).toMatchObject(expected); }); }); describe('ALERT_CLEAR', () => { it('deletes the alerts', () => { const actions = [{ type: ALERT_SHOW, title: 'Oops!', message: 'Server is down', }, { type: ALERT_SHOW, title: 'Uh-oh!', message: 'Shit done fucked up', }, { type: ALERT_CLEAR, }]; const result = applyActions(undefined, actions, reducer); expect(result.isEmpty()).toBe(true); }); }); describe('ALERT_DISMISS', () => { it('deletes an individual alert', () => { const actions = [{ type: ALERT_SHOW, title: 'Oops!', message: 'Server is down', }, { type: ALERT_SHOW, title: 'Uh-oh!', message: 'Shit done fucked up', }, { type: ALERT_DISMISS, alert: { key: 0, }, }]; const result = applyActions(undefined, actions, reducer); expect(result.size).toEqual(1); expect(result.get(0).key).toEqual(1); }); }); });