blob: d095d70decdb3466131f5085bd8350b5231d836b [file] [log] [blame]
import { DiffType } from "../src/utils/diff.js";
import { ObjectTransformer } from "../src/transform.js";
import { NodeBuilder, toPlainObject } from "./utils/tree.js";
describe("ObjectTransformer", () => {
it("can transform a simple object", () => {
const obj = {
obj: {
string: 'string',
number: 3,
},
array: [
{
nested: "item",
},
"two",
],
};
const expectedTransformedObj = toPlainObject(
new NodeBuilder().setTransformed().setName('root')
.setStableId('root').setChildren([
new NodeBuilder().setTransformed().setName('obj')
.setStableId('root.obj').setChildren([
new NodeBuilder().setTransformed().setName('string: string')
.setStableId('root.obj.string').setCombined().build(),
new NodeBuilder().setTransformed().setName('number: 3')
.setStableId('root.obj.number').setCombined().build(),
]).build(),
new NodeBuilder().setTransformed().setName('array')
.setStableId('root.array').setChildren([
new NodeBuilder().setTransformed().setName('0')
.setStableId('root.array.0').setChildren([
new NodeBuilder().setTransformed().setName('nested: item')
.setStableId('root.array.0.nested').setCombined().build(),
]).build(),
new NodeBuilder().setTransformed().setName("1: two")
.setStableId('root.array.1').setCombined().build(),
]).build()
]).build()
);
const transformedObj = new ObjectTransformer(obj, 'root', 'root')
.setOptions({ formatter: () => { } })
.transform();
expect(transformedObj).toEqual(expectedTransformedObj);
});
it("handles null as expected", () => {
const obj = {
obj: {
null: null,
},
}
const expectedTransformedObj = toPlainObject(
new NodeBuilder().setTransformed().setName('root')
.setStableId('root').setChildren([
new NodeBuilder().setTransformed().setName('obj')
.setStableId('root.obj').setChildren([
new NodeBuilder().setTransformed().setName('null: null')
.setStableId('root.obj.null').setCombined().build(),
]).build(),
]).build()
);
const transformedObj = new ObjectTransformer(obj, 'root', 'root')
.setOptions({ formatter: () => { } })
.transform();
expect(transformedObj).toEqual(expectedTransformedObj);
});
it("can generate a simple add diff", () => {
const oldObj = {
a: {
b: 1,
},
c: 2,
};
const newObj = {
a: {
b: 1,
d: 3,
},
c: 2,
};
const expectedTransformedObj = toPlainObject(
new NodeBuilder().setTransformed().setName('root')
.setStableId('root').setDiffType(DiffType.NONE).setChildren([
new NodeBuilder().setTransformed().setName('a')
.setStableId('root.a').setDiffType(DiffType.NONE).setChildren([
new NodeBuilder().setTransformed().setName('b: 1')
.setStableId('root.a.b').setDiffType(DiffType.NONE).setCombined().build(),
new NodeBuilder().setTransformed().setName('d: 3')
.setStableId('root.a.d').setDiffType(DiffType.ADDED).setCombined().build(),
]).build(),
new NodeBuilder().setTransformed().setName('c: 2').setStableId('root.c').setDiffType(DiffType.NONE).setCombined().build(),
]).build()
);
const transformedObj = new ObjectTransformer(newObj, 'root', 'root')
.setOptions({ formatter: () => { } })
.withDiff(oldObj)
.transform();
expect(transformedObj).toEqual(expectedTransformedObj);
});
it("can handle null", () => {
const oldObj = {
a: null,
};
const newObj = {
a: 1,
};
const expectedTransformedObj = toPlainObject(
new NodeBuilder().setTransformed().setName('root')
.setStableId('root').setDiffType(DiffType.NONE).setChildren([
new NodeBuilder().setTransformed().setName('a')
.setStableId('root.a').setDiffType(DiffType.NONE).setChildren([
new NodeBuilder().setTransformed().setName('1')
.setStableId('root.a.1').setDiffType(DiffType.ADDED).build(),
new NodeBuilder().setTransformed().setName('null')
.setStableId('root.a.null').setDiffType(DiffType.DELETED).build(),
]).build(),
]).build()
);
const transformedObj = new ObjectTransformer(newObj, 'root', 'root')
.setOptions({ formatter: () => { } })
.withDiff(oldObj)
.transform();
expect(transformedObj).toEqual(expectedTransformedObj);
});
it("can handle nested null", () => {
const oldObj = {
a: {
b: null,
},
c: 2,
};
const newObj = {
a: {
b: 1,
},
c: 2,
};
const expectedTransformedObj = toPlainObject(
new NodeBuilder().setTransformed().setName('root')
.setStableId('root').setDiffType(DiffType.NONE).setChildren([
new NodeBuilder().setTransformed().setName('a')
.setStableId('root.a').setDiffType(DiffType.NONE).setChildren([
new NodeBuilder().setTransformed().setName('b')
.setStableId('root.a.b').setDiffType(DiffType.NONE).setChildren([
new NodeBuilder().setTransformed().setName('1')
.setStableId('root.a.b.1').setDiffType(DiffType.ADDED).build(),
new NodeBuilder().setTransformed().setName('null')
.setStableId('root.a.b.null').setDiffType(DiffType.DELETED).build(),
]).build(),
]).build(),
new NodeBuilder().setTransformed().setName('c: 2')
.setStableId('root.c').setDiffType(DiffType.NONE).setCombined().build(),
]).build()
);
const transformedObj = new ObjectTransformer(newObj, 'root', 'root')
.setOptions({ formatter: () => { } })
.withDiff(oldObj)
.transform();
expect(transformedObj).toEqual(expectedTransformedObj);
});
});