From e6cbc32fedd85d0042fcd30f73bac8235ddbde35 Mon Sep 17 00:00:00 2001 From: CrocoDillon Date: Sat, 30 Jan 2016 15:59:29 -0500 Subject: [PATCH] Add tests for tree-view example --- examples/tree-view/package.json | 5 +- examples/tree-view/test/.eslintrc | 5 + examples/tree-view/test/reducer.spec.js | 164 ++++++++++++++++++++++++ 3 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 examples/tree-view/test/.eslintrc create mode 100644 examples/tree-view/test/reducer.spec.js diff --git a/examples/tree-view/package.json b/examples/tree-view/package.json index 195bf8a8752..2356b61dd47 100644 --- a/examples/tree-view/package.json +++ b/examples/tree-view/package.json @@ -3,7 +3,9 @@ "version": "0.0.0", "description": "Redux tree-view example", "scripts": { - "start": "node server.js" + "start": "node server.js", + "test": "NODE_ENV=test mocha --recursive --compilers js:babel-core/register", + "test:watch": "npm test -- --watch" }, "repository": { "type": "git", @@ -24,6 +26,7 @@ "babel-core": "^5.6.18", "babel-loader": "^5.1.4", "babel-plugin-react-transform": "^1.1.0", + "deep-freeze": "0.0.1", "expect": "^1.6.0", "express": "^4.13.3", "jsdom": "^5.6.1", diff --git a/examples/tree-view/test/.eslintrc b/examples/tree-view/test/.eslintrc new file mode 100644 index 00000000000..7eeefc33b66 --- /dev/null +++ b/examples/tree-view/test/.eslintrc @@ -0,0 +1,5 @@ +{ + "env": { + "mocha": true + } +} diff --git a/examples/tree-view/test/reducer.spec.js b/examples/tree-view/test/reducer.spec.js new file mode 100644 index 00000000000..1dd222e86da --- /dev/null +++ b/examples/tree-view/test/reducer.spec.js @@ -0,0 +1,164 @@ +import expect from 'expect' +import deepFreeze from 'deep-freeze' +import reducer from '../reducers' +import { increment, createNode, deleteNode, addChild, removeChild } from '../actions' + +describe('reducer', () => { + it('should provide the initial state', () => { + expect(reducer(undefined, {})).toEqual({}) + }) + + it('should handle INCREMENT action', () => { + const stateBefore = { + 'node_0': { + id: 'node_0', + counter: 0, + childIds: [] + } + } + const action = increment('node_0') + const stateAfter = { + 'node_0': { + id: 'node_0', + counter: 1, + childIds: [] + } + } + + deepFreeze(stateBefore) + deepFreeze(action) + + expect(reducer(stateBefore, action)).toEqual(stateAfter) + }) + + it('should handle CREATE_NODE action', () => { + const stateBefore = {} + const action = createNode() + const stateAfter = { + [action.nodeId]: { + id: action.nodeId, + counter: 0, + childIds: [] + } + } + + deepFreeze(stateBefore) + deepFreeze(action) + + expect(reducer(stateBefore, action)).toEqual(stateAfter) + }) + + it('should handle DELETE_NODE action', () => { + const stateBefore = { + 'node_0': { + id: 'node_0', + counter: 0, + childIds: [ 'node_1' ] + }, + 'node_1': { + id: 'node_1', + counter: 0, + childIds: [] + }, + 'node_2': { + id: 'node_2', + counter: 0, + childIds: [ 'node_3', 'node_4' ] + }, + 'node_3': { + id: 'node_3', + counter: 0, + childIds: [] + }, + 'node_4': { + id: 'node_4', + counter: 0, + childIds: [] + } + } + const action = deleteNode('node_2') + const stateAfter = { + 'node_0': { + id: 'node_0', + counter: 0, + childIds: [ 'node_1' ] + }, + 'node_1': { + id: 'node_1', + counter: 0, + childIds: [] + } + } + + deepFreeze(stateBefore) + deepFreeze(action) + + expect(reducer(stateBefore, action)).toEqual(stateAfter) + }) + + it('should handle ADD_CHILD action', () => { + const stateBefore = { + 'node_0': { + id: 'node_0', + counter: 0, + childIds: [] + }, + 'node_1': { + id: 'node_1', + counter: 0, + childIds: [] + } + } + const action = addChild('node_0', 'node_1') + const stateAfter = { + 'node_0': { + id: 'node_0', + counter: 0, + childIds: [ 'node_1' ] + }, + 'node_1': { + id: 'node_1', + counter: 0, + childIds: [] + } + } + + deepFreeze(stateBefore) + deepFreeze(action) + + expect(reducer(stateBefore, action)).toEqual(stateAfter) + }) + + it('should handle REMOVE_CHILD action', () => { + const stateBefore = { + 'node_0': { + id: 'node_0', + counter: 0, + childIds: [ 'node_1' ] + }, + 'node_1': { + id: 'node_1', + counter: 0, + childIds: [] + } + } + const action = removeChild('node_0', 'node_1') + const stateAfter = { + 'node_0': { + id: 'node_0', + counter: 0, + childIds: [] + }, + 'node_1': { + id: 'node_1', + counter: 0, + childIds: [] + } + } + + deepFreeze(stateBefore) + deepFreeze(action) + + expect(reducer(stateBefore, action)).toEqual(stateAfter) + }) +})