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", }, ], }); }); });