From f8c4806aa53f26a4bae9fba658cda2f18159f11a Mon Sep 17 00:00:00 2001 From: joshuaboud Date: Thu, 26 May 2022 17:07:06 -0300 Subject: [PATCH] more tests --- .../functions/assignObjectRecursive.test.js | 109 +++++++++++++++--- 1 file changed, 95 insertions(+), 14 deletions(-) diff --git a/navigator/src/functions/assignObjectRecursive.test.js b/navigator/src/functions/assignObjectRecursive.test.js index 3155280..b3d00e7 100644 --- a/navigator/src/functions/assignObjectRecursive.test.js +++ b/navigator/src/functions/assignObjectRecursive.test.js @@ -1,6 +1,6 @@ import assignObjectRecursive from "./assignObjectRecursive"; -const defaultSource = { +const source = { str1: 'value1', str2: 'value2', num1: 1, @@ -14,22 +14,103 @@ const defaultSource = { num2: 2, bool1: true, bool2: false, + obj1: { + str1: 'value1', + str2: 'value2', + num1: 1, + num2: 2, + bool1: true, + bool2: false, + } } }; -test('basic assignment with no defaults', () => { - const settings = {}; - assignObjectRecursive(settings, defaultSource); - expect(settings).toEqual(defaultSource); -}); +describe('The assignObjectRecursive function', () => { + it('can assign a source object to a target object', () => { + const target = {}; + assignObjectRecursive(target, source); + expect(target).toEqual(source); + }); -test('ensure defaults do not overwrite source', () => { - const source = { - key1: 'value1', - key2: 'value2', - obj1: { - key1: 'value1', - key2: 'value2', + it('won\'t overwrite source props with defaults', () => { + const defaults = { + str1: 'value3', + str2: 'value4', + num1: 3, + num2: 4, + bool1: false, + bool2: true, + obj1: { + str1: 'value3', + str2: 'value4', + num1: 3, + num2: 4, + bool1: false, + bool2: true, + obj1: { + str1: 'value3', + str2: 'value4', + num1: 3, + num2: 4, + bool1: false, + bool2: true, + } + } + }; + const target = {}; + assignObjectRecursive(target, source, defaults); + expect(target).toEqual(source); + }); + + it('can fill in missing defaults', () => { + const defaults = { + newStr: "test", + newNum: 5, + newBool: true, + obj1: { + newStr: "test", + newNum: 5, + newBool: true, + obj1: { + newStr: "test", + newNum: 5, + newBool: true, + } + } } - }; + const target = {}; + assignObjectRecursive(target, source, defaults); + expect(target).toEqual({ + ...defaults, + ...source, + obj1: { + ...defaults.obj1, + ...source.obj1, + obj1: { + ...defaults.obj1.obj1, + ...source.obj1.obj1 + } + } + } + ); + }); + + it('can add deeply nested defaults', () => { + const defaults = { + lvl1: { + lvl2: { + lvl3: { + lvl4: { + key: 'value', + } + } + } + } + } + const target = {}; + assignObjectRecursive(target, source, defaults); + expect(target).toEqual({ ...source, ...defaults }); + expect(target.lvl1.lvl2.lvl3.lvl4.key).toBe(defaults.lvl1.lvl2.lvl3.lvl4.key); + }); + });