import map2tree from '../src'; import immutable from 'immutable'; test('# rootNodeKey', () => { const map = {}; const options = { key: 'foo' }; expect(map2tree(map, options).name).toBe('foo'); }); describe('# shallow map', () => { test('## null', () => { const map = { a: null }; const expected = { name: 'state', children: [{ name: 'a', value: null }] }; expect(map2tree(map)).toEqual(expected); expect(map2tree(immutable.fromJS(map))).toEqual(expected); }); test('## value', () => { const map = { a: 'foo', b: 'bar' }; const expected = { name: 'state', children: [{ name: 'a', value: 'foo' }, { name: 'b', value: 'bar' }] }; expect(map2tree(map)).toEqual(expected); expect(map2tree(immutable.fromJS(map))).toEqual(expected); }); test('## object', () => { const map = { a: { aa: 'foo' } }; const expected = { name: 'state', children: [{ name: 'a', children: [{ name: 'aa', value: 'foo' }] }] }; expect(map2tree(map)).toEqual(expected); expect(map2tree(immutable.fromJS(map))).toEqual(expected); }); test('## immutable Map', () => { const map = { a: immutable.fromJS({ aa: 'foo', ab: 'bar' }) }; const expected = { name: 'state', children: [ { name: 'a', children: [{ name: 'aa', value: 'foo' }, { name: 'ab', value: 'bar' }] } ] }; expect(map2tree(map)).toEqual(expected); }); }); describe('# deep map', () => { test('## null', () => { const map = { a: { aa: null } }; const expected = { name: 'state', children: [ { name: 'a', children: [ { name: 'aa', value: null } ] } ] }; expect(map2tree(map)).toEqual(expected); expect(map2tree(immutable.fromJS(map))).toEqual(expected); }); test('## object', () => { const map = { a: { aa: { aaa: 'foo' } } }; const expected = { name: 'state', children: [ { name: 'a', children: [ { name: 'aa', children: [{ name: 'aaa', value: 'foo' }] } ] } ] }; expect(map2tree(map)).toEqual(expected); expect(map2tree(immutable.fromJS(map))).toEqual(expected); }); }); describe('# array map', () => { const map = { a: [1, 2] }; test('## push', () => { const expected = { name: 'state', children: [ { name: 'a', children: [{ name: 'a[0]', value: 1 }, { name: 'a[1]', value: 2 }] } ] }; expect(map2tree(map)).toEqual(expected); expect(map2tree(immutable.fromJS(map))).toEqual(expected); }); test('## unshift', () => { const options = { pushMethod: 'unshift' }; const expected = { name: 'state', children: [ { name: 'a', children: [{ name: 'a[1]', value: 2 }, { name: 'a[0]', value: 1 }] } ] }; expect(map2tree(map, options)).toEqual(expected); expect(map2tree(immutable.fromJS(map), options)).toEqual(expected); }); test('## null', () => { const map = { a: [null] }; const expected = { name: 'state', children: [ { name: 'a', children: [{ name: 'a[0]', value: null }] } ] }; expect(map2tree(map)).toEqual(expected); expect(map2tree(immutable.fromJS(map))).toEqual(expected); }); }); describe('# collection map', () => { test('## value', () => { const map = { a: [{ aa: 1 }, { aa: 2 }] }; const expected = { name: 'state', children: [ { name: 'a', children: [ { name: 'a[0]', object: { aa: 1 } }, { name: 'a[1]', object: { aa: 2 } } ] } ] }; expect(map2tree(map)).toEqual(expected); expect(map2tree(immutable.fromJS(map))).toEqual(expected); }); test('## object', () => { const map = { a: [{ aa: { aaa: 'foo' } }] }; const expected = { name: 'state', children: [ { name: 'a', children: [{ name: 'a[0]', object: { aa: { aaa: 'foo' } } }] } ] }; expect(map2tree(map)).toEqual(expected); expect(map2tree(immutable.fromJS(map))).toEqual(expected); }); });