0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-11-28 07:59:02 +01:00
mongodb/jstests/views/views_change.js
Geert Bosch 7f17bd8ee6 SERVER-24823 Add admin commands, durable system.views catalog
Consolidate disallowed commands in views_all_commands.js testing.
2016-07-24 16:29:36 -04:00

73 lines
2.5 KiB
JavaScript

// Tests the behavior of views when the backing view or collection is changed.
(function() {
"use strict";
// For arrayEq.
load("jstests/aggregation/extras/utils.js");
let viewDB = db.getSiblingDB("views_change");
let collection = viewDB.collection;
let view = viewDB.view;
let viewOnView = viewDB.viewOnView;
// Convenience functions.
let resetCollectionAndViews = function() {
viewDB.runCommand({drop: "collection"});
viewDB.runCommand({drop: "view"});
viewDB.runCommand({drop: "viewOnView"});
assert.commandWorked(viewDB.runCommand({create: "collection"}));
assert.commandWorked(viewDB.runCommand({
create: "view",
viewOn: "collection",
projection: {_id: 0},
pipeline: [{$match: {a: 1}}]
}));
assert.commandWorked(viewDB.runCommand(
{create: "viewOnView", viewOn: "view", pipeline: [{$match: {b: 1}}]}));
};
let assertFindResultEq = function(collName, expected) {
let res = viewDB.runCommand({find: collName, filter: {}, projection: {_id: 0, a: 1, b: 1}});
assert.commandWorked(res);
let cursor = new DBCommandCursor(db.getMongo(), res);
assert(arrayEq(cursor.toArray(), expected));
};
let doc = {a: 1, b: 1};
resetCollectionAndViews();
// A view is updated when the backing collection is updated.
assert.writeOK(collection.insert(doc));
printjson(viewDB.collection.find().toArray());
printjson(viewDB.view.find().toArray());
assertFindResultEq("view", [doc]);
assert.writeOK(collection.update({a: 1}, {$set: {a: 2}}));
assertFindResultEq("view", []);
resetCollectionAndViews();
// A view is updated when a backing view is updated.
assert.writeOK(collection.insert(doc));
assertFindResultEq("viewOnView", [doc]);
assert.commandWorked(
viewDB.runCommand({collMod: "view", pipeline: [{$match: {nonexistent: 1}}]}));
assertFindResultEq("viewOnView", []);
resetCollectionAndViews();
// A view appears empty if the backing collection is dropped.
assert.writeOK(collection.insert(doc));
assertFindResultEq("view", [doc]);
assert.commandWorked(viewDB.runCommand({drop: "collection"}));
assertFindResultEq("view", []);
resetCollectionAndViews();
// A view appears empty if a backing view is dropped.
assert.writeOK(collection.insert(doc));
assertFindResultEq("viewOnView", [doc]);
assert.commandWorked(viewDB.runCommand({drop: "view"}));
assertFindResultEq("viewOnView", []);
}());