summaryrefslogtreecommitdiff
path: root/node_modules/mongoose/test/common.js
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2012-09-24 16:22:07 -0400
committerJules Laplace <jules@okfoc.us>2012-09-24 16:22:07 -0400
commit686106d544ecc3b6ffd4db2b665d3bc879a58d8c (patch)
treea5b5e50237cef70e12f0745371896e96f5f6d578 /node_modules/mongoose/test/common.js
ok
Diffstat (limited to 'node_modules/mongoose/test/common.js')
-rw-r--r--node_modules/mongoose/test/common.js145
1 files changed, 145 insertions, 0 deletions
diff --git a/node_modules/mongoose/test/common.js b/node_modules/mongoose/test/common.js
new file mode 100644
index 0000000..ffb3783
--- /dev/null
+++ b/node_modules/mongoose/test/common.js
@@ -0,0 +1,145 @@
+
+/**
+ * Module dependencies.
+ */
+
+var mongoose = require('../')
+ , should = require('should')
+ , Table = require('cli-table')
+ , Mongoose = mongoose.Mongoose
+ , Collection = mongoose.Collection
+ , Assertion = should.Assertion
+ , startTime = Date.now()
+ , queryCount = 0
+ , opened = 0
+ , closed = 0;
+
+/**
+ * Override all Collection related queries to keep count
+ */
+
+[ 'ensureIndex'
+ , 'findAndModify'
+ , 'findOne'
+ , 'find'
+ , 'insert'
+ , 'save'
+ , 'update'
+ , 'remove'
+ , 'count'
+ , 'distinct'
+].forEach(function (method) {
+
+ var oldMethod = Collection.prototype[method];
+
+ Collection.prototype[method] = function () {
+ queryCount++;
+ return oldMethod.apply(this, arguments);
+ };
+
+});
+
+/**
+ * Override Collection#onOpen to keep track of connections
+ */
+
+var oldOnOpen = Collection.prototype.onOpen;
+
+Collection.prototype.onOpen = function(){
+ opened++;
+ return oldOnOpen.apply(this, arguments);
+};
+
+/**
+ * Override Collection#onClose to keep track of disconnections
+ */
+
+var oldOnClose = Collection.prototype.onClose;
+
+Collection.prototype.onClose = function(){
+ closed++;
+ return oldOnClose.apply(this, arguments);
+};
+
+/**
+ * Assert that a connection is open or that mongoose connections are open.
+ * Examples:
+ * mongoose.should.be.connected;
+ * db.should.be.connected;
+ *
+ * @api public
+ */
+
+Assertion.prototype.__defineGetter__('connected', function(){
+ if (this.obj instanceof Mongoose)
+ this.obj.connections.forEach(function(connected){
+ c.should.be.connected;
+ });
+ else
+ this.obj.readyState.should.eql(1);
+});
+
+/**
+ * Assert that a connection is closed or that a mongoose connections are closed.
+ * Examples:
+ * mongoose.should.be.disconnected;
+ * db.should.be.disconnected;
+ *
+ * @api public
+ */
+
+Assertion.prototype.__defineGetter__('disconnected', function(){
+ if (this.obj instanceof Mongoose)
+ this.obj.connections.forEach(function(){
+ c.should.be.disconnected;
+ });
+ else
+ this.obj.readyState.should.eql(0);
+});
+
+/**
+ * Create a connection to the test database.
+ * You can set the environmental variable MONGOOSE_TEST_URI to override this.
+ *
+ * @api private
+ */
+
+module.exports = function (options) {
+ var uri;
+
+ if (options && options.uri) {
+ uri = options.uri;
+ delete options.uri;
+ } else {
+ uri = process.env.MONGOOSE_TEST_URI ||
+ 'mongodb://localhost/mongoose_test'
+ }
+
+ return mongoose.createConnection(uri, options);
+};
+
+/**
+ * Provide stats for tests
+ */
+
+process.on('beforeExit', function(){
+ var table = new Table({
+ head: ['Stat', 'Time (ms)']
+ , colWidths: [23, 15]
+ });
+
+ table.push(
+ ['Queries run', queryCount]
+ , ['Time ellapsed', Date.now() - startTime]
+ , ['Connections opened', opened]
+ , ['Connections closed', closed]
+ );
+
+ console.error(table.toString());
+});
+
+/**
+ * Module exports.
+ */
+
+module.exports.mongoose = mongoose;