import { pretty, simpleCopy, simpleEquals } from '../src/utils/helpers'; import { buildAttributeChange } from '../src/models/audit'; let cases = [{ old: { item0: { field1: 10, field2: ['a', 'b', 'c'], field3: {a: 10, b: 20}, }, item1: { field1: 11, field2: ['a', 'b', 'd'], field3: {a: 11, b: 21}, }, item2: { field1: 12, field2: ['a', 'b', 'e'], field3: {a: 12, b: 22}, }, }, new: { item1: { field1: 11, field2: ['a', 'b', 'd'], field3: {a: 11, b: 21}, }, item2: { field1: 12, field2: ['a', 'd', 'e'], field3: {a: 14, b: 22}, }, item3: { field1: 13, field2: ['a', 'b', 'f'], field3: {a: 13, b: 23}, }, }, expected: { item0: null, item2: { field2: {old: ['a', 'b', 'e'], new: ['a', 'd', 'e']}, field3: {old: {a: 12, b: 22}, new: {a: 14, b: 22}}, }, item3: { field1: 13, field2: ['a', 'b', 'f'], field3: {a: 13, b: 23}, }, }, }, { old: { item0: { field1: 10, field2: ['a', 'b', 'c'], field3: {a: 10, b: 20}, }, }, new: { item0: { field2: ['a', 'b', 'c'], field3: {a: 10, b: 20}, field1: 10, }, }, expected: undefined, }, { old: 10, new: 20, expected: {old: 10, new: 20}, }, { old: 10, new: 10, expected: undefined, }, { old: [1,2,3], new: [1,2,3,4], expected: {old: [1,2,3], new: [1,2,3,4]}, }, { old: [1,2,3], new: [1,2,3], expected: undefined, }, { old: true, new: 'abc', expected: {old: true, new: 'abc'}, }]; let success = true; for (const c of cases) { let changes = buildAttributeChange(c.old, c.new) if (!simpleEquals(changes, c.expected)) { console.log(`'buildAttributeChange()' did not build expected change.`); console.log(`old: ${pretty(c.old)}\nnew: ${pretty(c.new)}`); console.log(`changes: ${pretty(changes)}\nexpected: ${pretty(c.expected)}`); success = false; } } export default success;