-
Notifications
You must be signed in to change notification settings - Fork 2
/
merge.test.ts
101 lines (75 loc) · 2.87 KB
/
merge.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import { isObject, merge } from '../src/merge';
describe('isObject function', () => {
it('should accept valid arguments', () => {
expect(isObject({ abc: 123 })).toBeTruthy();
});
it('should accept extreme arguments', () => {
expect(isObject({ abc: 123, i: { am: 'nested' } })).toBeTruthy();
});
it('should reject erroneous arguments', () => {
expect(isObject(false)).toBeFalsy();
expect(isObject(undefined)).toBeFalsy();
expect(isObject('hello world')).toBeFalsy();
expect(isObject([123, 456])).toBeFalsy();
});
});
describe('merging util function', () => {
it('should merge two objects', () => {
const a = { hello: 'world' };
const b = { abc: 123 };
const merged = merge(a, [b]);
expect(Object.keys(merged)).toHaveLength(2);
expect(merged).toHaveProperty('hello');
expect(merged.hello).toEqual('world');
expect(merged).toHaveProperty('abc');
expect(merged.abc).toEqual(123);
});
it('should merge objects with nested values', () => {
const a = { abc: { hello: 'world' } };
const b = { abc: { easy: { as: 123 } } };
const merged = merge(a, [b]);
expect(Object.keys(merged)).toHaveLength(1);
expect(merged).toHaveProperty('abc');
expect(merged.abc).toHaveProperty('easy');
expect(merged.abc.easy).toHaveProperty('as');
expect(merged.abc.easy.as).toEqual(123);
expect(merged.abc).toHaveProperty('hello');
expect(merged.abc.hello).toEqual('world');
});
it('should merge array values when options.mergeArray is true', () => {
const a = { hello: ['world'] };
const b = { hello: ['there'], general: ['kenobi'] };
const merged = merge(a, [b], { mergeArray: true });
expect(Object.keys(merged)).toHaveLength(2);
expect(merged).toHaveProperty('hello');
expect(merged.hello).toHaveLength(2);
expect(merged.hello).toContain('world');
expect(merged.hello).toContain('there');
expect(merged).toHaveProperty('general');
expect(merged.general).toHaveLength(1);
expect(merged.general).toContain('kenobi');
});
it('should not merge non-object values', () => {
const a = { hello: 'world' };
const b = [123, 456];
const merged = merge(a, [b]);
expect(Object.keys(merged)).toHaveLength(1);
expect(merged).toHaveProperty('hello');
expect(merged.hello).toEqual('world');
});
it('should return the target object if no sources are provided', () => {
const a = { hello: 'world' };
const merged = merge(a, []);
expect(Object.keys(merged)).toHaveLength(1);
expect(merged).toHaveProperty('hello');
expect(merged.hello).toEqual('world');
});
it('should ignore non-object sources', () => {
const a = { hello: 'world' };
const b = [123, 456];
const merged = merge(a, b);
expect(Object.keys(merged)).toHaveLength(1);
expect(merged).toHaveProperty('hello');
expect(merged.hello).toEqual('world');
});
});