import { cloneDeep } from 'lodash'; import { describe, expect, it, vi } from 'vitest'; import { AlertModel, AlertTypes } from '../types/AlertStoreModel'; import RootState from '../types/RootStateModel'; import { CmsStore, storeConfig } from '../index'; import { CmsError } from '../../api/errors'; vi.useFakeTimers(); vi.spyOn(global, 'setTimeout'); describe('Alerts store', () => { function createLocalStore(): CmsStore { return new CmsStore(cloneDeep(storeConfig)); } it('should add and remove various alerts', () => { const store = createLocalStore(); expect(store.state.alerts.all).toEqual([]); store.dispatch('alerts/addSuccess', 'Success message'); store.dispatch('alerts/addWarning', 'Warning message'); store.dispatch('alerts/addInfo', 'Info message'); store.dispatch('alerts/addCmsError', new CmsError('Danger message', 'Er is iets fout gegaan', 400, 3012)); expect(store.state.alerts.all).toEqual([ { friendlyMessageHtml: 'Success message', type: AlertTypes.Success }, { friendlyMessageHtml: 'Warning message', type: AlertTypes.Warning }, { friendlyMessageHtml: 'Info message', type: AlertTypes.Info }, { friendlyMessageHtml: 'Er is iets fout gegaan', technicalMessage: 'Danger message', type: AlertTypes.Danger, errorCode: 3012 } ]); store.dispatch('alerts/remove', store.state.alerts.all.filter((alert: AlertModel) => alert.type === AlertTypes.Warning).shift()); expect(store.state.alerts.all).toEqual([ { friendlyMessageHtml: 'Success message', type: AlertTypes.Success }, { friendlyMessageHtml: 'Info message', type: AlertTypes.Info }, { friendlyMessageHtml: 'Er is iets fout gegaan', technicalMessage: 'Danger message', type: AlertTypes.Danger, errorCode: 3012 } ]); }); it('should auto remove messages every 10 seconds', () => { const store = createLocalStore(); expect(store.state.alerts.all).toEqual([]); store.dispatch('alerts/addSuccess', 'Success message'); store.dispatch('alerts/addWarning', 'Warning message'); store.dispatch('alerts/addInfo', 'Info message'); store.dispatch('alerts/addCmsError', new CmsError('Danger message', 'Er is iets fout gegaan', 400, 3012)); expect(store.state.alerts.all).toEqual([ { friendlyMessageHtml: 'Success message', type: AlertTypes.Success }, { friendlyMessageHtml: 'Warning message', type: AlertTypes.Warning }, { friendlyMessageHtml: 'Info message', type: AlertTypes.Info }, { friendlyMessageHtml: 'Er is iets fout gegaan', technicalMessage: 'Danger message', type: AlertTypes.Danger, errorCode: 3012 } ]); expect(setTimeout).toHaveBeenCalledTimes(4); expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 10 * 1000); vi.runAllTimers(); expect(store.state.alerts.all).toEqual([]); }); });