Superdiff provides a complete and readable diff for both arrays and objects. Plus, it supports stream and file inputs for handling large datasets efficiently, is battle-tested, has zero dependencies, and is super fast.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

314 lines
7.9 KiB

2 years ago
import { getObjectDiff } from "../src/object-diff";
describe("getObjectDiff", () => {
// it("returns an empty diff if no objects are provided", () => {
// expect(getObjectDiff(null, null)).toStrictEqual({
// type: "object",
// status: "equal",
// diff: [],
// });
// });
// it("consider previous object as completely deleted if no next object is provided", () => {
// 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(
{
id: 54,
user: {
name: "joe",
data: {
member: true,
hobbies: {
football: ["psg"],
rugby: ["france"],
},
},
},
},
{
id: 54,
user: {
name: "joe",
data: {
member: true,
hobbies: {
football: ["psg", "nantes"],
rugby: ["france"],
},
},
},
}
),
null,
2
)
);
expect(
getObjectDiff(
{
id: 54,
user: {
name: "joe",
data: {
member: true,
hobbies: {
football: ["psg"],
rugby: ["france"],
},
},
},
},
{
id: 54,
user: {
name: "joe",
data: {
member: true,
hobbies: {
football: ["psg", "nantes"],
rugby: ["france"],
},
},
},
}
)
).toStrictEqual({
type: "object",
status: "updated",
diff: [
{
property: "id",
previousValue: 54,
currentValue: 54,
status: "equal",
},
{
property: "user",
previousValue: {
name: "joe",
data: {
member: true,
hobbies: {
football: ["psg"],
rugby: ["france"],
},
},
},
currentValue: {
name: "joe",
data: {
member: true,
hobbies: {
football: ["psg", "nantes"],
rugby: ["france"],
},
},
},
status: "updated",
subPropertiesDiff: [
{
name: "name",
previousValue: "joe",
currentValue: "joe",
status: "equal",
},
{
name: "data",
previousValue: {
member: true,
hobbies: {
football: ["psg"],
rugby: ["france"],
},
},
currentValue: {
member: true,
hobbies: {
football: ["psg", "nantes"],
rugby: ["france"],
},
},
status: "updated",
subDiff: [
{
name: "member",
previousValue: true,
currentValue: true,
status: "equal",
},
{
name: "hobbies",
previousValue: {
football: ["psg"],
rugby: ["france"],
},
currentValue: {
football: ["psg", "nantes"],
rugby: ["france"],
},
status: "updated",
subDiff: [
{
name: "football",
previousValue: ["psg"],
currentValue: ["psg", "nantes"],
status: "updated", // error the algo says it's equal...
},
{
name: "rugby",
previousValue: ["france"],
currentValue: ["france"],
status: "equal",
},
],
},
],
},
],
},
],
});
2 years ago
});
});