-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.spec.js
124 lines (110 loc) · 5.56 KB
/
index.spec.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
120
121
122
123
124
"use strict";
const { reconciliate } = require("./index.js");
describe("reconciliate", () => {
const before = require("./test/simpsons-before.json");
const after = require("./test/simpsons-after.json");
it("differences are showing", () => {
const result = reconciliate({
remove: [],
add: [],
ignore: [],
rename: [],
map: []
})(before, after)
expect(result.diff).toHaveLength(11);
expectDifference(result, "characters.0.firstName").toHaveSides("Homer", "Homer J.");
expectDifference(result, "characters.0.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "characters.1.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "characters.2.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "characters.3.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "creators").toHaveSides(undefined, ["Matt Groening"]);
expectDifference(result, "characters.0.age").toHaveSides(40, undefined);
expectDifference(result, "characters.1.age").toHaveSides(38, undefined);
expectDifference(result, "characters.2.age").toHaveSides(10, undefined);
expectDifference(result, "characters.3.age").toHaveSides(8, undefined);
expectDifference(result, "characters.4.age").toHaveSides(1, undefined);
});
it("marking a path as 'add' excludes it from the right-hand side of the difference", () => {
const result = reconciliate({
remove: [],
add: ["creators"],
ignore: [],
rename: [],
map: []
})(before, after)
expect(result.diff).toHaveLength(10);
expectDifference(result, "characters.0.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "characters.0.firstName").toHaveSides("Homer", "Homer J.");
expectDifference(result, "characters.1.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "characters.2.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "characters.3.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "characters.0.age").toHaveSides(40, undefined);
expectDifference(result, "characters.1.age").toHaveSides(38, undefined);
expectDifference(result, "characters.2.age").toHaveSides(10, undefined);
expectDifference(result, "characters.3.age").toHaveSides(8, undefined);
expectDifference(result, "characters.4.age").toHaveSides(1, undefined);
});
it("marking a path as 'add' excludes it from the left-hand side of the difference", () => {
const result = reconciliate({
remove: [],
add: ["characters.[].age"],
ignore: [],
rename: [],
map: []
})(before, after)
expect(result.diff).toHaveLength(11);
expectDifference(result, "characters.0.firstName").toHaveSides("Homer", "Homer J.");
expectDifference(result, "characters.0.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "characters.1.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "characters.2.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "characters.3.address.line1").toHaveSides("742 Evergreen Terrace", "742 Evergreen Tr");
expectDifference(result, "characters.0.age").toHaveSides(40, undefined);
expectDifference(result, "characters.1.age").toHaveSides(38, undefined);
expectDifference(result, "characters.2.age").toHaveSides(10, undefined);
expectDifference(result, "characters.3.age").toHaveSides(8, undefined);
expectDifference(result, "characters.4.age").toHaveSides(1, undefined);
});
it("marking a path as 'ignore' excludes it from the both sides of the difference", () => {
const result = reconciliate({
remove: [],
add: [],
ignore: ["characters.[].address.line1"],
rename: [],
map: []
})(before, after)
expect(result.diff).toHaveLength(7);
expectDifference(result, "characters.0.firstName").toHaveSides("Homer", "Homer J.");
expectDifference(result, "characters.0.age").toHaveSides(40, undefined);
expectDifference(result, "characters.1.age").toHaveSides(38, undefined);
expectDifference(result, "characters.2.age").toHaveSides(10, undefined);
expectDifference(result, "characters.3.age").toHaveSides(8, undefined);
expectDifference(result, "characters.4.age").toHaveSides(1, undefined);
});
it("marking a path as 'map' transforms value prior to compare it", () => {
const result = reconciliate({
remove: [],
add: [],
ignore: [],
rename: [],
map: [
["characters.[].address.line1", value => value.substring(0, 13) + " Tr"]
]
})(before, after)
expect(result.diff).toHaveLength(8);
expectDifference(result, "characters.0.firstName").toHaveSides("Homer", "Homer J.");
expectDifference(result, "creators").toHaveSides(undefined, ["Matt Groening"]);
expectDifference(result, "characters.0.age").toHaveSides(40, undefined);
expectDifference(result, "characters.1.age").toHaveSides(38, undefined);
expectDifference(result, "characters.2.age").toHaveSides(10, undefined);
expectDifference(result, "characters.3.age").toHaveSides(8, undefined);
expectDifference(result, "characters.4.age").toHaveSides(1, undefined);
});
})
function expectDifference(result, path) {
const expectation = expect(result.diff.find(each => each.path === path));
expectation.toHaveSides = (left, right) => {
expectation.toHaveProperty("lhs", left);
expectation.toHaveProperty("rhs", right);
}
return expectation;
}