From cc25a03f8fbc3b2db14aa3db2e6b1e68d87da212 Mon Sep 17 00:00:00 2001 From: Lorenzo Natali Date: Tue, 21 Mar 2017 18:49:51 +0100 Subject: [PATCH] add tests for PluginUtils --- web/client/utils/PluginsUtils.js | 6 ++ .../utils/__tests__/PluginUtils-test.js | 76 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 web/client/utils/__tests__/PluginUtils-test.js diff --git a/web/client/utils/PluginsUtils.js b/web/client/utils/PluginsUtils.js index 09e87849df..3a8dddc0e7 100644 --- a/web/client/utils/PluginsUtils.js +++ b/web/client/utils/PluginsUtils.js @@ -122,6 +122,12 @@ const getReducers = (plugins) => Object.keys(plugins).map((name) => plugins[name const getEpics = (plugins) => Object.keys(plugins).map((name) => plugins[name].epics) .reduce((previous, current) => assign({}, previous, current), {}); const PluginsUtils = { + /** + * Produces the reducers from the plugins, combined with other plugins + * @param {array} plugins the plugins + * @param {array} reducers other plugins + * @returns {function} a reducer made from the plugins' reducers and the reducers passed as 2nd parameter + */ combineReducers: (plugins, reducers) => { const pluginsReducers = getReducers(plugins); return combineReducers(assign({}, reducers, pluginsReducers)); diff --git a/web/client/utils/__tests__/PluginUtils-test.js b/web/client/utils/__tests__/PluginUtils-test.js new file mode 100644 index 0000000000..6a61940c3a --- /dev/null +++ b/web/client/utils/__tests__/PluginUtils-test.js @@ -0,0 +1,76 @@ +/** + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ +const expect = require('expect'); +const PluginsUtils = require('../PluginsUtils'); +const assign = require('object-assign'); + +describe('PluginsUtils', () => { + beforeEach( () => { + + }); + afterEach((done) => { + document.body.innerHTML = ''; + + setTimeout(done); + }); + it('combineReducers', () => { + const P1 = { + reducers: { + reducer1: () => {} + } + }; + + const P2 = { + reducers: { + reducer1: (state = {}) => assign({}, state, { A: "A"}), + reducer2: (state = {}) => state + } + }; + const reducers = { + reducer3: (state = {}) => state + }; + const spyNo = expect.spyOn(P1.reducers, "reducer1"); + const finalReducer = PluginsUtils.combineReducers([P1, P2], reducers); + const state = finalReducer(); + expect(state.reducer1).toExist(); + expect(state.reducer1.A).toBe("A"); + + // test overriding + expect(spyNo.calls.length).toBe(0); + }); + it('getPluginDescriptor', () => { + const P1 = assign( () => {}, { + reducers: { + reducer1: () => {} + } + }); + const item = { + test: "TEST" + }; + const P2 = assign( () => {}, { + P1: item, + reducers: { + reducer1: () => ({ A: "A"}), + reducer2: () => {} + } + }); + const cfg = { + test: "TEST" + }; + let desc1 = PluginsUtils.getPluginDescriptor({}, {P1Plugin: P1, P2Plugin: P2}, [{name: "P1", cfg}, "P2"], "P1" ); + expect(desc1).toExist(); + expect(desc1.id).toBe("P1"); + expect(desc1.name).toBe("P1"); + expect(desc1.cfg).toExist(cfg); + expect(desc1.items.length).toBe(1); + expect(desc1.items[0].test).toBe(item.test); + expect(desc1.items[0].cfg).toExist(); + + }); + +});