From 78c81aeaf4f538ae2419226490a5108036eab15f Mon Sep 17 00:00:00 2001 From: David Jay Date: Wed, 14 Dec 2016 19:30:59 -0500 Subject: [PATCH] Adding asset reducer. --- client/coral-admin/src/actions/assets.js | 0 client/coral-admin/src/reducers/assets.js | 20 +++++++++++ tests/client/coral-admin/reducers/assets.js | 39 +++++++++++++++++++++ 3 files changed, 59 insertions(+) delete mode 100644 client/coral-admin/src/actions/assets.js create mode 100644 client/coral-admin/src/reducers/assets.js create mode 100644 tests/client/coral-admin/reducers/assets.js diff --git a/client/coral-admin/src/actions/assets.js b/client/coral-admin/src/actions/assets.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/client/coral-admin/src/reducers/assets.js b/client/coral-admin/src/reducers/assets.js new file mode 100644 index 000000000..bdd1bcaf9 --- /dev/null +++ b/client/coral-admin/src/reducers/assets.js @@ -0,0 +1,20 @@ +import {Map, List, fromJS} from 'immutable'; + +const initialState = Map({ + byId: Map(), + ids: List() +}); + +export default (state = initialState, action) => { + switch (action.type) { + case 'ASSETS_FETCH_SUCCESS': return replaceAssets(action, state); + default: return state; + } +}; + +const replaceAssets = (action, state) => { + const assets = fromJS(action.assets.reduce((prev, curr) => { prev[curr.id] = curr; return prev; }, {})); + return state.set('byId', assets) + .set('count', action.count) + .set('ids', List(assets.keys())); +}; diff --git a/tests/client/coral-admin/reducers/assets.js b/tests/client/coral-admin/reducers/assets.js new file mode 100644 index 000000000..cf3e0dac4 --- /dev/null +++ b/tests/client/coral-admin/reducers/assets.js @@ -0,0 +1,39 @@ +import {Map} from 'immutable'; +import {expect} from 'chai'; +import assetsReducer from '../../../../client/coral-admin/src/reducers/assets'; + +describe ('assetsReducer', () => { + describe('ASSETS_FETCH_SUCCESS', () => { + it('should replace the existing assets', () => { + const action = { + type: 'ASSETS_FETCH_SUCCESS', + count: 200, + assets: [ + { + id: '123', + url: 'http://test.com', + closedAt: 'tomorrow' + }, + { + id: '456', + url: 'http://test2.com', + closedAt: 'thursday' + }, + ] + }; + const store = new Map({}); + const result = assetsReducer(store, action); + console.log(result.getIn(['byId', '123']).toJS()); + expect(result.getIn(['byId', '123']).toJS()).to.deep.equal({ + url: 'http://test.com', + closedAt: 'tomorrow', + id: '123' + }); + expect(result.getIn(['ids']).toJS()).to.deep.equal([ + '123', + '456' + ]); + expect(result.getIn(['count'])).to.equal(200); + }); + }); +});