var update = require("../dist/update").default; function clone(a) { return JSON.parse(JSON.stringify(a)); } function apply_update(test, desc, input, update_v, expected) { var orig = clone(input); var output = update(input, update_v); test.deepEqual(output, expected, "update applied correctly: " + desc); test.ok(input != output, "new structure created: " + desc); test.deepEqual(input, orig, "original not modified: " + desc); } exports.testUpdate = function(test){ // set apply_update(test, "simple set", {}, { a: { $set: 1} }, { a: 1 } ); apply_update(test, "nested set", { a: { b: 1 }, c: 2 }, { a: { b: { '$set': 5 } } }, { a: { b: 5 }, c: 2 } ); apply_update(test, "set, auto-vivify", { c: 2 }, { a: { b: { '$set': 5 } } }, { a: { b: 5 }, c: 2 } ); // unset apply_update(test, "unset", { a: { b: 1, z: 2 }, c: 2 }, { a: { '$unset': 'b' } }, { a: { z: 2 }, c: 2 } ); apply_update(test, "unset auto-vivify", {}, { a: { '$unset': 'b' } }, { a: {} } ); // merge apply_update(test, "merge", { a: 1, b: 2 }, { '$merge': { c: 3, d: { e: 4 } } }, { a: 1, b: 2, c: 3, d: { e: 4 } } ); apply_update(test, "merge overwrites", { a: 1, b: 2, c: 9 }, { '$merge': { c: 3, d: { e: 4 } } }, { a: 1, b: 2, c: 3, d: { e: 4 } } ); apply_update(test, "merge auto-vivify", {}, { a: { b: { '$merge': { c: 1 } } } }, { a: { b: { c: 1 } } } ); // push apply_update(test, "push", { a: [ 0, ], }, { a: { '$push': [ 1, 2 ] } }, { a: [ 0, 1, 2 ] } ); apply_update(test, "push auto-vivify", {}, { a: { '$push': [ 1, 2 ] } }, { a: [ 1, 2 ] } ); // unshift apply_update(test, "unshift", { a: [ 0 ] }, { a: { '$unshift': [ 1, 2 ] } }, { a: [ 1, 2, 0 ] } ); apply_update(test, "unshift auto-vivify", {}, { a: { '$unshift': [ 1, 2 ] } }, { a: [ 1, 2 ] } ); // splice apply_update(test, "splice add", { a: [ 0, 1 ], }, { a: { '$splice': [ [ 1, 0, 8, 9 ] ] } }, { a: [ 0, 8, 9, 1 ] } ); apply_update(test, "splice del", { a: [ 0, 1, 2 ] }, { a: { '$splice': [ [ 1, 1, 8, 9 ] ] } }, { a: [ 0, 8, 9, 2 ] } ); apply_update(test, "splice multi", { a: [ 0, 1, 2 ] }, { a: { '$splice': [ [ 1, 1, 8, 9 ], [ 0, 2, 6, {a: 1} ] ] } }, { a: [ 6, { a: 1 }, 9, 2 ] } ); apply_update(test, "splice auto-vivify", {}, { a: { '$splice': [ [ 0, 0, 8, 9 ] ] } }, { a: [ 8, 9 ] } ); test.done(); };