From 37c2b47c26dea9b143b2720761cdce21dafd3884 Mon Sep 17 00:00:00 2001 From: Jason Date: Mon, 27 Jun 2016 18:36:21 +0800 Subject: [web] add tests for utils --- web/src/js/__tests__/ducks/utils/view.js | 154 +++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 web/src/js/__tests__/ducks/utils/view.js (limited to 'web/src/js/__tests__/ducks/utils/view.js') diff --git a/web/src/js/__tests__/ducks/utils/view.js b/web/src/js/__tests__/ducks/utils/view.js new file mode 100644 index 00000000..1b07f723 --- /dev/null +++ b/web/src/js/__tests__/ducks/utils/view.js @@ -0,0 +1,154 @@ +jest.unmock('../../../ducks/utils/view') +jest.unmock('lodash') + +import reduce, * as view from '../../../ducks/utils/view' +import _ from 'lodash' + +describe('view reduce', () => { + + it('should filter items', () => { + const state = createState([ + { id: 1 }, + { id: 2 } + ]) + const result = createState([ + { id: 1 } + ]) + expect(reduce(state, view.updateFilter(state, item => item.id === 1))).toEqual(result) + }) + + it('should sort items', () => { + const state = createState([ + { id: 1 }, + { id: 2 } + ]) + const result = createState([ + { id: 2 }, + { id: 1 } + ]) + expect(reduce(state, view.updateSort((a, b) => b.id - a.id))).toEqual(result) + }) + + it('should add item', () => { + const state = createState([ + { id: 1 }, + { id: 2 } + ]) + const result = createState([ + { id: 1 }, + { id: 2 }, + { id: 3 } + ]) + expect(reduce(state, view.add({ id: 3 }))).toEqual(result) + }) + + it('should add item in place', () => { + const state = createState([ + { id: 1 } + ]) + const result = createState([ + { id: 3 }, + { id: 1 } + ]) + expect(reduce(state, view.add({ id: 3 }, undefined, (a, b) => b.id - a.id))).toEqual(result) + }) + + it('should filter added item', () => { + const state = createState([ + { id: 1 } + ]) + const result = createState([ + { id: 1 } + ]) + expect(reduce(state, view.add({ id: 3 }, i => i.id === 1))).toEqual(result) + }) + + it('should update item', () => { + const state = createState([ + { id: 1, val: 1 }, + { id: 2, val: 2 } + ]) + const result = createState([ + { id: 1, val: 1 }, + { id: 2, val: 3 } + ]) + expect(reduce(state, view.update(2, { id: 2, val: 3 }))).toEqual(result) + }) + + it('should sort updated item', () => { + const state = createState([ + { id: 1, val: 1 }, + { id: 2, val: 2 } + ]) + const result = createState([ + { 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) + }) + + it('should filter updated item', () => { + const state = createState([ + { id: 1, val: 1 }, + { id: 2, val: 2 } + ]) + const result = createState([ + { 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) + }) + + it('should remove item', () => { + const state = createState([ + { id: 1 }, + { id: 2 } + ]) + const result = createState([ + { id: 1 } + ]) + result.indexOf[2] = null + expect(reduce(state, view.remove(2))).toEqual(result) + }) + + it('should replace items', () => { + const state = createState([ + { id: 1 }, + { id: 2 } + ]) + const result = createState([ + { id: 1 } + ]) + expect(reduce(state, view.receive({ data: [{ id: 1 }] }))).toEqual(result) + }) + + it('should sort received items', () => { + const state = createState([ + { id: 1 }, + { id: 2 } + ]) + const result = createState([ + { id: 2 }, + { id: 1 } + ]) + expect(reduce(state, view.receive({ data: [{ id: 1 }, { id: 2 }] }, undefined, (a, b) => b.id - a.id))).toEqual(result) + }) + + it('should filter received', () => { + const state = createState([ + { id: 1 }, + { id: 2 } + ]) + const result = createState([ + { id: 1 } + ]) + expect(reduce(state, view.receive({ data: [{ id: 1 }, { id: 2 }] }, i => i.id === 1))).toEqual(result) + }) +}) + +function createState(items) { + return { + data: items, + indexOf: _.fromPairs(items.map((item, index) => [item.id, index])) + } +} -- cgit v1.2.3