6 changed files with 168 additions and 8 deletions
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
module.exports = { |
||||
transform: { |
||||
"^.+\\.(ts|js)$": "ts-jest", |
||||
}, |
||||
}; |
@ -0,0 +1,2 @@
@@ -0,0 +1,2 @@
|
||||
export { getObjectDiff } from "./object-diff"; |
||||
export { getListDiff } from "./list-diff"; |
@ -1,7 +1,130 @@
@@ -1,7 +1,130 @@
|
||||
import { getListDiff } from "../src/list-diff"; |
||||
|
||||
describe("getListDiff", () => { |
||||
it("", () => { |
||||
expect(getListDiff(null, null)).toStrictEqual(null); |
||||
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", |
||||
}, |
||||
], |
||||
}); |
||||
}); |
||||
}); |
||||
|
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
{ |
||||
"compilerOptions": { |
||||
"declaration": true, |
||||
"declarationDir": "./dist", |
||||
"jsx": "react", |
||||
"lib": ["esnext", "dom"], |
||||
"module": "esnext", |
||||
"moduleResolution": "node", |
||||
"noUnusedParameters": true, |
||||
"esModuleInterop": true, |
||||
"noImplicitAny": true, |
||||
"outDir": "./dist", |
||||
"strict": true, |
||||
"target": "es5", |
||||
"resolveJsonModule": true, |
||||
"allowSyntheticDefaultImports": true |
||||
}, |
||||
"include": ["src/**/*.tsx"], |
||||
"exclude": ["node_modules"] |
||||
} |
Loading…
Reference in new issue