array-comparisoncomparisoncomparison-tooldeep-diffdiffjson-diffnodejsobject-comparisonobject-diffobjectdiffobjectdifferencereactstreamingstreaming-datatypescript
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.
130 lines
3.0 KiB
130 lines
3.0 KiB
import { getListDiff } from "../src/list-diff"; |
|
|
|
describe("getListDiff", () => { |
|
it("returns an empty diff if no lists are provided", () => { |
|
expect(getListDiff(null, null)).toStrictEqual({ type: "list", diff: [] }); |
|
}); |
|
it("consider previous list as completely deleted if no next list is provided", () => { |
|
const res = getListDiff(["mbappe", "mendes", "verratti", "ruiz"], null); |
|
console.log("res", JSON.stringify(res, null, 2)); |
|
expect( |
|
getListDiff(["mbappe", "mendes", "verratti", "ruiz"], null) |
|
).toStrictEqual({ |
|
type: "list", |
|
diff: [ |
|
{ |
|
value: "mbappe", |
|
prevIndex: 0, |
|
newIndex: null, |
|
indexDiff: null, |
|
status: "deleted", |
|
}, |
|
{ |
|
value: "mendes", |
|
prevIndex: 1, |
|
newIndex: null, |
|
indexDiff: null, |
|
status: "deleted", |
|
}, |
|
{ |
|
value: "verratti", |
|
prevIndex: 2, |
|
newIndex: null, |
|
indexDiff: null, |
|
status: "deleted", |
|
}, |
|
{ |
|
value: "ruiz", |
|
prevIndex: 3, |
|
newIndex: null, |
|
indexDiff: null, |
|
status: "deleted", |
|
}, |
|
], |
|
}); |
|
}); |
|
it("consider next list as completely added if no previous list is provided", () => { |
|
expect( |
|
getListDiff(null, ["mbappe", "mendes", "verratti", "ruiz"]) |
|
).toStrictEqual({ |
|
type: "list", |
|
diff: [ |
|
{ |
|
value: "mbappe", |
|
prevIndex: null, |
|
newIndex: 0, |
|
indexDiff: null, |
|
status: "added", |
|
}, |
|
{ |
|
value: "mendes", |
|
prevIndex: null, |
|
newIndex: 1, |
|
indexDiff: null, |
|
status: "added", |
|
}, |
|
{ |
|
value: "verratti", |
|
prevIndex: null, |
|
newIndex: 2, |
|
indexDiff: null, |
|
status: "added", |
|
}, |
|
{ |
|
value: "ruiz", |
|
prevIndex: null, |
|
newIndex: 3, |
|
indexDiff: null, |
|
status: "added", |
|
}, |
|
], |
|
}); |
|
}); |
|
it("detects changed values in the list", () => { |
|
expect( |
|
getListDiff( |
|
["mbappe", "mendes", "verratti", "ruiz"], |
|
["mbappe", "messi", "ruiz"] |
|
) |
|
).toStrictEqual({ |
|
type: "list", |
|
diff: [ |
|
{ |
|
value: "mbappe", |
|
prevIndex: 0, |
|
newIndex: 0, |
|
indexDiff: 0, |
|
status: "equal", |
|
}, |
|
{ |
|
value: "mendes", |
|
prevIndex: 1, |
|
newIndex: null, |
|
indexDiff: null, |
|
status: "deleted", |
|
}, |
|
{ |
|
value: "verratti", |
|
prevIndex: 2, |
|
newIndex: null, |
|
indexDiff: null, |
|
status: "deleted", |
|
}, |
|
{ |
|
value: "messi", |
|
prevIndex: null, |
|
newIndex: 1, |
|
indexDiff: null, |
|
status: "added", |
|
}, |
|
{ |
|
value: "ruiz", |
|
prevIndex: 3, |
|
newIndex: 2, |
|
indexDiff: -1, |
|
status: "moved", |
|
}, |
|
], |
|
}); |
|
}); |
|
});
|
|
|