diff --git a/packages/mongo-livedata/observe_changes_tests.js b/packages/mongo-livedata/observe_changes_tests.js index 3ea7ab33f4..1831718afc 100644 --- a/packages/mongo-livedata/observe_changes_tests.js +++ b/packages/mongo-livedata/observe_changes_tests.js @@ -173,7 +173,7 @@ if (Meteor.isServer) { var c = makeCollection(); withCallbackLogger(test, ["added", "changed", "removed"], Meteor.isServer, function (logger) { var handle = c.find({ mac: 1, cheese: 2 }, - {fields:{noodles: 1, bacon: 1}}).observeChanges(logger); + {fields:{noodles: 1, bacon: 1, eggs: 1}}).observeChanges(logger); var barid = c.insert({thing: "stuff", mac: 1, cheese: 2}); logger.expectResultOnly("added", [barid, {}]); @@ -184,7 +184,11 @@ if (Meteor.isServer) { c.update(fooid, {noodles: "alright", potatoes: "tasty", apples: "ok", mac: 1, cheese: 2}); logger.expectResultOnly("changed", [fooid, {noodles: "alright", bacon: undefined}]); + + // Doesn't get update event, since modifies only hidden fields c.update(fooid, {noodles: "alright", potatoes: "meh", apples: "ok", mac: 1, cheese: 2}); + logger.expectNoResult(); + c.remove(fooid); logger.expectResultOnly("removed", [fooid]); c.remove(barid); @@ -198,6 +202,29 @@ if (Meteor.isServer) { onComplete(); }); }); + + Tinytest.addAsync("observeChanges - unordered - specific fields + modify on excluded fields", function (test, onComplete) { + var c = makeCollection(); + withCallbackLogger(test, ["added", "changed", "removed"], Meteor.isServer, function (logger) { + var handle = c.find({ mac: 1, cheese: 2 }, + {fields:{noodles: 1, bacon: 1, eggs: 1}}).observeChanges(logger); + var fooid = c.insert({noodles: "good", bacon: "bad", apples: "ok", mac: 1, cheese: 2}); + + logger.expectResultOnly("added", [fooid, {noodles: "good", bacon: "bad"}]); + + + // Noodles go into shadow, mac appears as eggs + c.update(fooid, {$rename: { noodles: 'shadow', apples: 'eggs' }}); + logger.expectResultOnly("changed", + [fooid, {eggs:"ok", noodles: undefined}]); + + c.remove(fooid); + logger.expectResultOnly("removed", [fooid]); + logger.expectNoResult(); + handle.stop(); + onComplete(); + }); + }); }