aboutsummaryrefslogtreecommitdiffstats
path: root/web/src/js/__tests__/ducks
diff options
context:
space:
mode:
Diffstat (limited to 'web/src/js/__tests__/ducks')
-rw-r--r--web/src/js/__tests__/ducks/flowView.js67
-rw-r--r--web/src/js/__tests__/ducks/flows.js30
-rw-r--r--web/src/js/__tests__/ducks/tutils.js12
-rw-r--r--web/src/js/__tests__/ducks/ui.js66
-rw-r--r--web/src/js/__tests__/ducks/utils/list.js2
-rw-r--r--web/src/js/__tests__/ducks/utils/view.js14
6 files changed, 150 insertions, 41 deletions
diff --git a/web/src/js/__tests__/ducks/flowView.js b/web/src/js/__tests__/ducks/flowView.js
new file mode 100644
index 00000000..d5d9a6d9
--- /dev/null
+++ b/web/src/js/__tests__/ducks/flowView.js
@@ -0,0 +1,67 @@
+jest.unmock('../../ducks/flows')
+jest.unmock('../../ducks/flowView')
+jest.unmock('../../ducks/utils/view')
+jest.unmock('../../ducks/utils/list')
+jest.unmock('./tutils')
+
+import { createStore } from './tutils'
+
+import flows, * as flowActions from '../../ducks/flows'
+import flowView, * as flowViewActions from '../../ducks/flowView'
+
+
+function testStore() {
+ let store = createStore({
+ flows,
+ flowView
+ })
+ for (let i of [1, 2, 3, 4]) {
+ store.dispatch(
+ flowActions.addFlow({ id: i })
+ )
+ }
+ return store
+}
+
+describe('select relative', () => {
+
+ function testSelect(start, relative, result) {
+ const store = testStore()
+ store.dispatch(flowActions.select(start))
+ expect(store.getState().flows.selected).toEqual(start ? [start] : [])
+ store.dispatch(flowViewActions.selectRelative(relative))
+ expect(store.getState().flows.selected).toEqual([result])
+ }
+
+ describe('previous', () => {
+
+ it('should select the previous flow', () => {
+ testSelect(3, -1, 2)
+ })
+
+ it('should not changed when first flow is selected', () => {
+ testSelect(1, -1, 1)
+ })
+
+ it('should select first flow if no flow is selected', () => {
+ testSelect(undefined, -1, 1)
+ })
+
+ })
+
+ describe('next', () => {
+
+ it('should select the next flow', () => {
+ testSelect(2, 1, 3)
+ })
+
+ it('should not changed when last flow is selected', () => {
+ testSelect(4, 1, 4)
+ })
+
+ it('should select last flow if no flow is selected', () => {
+ testSelect(undefined, 1, 4)
+ })
+
+ })
+})
diff --git a/web/src/js/__tests__/ducks/flows.js b/web/src/js/__tests__/ducks/flows.js
new file mode 100644
index 00000000..2b261cb1
--- /dev/null
+++ b/web/src/js/__tests__/ducks/flows.js
@@ -0,0 +1,30 @@
+jest.unmock('../../ducks/flows');
+
+import reduceFlows, * as flowActions from '../../ducks/flows'
+
+
+describe('select flow', () => {
+
+ let state = reduceFlows(undefined, {})
+ for (let i of [1, 2, 3, 4]) {
+ state = reduceFlows(state, flowActions.addFlow({ id: i }))
+ }
+
+ it('should be possible to select a single flow', () => {
+ expect(reduceFlows(state, flowActions.select(2))).toEqual(
+ {
+ ...state,
+ selected: [2],
+ }
+ )
+ })
+
+ it('should be possible to deselect a flow', () => {
+ expect(reduceFlows({ ...state, selected: [1] }, flowActions.select())).toEqual(
+ {
+ ...state,
+ selected: [],
+ }
+ )
+ })
+})
diff --git a/web/src/js/__tests__/ducks/tutils.js b/web/src/js/__tests__/ducks/tutils.js
new file mode 100644
index 00000000..90a21b78
--- /dev/null
+++ b/web/src/js/__tests__/ducks/tutils.js
@@ -0,0 +1,12 @@
+jest.unmock('redux')
+jest.unmock('redux-thunk')
+
+import { combineReducers, applyMiddleware, createStore as createReduxStore } from 'redux'
+import thunk from 'redux-thunk'
+
+export function createStore(parts) {
+ return createReduxStore(
+ combineReducers(parts),
+ applyMiddleware(...[thunk])
+ )
+}
diff --git a/web/src/js/__tests__/ducks/ui.js b/web/src/js/__tests__/ducks/ui.js
index 2388a9ad..d3242815 100644
--- a/web/src/js/__tests__/ducks/ui.js
+++ b/web/src/js/__tests__/ducks/ui.js
@@ -1,36 +1,36 @@
-jest.unmock("../../ducks/ui");
-// @todo fix it ( this is why I don't like to add tests until our architecture is stable :P )
-jest.unmock("../../ducks/views/main");
+jest.unmock('../../ducks/ui')
+jest.unmock('../../ducks/flows')
-import reducer, { setActiveMenu } from '../../ducks/ui';
-import { SELECT } from '../../ducks/views/main';
+import reducer, { setActiveMenu } from '../../ducks/ui'
+import * as flowActions from '../../ducks/flows'
-describe("ui reducer", () => {
- it("should return the initial state", () => {
- expect(reducer(undefined, {})).toEqual({ activeMenu: 'Start'})
- }),
- it("should return the state for view", () => {
- expect(reducer(undefined, setActiveMenu('View'))).toEqual({ activeMenu: 'View'})
- }),
- it("should change the state to Start when deselecting a flow and we a currently at the flow tab", () => {
- expect(reducer({activeMenu: 'Flow'},
- { type: SELECT,
- currentSelection: '1',
- flowId : undefined
- })).toEqual({ activeMenu: 'Start'})
- }),
- it("should change the state to Flow when we selected a flow and no flow was selected before", () => {
- expect(reducer({activeMenu: 'Start'},
- { type: SELECT,
- currentSelection: undefined,
- flowId : '1'
- })).toEqual({ activeMenu: 'Flow'})
- }),
- it("should not change the state to Flow when OPTIONS tab is selected and we selected a flow and a flow as selected before", () => {
- expect(reducer({activeMenu: 'Options'},
- { type: SELECT,
- currentSelection: '1',
- flowId : '2'
- })).toEqual({ activeMenu: 'Options'})
+describe('ui reducer', () => {
+ it('should return the initial state', () => {
+ expect(reducer(undefined, {}).activeMenu).toEqual('Start')
})
-});
+
+ it('should return the state for view', () => {
+ expect(reducer(undefined, setActiveMenu('View')).activeMenu).toEqual('View')
+ })
+
+ it('should change the state to Start when deselecting a flow and we a currently at the flow tab', () => {
+ expect(reducer(
+ { activeMenu: 'Flow', isFlowSelected: true },
+ flowActions.select(undefined)).activeMenu
+ ).toEqual('Start')
+ })
+
+ it('should change the state to Flow when we selected a flow and no flow was selected before', () => {
+ expect(reducer(
+ { activeMenu: 'Start', isFlowSelected: false },
+ flowActions.select(1)).activeMenu
+ ).toEqual('Flow')
+ })
+
+ it('should not change the state to Flow when OPTIONS tab is selected and we selected a flow and a flow as selected before', () => {
+ expect(reducer(
+ { activeMenu: 'Options', isFlowSelected: true },
+ flowActions.select(1)
+ ).activeMenu).toEqual('Options')
+ })
+})
diff --git a/web/src/js/__tests__/ducks/utils/list.js b/web/src/js/__tests__/ducks/utils/list.js
index 8cae91ec..72d162f2 100644
--- a/web/src/js/__tests__/ducks/utils/list.js
+++ b/web/src/js/__tests__/ducks/utils/list.js
@@ -27,7 +27,7 @@ describe('list reduce', () => {
{ id: 1, val: 1 },
{ id: 2, val: 3 }
])
- expect(reduce(state, list.update(2, { id: 2, val: 3 }))).toEqual(result)
+ expect(reduce(state, list.update({ id: 2, val: 3 }))).toEqual(result)
})
it('should remove item', () => {
diff --git a/web/src/js/__tests__/ducks/utils/view.js b/web/src/js/__tests__/ducks/utils/view.js
index 1b07f723..f0b147da 100644
--- a/web/src/js/__tests__/ducks/utils/view.js
+++ b/web/src/js/__tests__/ducks/utils/view.js
@@ -14,7 +14,7 @@ describe('view reduce', () => {
const result = createState([
{ id: 1 }
])
- expect(reduce(state, view.updateFilter(state, item => item.id === 1))).toEqual(result)
+ expect(reduce(state, view.updateFilter(state.data, item => item.id === 1))).toEqual(result)
})
it('should sort items', () => {
@@ -72,7 +72,7 @@ describe('view reduce', () => {
{ id: 1, val: 1 },
{ id: 2, val: 3 }
])
- expect(reduce(state, view.update(2, { id: 2, val: 3 }))).toEqual(result)
+ expect(reduce(state, view.update({ id: 2, val: 3 }))).toEqual(result)
})
it('should sort updated item', () => {
@@ -84,7 +84,7 @@ describe('view reduce', () => {
{ id: 2, val: 3 },
{ id: 1, val: 1 }
])
- expect(reduce(state, view.update(2, { id: 2, val: 3 }, undefined, (a, b) => b.id - a.id))).toEqual(result)
+ expect(reduce(state, view.update({ id: 2, val: 3 }, undefined, (a, b) => b.id - a.id))).toEqual(result)
})
it('should filter updated item', () => {
@@ -96,7 +96,7 @@ describe('view reduce', () => {
{ id: 1, val: 1 }
])
result.indexOf[2] = null
- expect(reduce(state, view.update(2, { id: 2, val: 3 }, i => i.id === i.val))).toEqual(result)
+ expect(reduce(state, view.update({ id: 2, val: 3 }, i => i.id === i.val))).toEqual(result)
})
it('should remove item', () => {
@@ -119,7 +119,7 @@ describe('view reduce', () => {
const result = createState([
{ id: 1 }
])
- expect(reduce(state, view.receive({ data: [{ id: 1 }] }))).toEqual(result)
+ expect(reduce(state, view.receive([{ id: 1 }]))).toEqual(result)
})
it('should sort received items', () => {
@@ -131,7 +131,7 @@ describe('view reduce', () => {
{ id: 2 },
{ id: 1 }
])
- expect(reduce(state, view.receive({ data: [{ id: 1 }, { id: 2 }] }, undefined, (a, b) => b.id - a.id))).toEqual(result)
+ expect(reduce(state, view.receive([{ id: 1 }, { id: 2 }], undefined, (a, b) => b.id - a.id))).toEqual(result)
})
it('should filter received', () => {
@@ -142,7 +142,7 @@ describe('view reduce', () => {
const result = createState([
{ id: 1 }
])
- expect(reduce(state, view.receive({ data: [{ id: 1 }, { id: 2 }] }, i => i.id === 1))).toEqual(result)
+ expect(reduce(state, view.receive([{ id: 1 }, { id: 2 }], i => i.id === 1))).toEqual(result)
})
})