|
|
@ -1,189 +1,154 @@ |
|
|
|
import { getObjectDiff } from "../src/object-diff"; |
|
|
|
import { getObjectDiff } from "../src/object-diff"; |
|
|
|
|
|
|
|
|
|
|
|
describe("getObjectDiff", () => { |
|
|
|
describe("getObjectDiff", () => { |
|
|
|
// it("returns an empty diff if no objects are provided", () => {
|
|
|
|
it("returns an empty diff if no objects are provided", () => { |
|
|
|
// expect(getObjectDiff(null, null)).toStrictEqual({
|
|
|
|
expect(getObjectDiff(null, null)).toStrictEqual({ |
|
|
|
// type: "object",
|
|
|
|
type: "object", |
|
|
|
// status: "equal",
|
|
|
|
status: "equal", |
|
|
|
// diff: [],
|
|
|
|
diff: [], |
|
|
|
// });
|
|
|
|
}); |
|
|
|
// });
|
|
|
|
}); |
|
|
|
// it("consider previous object as completely deleted if no next object is provided", () => {
|
|
|
|
it("consider previous object as completely deleted if no next object is provided", () => { |
|
|
|
// expect(
|
|
|
|
expect( |
|
|
|
// getObjectDiff(
|
|
|
|
|
|
|
|
// { name: "joe", age: 54, hobbies: ["golf", "football"] },
|
|
|
|
|
|
|
|
// null
|
|
|
|
|
|
|
|
// )
|
|
|
|
|
|
|
|
// ).toStrictEqual({
|
|
|
|
|
|
|
|
// type: "object",
|
|
|
|
|
|
|
|
// status: "deleted",
|
|
|
|
|
|
|
|
// diff: [
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// property: "name",
|
|
|
|
|
|
|
|
// previousValue: "joe",
|
|
|
|
|
|
|
|
// currentValue: undefined,
|
|
|
|
|
|
|
|
// status: "deleted",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// property: "age",
|
|
|
|
|
|
|
|
// previousValue: 54,
|
|
|
|
|
|
|
|
// currentValue: undefined,
|
|
|
|
|
|
|
|
// status: "deleted",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// property: "hobbies",
|
|
|
|
|
|
|
|
// previousValue: ["golf", "football"],
|
|
|
|
|
|
|
|
// currentValue: undefined,
|
|
|
|
|
|
|
|
// status: "deleted",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// ],
|
|
|
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
// it("consider next object as completely added if no previous object is provided", () => {
|
|
|
|
|
|
|
|
// expect(
|
|
|
|
|
|
|
|
// getObjectDiff(null, {
|
|
|
|
|
|
|
|
// name: "joe",
|
|
|
|
|
|
|
|
// age: 54,
|
|
|
|
|
|
|
|
// hobbies: ["golf", "football"],
|
|
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
// ).toStrictEqual({
|
|
|
|
|
|
|
|
// type: "object",
|
|
|
|
|
|
|
|
// status: "added",
|
|
|
|
|
|
|
|
// diff: [
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// property: "name",
|
|
|
|
|
|
|
|
// previousValue: undefined,
|
|
|
|
|
|
|
|
// currentValue: "joe",
|
|
|
|
|
|
|
|
// status: "added",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// property: "age",
|
|
|
|
|
|
|
|
// previousValue: undefined,
|
|
|
|
|
|
|
|
// currentValue: 54,
|
|
|
|
|
|
|
|
// status: "added",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// property: "hobbies",
|
|
|
|
|
|
|
|
// previousValue: undefined,
|
|
|
|
|
|
|
|
// currentValue: ["golf", "football"],
|
|
|
|
|
|
|
|
// status: "added",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// ],
|
|
|
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
// it("detects changed between two objects", () => {
|
|
|
|
|
|
|
|
// expect(
|
|
|
|
|
|
|
|
// getObjectDiff(
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// id: 54,
|
|
|
|
|
|
|
|
// user: {
|
|
|
|
|
|
|
|
// name: "joe",
|
|
|
|
|
|
|
|
// member: true,
|
|
|
|
|
|
|
|
// hobbies: ["golf", "football"],
|
|
|
|
|
|
|
|
// age: 66,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// id: 54,
|
|
|
|
|
|
|
|
// user: {
|
|
|
|
|
|
|
|
// name: "joe",
|
|
|
|
|
|
|
|
// member: false,
|
|
|
|
|
|
|
|
// hobbies: ["golf", "chess"],
|
|
|
|
|
|
|
|
// age: 66,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// )
|
|
|
|
|
|
|
|
// ).toStrictEqual({
|
|
|
|
|
|
|
|
// type: "object",
|
|
|
|
|
|
|
|
// status: "updated",
|
|
|
|
|
|
|
|
// diff: [
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// property: "id",
|
|
|
|
|
|
|
|
// previousValue: 54,
|
|
|
|
|
|
|
|
// currentValue: 54,
|
|
|
|
|
|
|
|
// status: "equal",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// property: "user",
|
|
|
|
|
|
|
|
// previousValue: {
|
|
|
|
|
|
|
|
// name: "joe",
|
|
|
|
|
|
|
|
// member: true,
|
|
|
|
|
|
|
|
// hobbies: ["golf", "football"],
|
|
|
|
|
|
|
|
// age: 66,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// currentValue: {
|
|
|
|
|
|
|
|
// name: "joe",
|
|
|
|
|
|
|
|
// member: false,
|
|
|
|
|
|
|
|
// hobbies: ["golf", "chess"],
|
|
|
|
|
|
|
|
// age: 66,
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// status: "updated",
|
|
|
|
|
|
|
|
// subPropertiesDiff: [
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "name",
|
|
|
|
|
|
|
|
// previousValue: "joe",
|
|
|
|
|
|
|
|
// currentValue: "joe",
|
|
|
|
|
|
|
|
// status: "equal",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "member",
|
|
|
|
|
|
|
|
// previousValue: true,
|
|
|
|
|
|
|
|
// currentValue: false,
|
|
|
|
|
|
|
|
// status: "updated",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "hobbies",
|
|
|
|
|
|
|
|
// previousValue: ["golf", "football"],
|
|
|
|
|
|
|
|
// currentValue: ["golf", "chess"],
|
|
|
|
|
|
|
|
// status: "updated",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// name: "age",
|
|
|
|
|
|
|
|
// previousValue: 66,
|
|
|
|
|
|
|
|
// currentValue: 66,
|
|
|
|
|
|
|
|
// status: "equal",
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// ],
|
|
|
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
// ],
|
|
|
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
it("detects changed between two deep nested objects", () => { |
|
|
|
|
|
|
|
console.log( |
|
|
|
|
|
|
|
"res", |
|
|
|
|
|
|
|
JSON.stringify( |
|
|
|
|
|
|
|
getObjectDiff( |
|
|
|
getObjectDiff( |
|
|
|
|
|
|
|
{ name: "joe", age: 54, hobbies: ["golf", "football"] }, |
|
|
|
|
|
|
|
null |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
).toStrictEqual({ |
|
|
|
|
|
|
|
type: "object", |
|
|
|
|
|
|
|
status: "deleted", |
|
|
|
|
|
|
|
diff: [ |
|
|
|
{ |
|
|
|
{ |
|
|
|
id: 54, |
|
|
|
property: "name", |
|
|
|
user: { |
|
|
|
previousValue: "joe", |
|
|
|
name: "joe", |
|
|
|
currentValue: undefined, |
|
|
|
data: { |
|
|
|
status: "deleted", |
|
|
|
member: true, |
|
|
|
}, |
|
|
|
hobbies: { |
|
|
|
{ |
|
|
|
football: ["psg"], |
|
|
|
property: "age", |
|
|
|
rugby: ["france"], |
|
|
|
previousValue: 54, |
|
|
|
|
|
|
|
currentValue: undefined, |
|
|
|
|
|
|
|
status: "deleted", |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
property: "hobbies", |
|
|
|
|
|
|
|
previousValue: ["golf", "football"], |
|
|
|
|
|
|
|
currentValue: undefined, |
|
|
|
|
|
|
|
status: "deleted", |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
it("consider next object as completely added if no previous object is provided", () => { |
|
|
|
|
|
|
|
expect( |
|
|
|
|
|
|
|
getObjectDiff(null, { |
|
|
|
|
|
|
|
name: "joe", |
|
|
|
|
|
|
|
age: 54, |
|
|
|
|
|
|
|
hobbies: ["golf", "football"], |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
).toStrictEqual({ |
|
|
|
|
|
|
|
type: "object", |
|
|
|
|
|
|
|
status: "added", |
|
|
|
|
|
|
|
diff: [ |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
property: "name", |
|
|
|
|
|
|
|
previousValue: undefined, |
|
|
|
|
|
|
|
currentValue: "joe", |
|
|
|
|
|
|
|
status: "added", |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
property: "age", |
|
|
|
|
|
|
|
previousValue: undefined, |
|
|
|
|
|
|
|
currentValue: 54, |
|
|
|
|
|
|
|
status: "added", |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
property: "hobbies", |
|
|
|
|
|
|
|
previousValue: undefined, |
|
|
|
|
|
|
|
currentValue: ["golf", "football"], |
|
|
|
|
|
|
|
status: "added", |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
it("detects changed between two objects", () => { |
|
|
|
|
|
|
|
expect( |
|
|
|
|
|
|
|
getObjectDiff( |
|
|
|
{ |
|
|
|
{ |
|
|
|
id: 54, |
|
|
|
id: 54, |
|
|
|
user: { |
|
|
|
user: { |
|
|
|
name: "joe", |
|
|
|
name: "joe", |
|
|
|
data: { |
|
|
|
|
|
|
|
member: true, |
|
|
|
member: true, |
|
|
|
hobbies: { |
|
|
|
hobbies: ["golf", "football"], |
|
|
|
football: ["psg", "nantes"], |
|
|
|
age: 66, |
|
|
|
rugby: ["france"], |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
id: 54, |
|
|
|
|
|
|
|
user: { |
|
|
|
|
|
|
|
name: "joe", |
|
|
|
|
|
|
|
member: false, |
|
|
|
|
|
|
|
hobbies: ["golf", "chess"], |
|
|
|
|
|
|
|
age: 66, |
|
|
|
}, |
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
), |
|
|
|
|
|
|
|
null, |
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
) |
|
|
|
) |
|
|
|
); |
|
|
|
).toStrictEqual({ |
|
|
|
|
|
|
|
type: "object", |
|
|
|
|
|
|
|
status: "updated", |
|
|
|
|
|
|
|
diff: [ |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
property: "id", |
|
|
|
|
|
|
|
previousValue: 54, |
|
|
|
|
|
|
|
currentValue: 54, |
|
|
|
|
|
|
|
status: "equal", |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
property: "user", |
|
|
|
|
|
|
|
previousValue: { |
|
|
|
|
|
|
|
name: "joe", |
|
|
|
|
|
|
|
member: true, |
|
|
|
|
|
|
|
hobbies: ["golf", "football"], |
|
|
|
|
|
|
|
age: 66, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
currentValue: { |
|
|
|
|
|
|
|
name: "joe", |
|
|
|
|
|
|
|
member: false, |
|
|
|
|
|
|
|
hobbies: ["golf", "chess"], |
|
|
|
|
|
|
|
age: 66, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
status: "updated", |
|
|
|
|
|
|
|
subPropertiesDiff: [ |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: "name", |
|
|
|
|
|
|
|
previousValue: "joe", |
|
|
|
|
|
|
|
currentValue: "joe", |
|
|
|
|
|
|
|
status: "equal", |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: "member", |
|
|
|
|
|
|
|
previousValue: true, |
|
|
|
|
|
|
|
currentValue: false, |
|
|
|
|
|
|
|
status: "updated", |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: "hobbies", |
|
|
|
|
|
|
|
previousValue: ["golf", "football"], |
|
|
|
|
|
|
|
currentValue: ["golf", "chess"], |
|
|
|
|
|
|
|
status: "updated", |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
name: "age", |
|
|
|
|
|
|
|
previousValue: 66, |
|
|
|
|
|
|
|
currentValue: 66, |
|
|
|
|
|
|
|
status: "equal", |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
it("detects changed between two deep nested objects", () => { |
|
|
|
expect( |
|
|
|
expect( |
|
|
|
getObjectDiff( |
|
|
|
getObjectDiff( |
|
|
|
{ |
|
|
|
{ |
|
|
@ -293,7 +258,7 @@ describe("getObjectDiff", () => { |
|
|
|
name: "football", |
|
|
|
name: "football", |
|
|
|
previousValue: ["psg"], |
|
|
|
previousValue: ["psg"], |
|
|
|
currentValue: ["psg", "nantes"], |
|
|
|
currentValue: ["psg", "nantes"], |
|
|
|
status: "updated", // error the algo says it's equal...
|
|
|
|
status: "updated", |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
name: "rugby", |
|
|
|
name: "rugby", |
|
|
|