UNPKG

@shopgate/pwa-common

Version:

Common library for the Shopgate Connect PWA.

14 lines 2.28 kB
import{assignObjectDeep}from'.';import{isObject}from"../validation";describe('helpers/data',function(){describe('assignObjectDeep',function(){it('should merge simple objects correctly',function(){var modifier={b:0,c:null,d:undefined,g:1.7,h:'g',i:{x:'x'},j:['a','b']};// Object to be mutated var actual={a:0,b:1,c:'abc',d:'def',e:'ghi',f:null,g:1.6};assignObjectDeep(actual,modifier,false);expect(actual).toEqual({a:0,b:0,c:null,d:undefined,e:'ghi',f:null,g:1.7,h:'g',i:{x:'x'},j:['a','b']});});it('should merge objects containing sub-objects correctly',function(){var modifier={a:{x:2,y:{i:'first mod',k:'new entry'}},b:'c',c:undefined,d:{x:'x'},e:['a','b']};// Object to be mutated var actual={a:{x:1,y:{i:'first',j:'second'}},b:{x:2,y:{i:'first',j:'second'}}};assignObjectDeep(actual,modifier,false);expect(actual).toEqual({a:{x:2,y:{i:'first mod',j:'second',k:'new entry'}},b:'c',c:undefined,d:{x:'x'},e:['a','b']});});it('should merge objects containing arrays correctly',function(){/** * This comparator detects unique scalar types and objects containing an id * within the 'a' prop * * @param {string} path path * @param {*} prev prev * @param {*} next next * @returns {boolean} */var comparator=function comparator(path,prev,next){// Scalar types if(!isObject(prev)||!isObject(next)){return prev===next;}// Object merge only occurring on array object-items within the 'a' prop if(path.startsWith('$.a.')){return prev.id===next.id;}return false;};var modifier={b:[1,2,3],a:[['non-unique1','non-unique1'],'unique element',2,{id:'custom-id-2',data:{x:null,y:{i:'first',j:'second mod',k:'third'},z:'new data entry'}},{id:'custom-id-3',data:{x:'a'}}]};// Object to be mutated var actual={a:[1,'unique element',{id:'custom-id-1',data:{x:1,y:{i:'first',j:'second'}}},{id:'custom-id-2',data:{x:1,y:{i:'first',j:'second'}}},['non-unique1','non-unique1']],b:[0]};assignObjectDeep(actual,modifier,false,comparator,'$');expect(actual).toEqual({a:[1,'unique element',{id:'custom-id-1',data:{x:1,y:{i:'first',j:'second'}}},{id:'custom-id-2',data:{x:null,y:{i:'first',j:'second mod',k:'third'},z:'new data entry'}},['non-unique1','non-unique1'],['non-unique1','non-unique1'],2,{id:'custom-id-3',data:{x:'a'}}],b:[0,1,2,3]});});});});