diff --git a/.flowconfig b/.flowconfig index 612463ee..4f86f029 100644 --- a/.flowconfig +++ b/.flowconfig @@ -6,6 +6,7 @@ .*/node_modules/react-side-effect/.* .*/node_modules/fbjs/.* .*/node_modules/config-chain/.* +*.test.js [libs] diff --git a/frontend/stores/ErrorsStore.js b/frontend/stores/ErrorsStore.js new file mode 100644 index 00000000..abdc8eb6 --- /dev/null +++ b/frontend/stores/ErrorsStore.js @@ -0,0 +1,18 @@ +// @flow +import { observable, action } from 'mobx'; + +class UiStore { + @observable errors = observable.array([]); + + /* Actions */ + + @action add = (errorMessage: string): void => { + this.errors.push(errorMessage); + }; + + @action remove = (index: number): void => { + this.errors.splice(index, 1); + }; +} + +export default UiStore; diff --git a/frontend/stores/ErrorsStore.test.js b/frontend/stores/ErrorsStore.test.js new file mode 100644 index 00000000..b76de357 --- /dev/null +++ b/frontend/stores/ErrorsStore.test.js @@ -0,0 +1,27 @@ +/* eslint-disable */ +import ErrorsStore from './ErrorsStore'; + +// Actions +describe('ErrorsStore', () => { + let store; + + beforeEach(() => { + store = new ErrorsStore(); + }); + + test('#add should add errors', () => { + expect(store.errors.length).toBe(0); + store.add('first error'); + store.add('second error'); + expect(store.errors.length).toBe(2); + }); + + test('#remove should remove errors', () => { + store.add('first error'); + store.add('second error'); + expect(store.errors.length).toBe(2); + store.remove(0); + expect(store.errors.length).toBe(1); + expect(store.errors[0]).toBe('second error'); + }); +});