import { deepMerge } from '../deepMerge' ; describe ( 'deepMerge' , ( ) => { it ( 'merges basic' , ( ) => { const target = { a : 1 , b : 2 , } ; const source = { b : 3 , c : 4 , } ; expect ( deepMerge ( target , source ) ) . toEqual ( { a : 1 , b : 3 , c : 4 , } ) ; } ) ; it ( 'merges nested objects' , ( ) => { const target = { a : 1 , b : { someProperty : 1 , overwrittenProperty : 'clean' , } , } ; const source = { b : { overwrittenProperty : 'dirty' , newProperty : 'new' , } , c : 4 , } ; expect ( deepMerge ( target , source ) ) . toEqual ( { a : 1 , b : { newProperty : 'new' , overwrittenProperty : 'dirty' , someProperty : 1 , } , c : 4 , } ) ; } ) ; it ( 'ignores merging __proto__ fields' , ( ) => { const target = { } ; const source = JSON . parse ( '{"__proto__": {"pollution": true}}' ) ; deepMerge ( target , source ) ; expect ( Object . prototype . hasOwnProperty ( 'pollution' ) ) . toBe ( false ) ; } ) ; it ( 'merges arrays' , ( ) => { const target = { a : 1 , b : [ { c : 1 , d : 2 } ] , } ; const source = { e : 2 , b : [ { f : 3 } ] , } ; expect ( deepMerge ( target , source ) ) . toEqual ( { a : 1 , e : 2 , b : [ { c : 1 , d : 2 , f : 3 } ] , } ) ; } ) ; } ) ;