diff options
Diffstat (limited to 'web/src/js/__tests__/ducks/utils/list.js')
-rw-r--r-- | web/src/js/__tests__/ducks/utils/list.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/web/src/js/__tests__/ducks/utils/list.js b/web/src/js/__tests__/ducks/utils/list.js new file mode 100644 index 00000000..8cae91ec --- /dev/null +++ b/web/src/js/__tests__/ducks/utils/list.js @@ -0,0 +1,63 @@ +jest.unmock('lodash') +jest.unmock('../../../ducks/utils/list') + +import reduce, * as list from '../../../ducks/utils/list' + +describe('list reduce', () => { + + it('should add item', () => { + const state = createState([ + { id: 1 }, + { id: 2 } + ]) + const result = createState([ + { id: 1 }, + { id: 2 }, + { id: 3 } + ]) + expect(reduce(state, list.add({ id: 3 }))).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, list.update(2, { id: 2, val: 3 }))).toEqual(result) + }) + + it('should remove item', () => { + const state = createState([ + { id: 1 }, + { id: 2 } + ]) + const result = createState([ + { id: 1 } + ]) + result.byId[2] = result.indexOf[2] = null + expect(reduce(state, list.remove(2))).toEqual(result) + }) + + it('should replace all items', () => { + const state = createState([ + { id: 1 }, + { id: 2 } + ]) + const result = createState([ + { id: 1 } + ]) + expect(reduce(state, list.receive([{ id: 1 }]))).toEqual(result) + }) +}) + +function createState(items) { + return { + data: items, + byId: _.fromPairs(items.map((item, index) => [item.id, item])), + indexOf: _.fromPairs(items.map((item, index) => [item.id, index])) + } +} |