-
-
Notifications
You must be signed in to change notification settings - Fork 94
/
Copy pathdeleted.test.js
119 lines (103 loc) · 4.1 KB
/
deleted.test.js
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import deletedDiff from '../src/deleted';
describe('.deletedDiff', () => {
describe('base case', () => {
describe('equal', () => {
test.each([
['int', 1],
['string', 'a'],
['boolean', true],
['null', null],
['undefined', undefined],
['object', { a: 1 }],
['array', [1]],
['function', () => ({})],
['date', new Date()],
])('returns empty object when given values of type %s are equal', (type, value) => {
expect(deletedDiff(value, value)).toEqual({});
});
});
describe('not equal and not object', () => {
test.each([
[1, 2],
['a', 'b'],
[true, false],
['hello', null],
['hello', undefined],
[null, undefined],
[undefined, null],
[null, { a: 1 }],
['872983', { areaCode: '+44', number: '872983' }],
[100, () => ({})],
[() => ({}), 100],
[new Date('2017-01-01'), new Date('2017-01-02')],
])('returns empty object when given values: %s %s are unequal', (lhs, rhs) => {
expect(deletedDiff(lhs, rhs)).toEqual({});
});
});
});
describe('recursive case', () => {
describe('object', () => {
test('returns empty object when rhs has been updated', () => {
expect(deletedDiff({ a: 1 }, { a: 2 })).toEqual({});
});
test('returns empty object when right hand side has been added to', () => {
expect(deletedDiff({ a: 1 }, { a: 1, b: 2 })).toEqual({});
});
test('returns keys as undefined when deleted from right hand side root', () => {
expect(deletedDiff({ a: 1, b: { c: 2 }}, { a: 1 })).toEqual({ b: undefined });
});
test('returns keys as undefined when deeply deleted from right hand side', () => {
expect(deletedDiff({ a: { b: 1 }, c: 2, d: { e: 100 } }, { a: { b: 1 }, c: 2, d: {} })).toEqual({ d: { e: undefined } });
});
test('returns subset of right hand side with deleted date', () => {
expect(deletedDiff({ date: new Date('2016') }, {})).toEqual({ date: undefined });
});
});
describe('arrays', () => {
test('returns empty object when rhs array has been updated', () => {
expect(deletedDiff([1], [2])).toEqual({});
});
test('returns empty object when right hand side array has additions', () => {
expect(deletedDiff([1, 2, 3], [1, 2, 3, 9])).toEqual({});
});
test('returns subset of right hand side array as object of indices to value when right hand side array has deletions', () => {
expect(deletedDiff([1, 2, 3], [1, 3])).toEqual({ 2: undefined });
});
test('returns subset of right hand side with added date', () => {
expect(deletedDiff([new Date('2016')], [])).toEqual({ 0: undefined });
});
});
describe('object create null', () => {
test('returns keys as undefined when deleted from right hand side root', () => {
const lhs = Object.create(null);
const rhs = Object.create(null);
lhs.a = 1;
lhs.b = 2;
rhs.a = 1;
expect(deletedDiff(lhs, rhs)).toEqual({ b: undefined });
});
test('returns keys as undefined when deeply deleted from right hand side', () => {
const lhs = Object.create(null);
const rhs = Object.create(null);
lhs.a = { b: 1 };
lhs.c = { d: 100 };
rhs.a = { b: 1 };
rhs.c = {};
expect(deletedDiff(lhs, rhs)).toEqual({ c: { d: undefined } });
});
test('returns subset of right hand side with deleted date', () => {
const lhs = Object.create(null);
const rhs = Object.create(null);
lhs.date = new Date('2016');
expect(deletedDiff({ date: new Date('2016') }, rhs)).toEqual({ date: undefined });
});
});
describe('object with non-function hasOwnProperty property', () => {
test('can represent the property in diff despite it being part of Object.prototype', () => {
const lhs = { hasOwnProperty: true };
const rhs = {};
expect(deletedDiff(lhs, rhs)).toEqual({ hasOwnProperty: undefined });
});
});
});
});