From e502606d4939832788010e1d86bbfa4c1e98013c Mon Sep 17 00:00:00 2001 From: Christopher Date: Fri, 26 Sep 2014 11:13:54 -0600 Subject: [PATCH] added support to drop the tables, we make use of it in unit tests in an afterEach method --- README.md | 2 +- lib/{createTables.js => databaseTasks.js} | 33 +++++- lib/knex-backend.js | 5 +- package.json | 2 +- setup.js | 2 +- test/runner.js | 130 ++++++++++++++++++---- 6 files changed, 140 insertions(+), 34 deletions(-) rename lib/{createTables.js => databaseTasks.js} (73%) diff --git a/README.md b/README.md index bdb374f..f0ec0a5 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ eg: node setup.js 'travis_ci_test', 'postgres', '12345', 'acl_', 192.168.56.10, eg: node setup.js null, null, null, 'acl_', null, null, 'postgres://postgres:12345@192.168.56.10:5432/travis_ci_test' typically passing db is for use within code (we use it for rebuilding acl in unit tests) -var createTables = require('node_modules/acl-knex/lib/createTables').createTables; +var createTables = require('node_modules/acl-knex/lib/databaseTasks').createTables; createTables([ null, null, diff --git a/lib/createTables.js b/lib/databaseTasks.js similarity index 73% rename from lib/createTables.js rename to lib/databaseTasks.js index df6fc99..f06cbcf 100644 --- a/lib/createTables.js +++ b/lib/databaseTasks.js @@ -21,9 +21,9 @@ function tmpl(str, ctx) { return sql.replace(/\?/g, function() { return '$' + n++; }); } -function createTables(args, callback) { +function getDB(args, callback) { var connection = null; - var db_name = args[0], username = args[1], password = args[2], prefix = args[3], db_host = args[4], db_port = args[5], db_url = args[6], db = args[7]; + var db_name = args[0], username = args[1], password = args[2], db_host = args[4], db_port = args[5], db_url = args[6], db = args[7]; if (!db && !db_url) { if (!db_name) throw Error('no db_name (1st arg) supplied'); if (!username) throw Error('no username (2nd arg) supplied'); @@ -41,14 +41,34 @@ function createTables(args, callback) { connection = db_url; } + return db = knex({ + client: 'postgres', + connection: connection + }); +} + +function dropTables(args, callback) { + var prefix = args[3], db = args[7]; + + if (!db) { + db = getDB(args); + } if (!prefix) prefix = 'acl_'; + db.raw(tmpl(downSql, {'prefix': prefix})) + .then(function() { + callback(null, db); + }) + ; +} + +function createTables(args, callback) { + var prefix = args[3], db = args[7]; + if (!db) { - db = knex({ - client: 'postgres', - connection: connection - }); + db = getDB(args); } + if (!prefix) prefix = 'acl_'; db.raw(tmpl(downSql+upSql, {'prefix': prefix})) .then(function() { @@ -58,3 +78,4 @@ function createTables(args, callback) { } exports.createTables = createTables; +exports.dropTables = dropTables; \ No newline at end of file diff --git a/lib/knex-backend.js b/lib/knex-backend.js index 9e96cc2..72a9751 100644 --- a/lib/knex-backend.js +++ b/lib/knex-backend.js @@ -7,7 +7,7 @@ var contract = require('./contract'); var async = require('async'); var _ = require('lodash'); -var createTables = require('../lib/createTables').createTables; +var createTables = require('../lib/databaseTasks').createTables; function KnexDBBackend(db, client, prefix){ this.db = db; @@ -349,6 +349,7 @@ KnexDBBackend.prototype = { } }; -KnexDBBackend.prototype.setup = require('../lib/createTables').createTables; +KnexDBBackend.prototype.setup = createTables; +KnexDBBackend.prototype.teardown = require('../lib/databaseTasks').dropTables; exports = module.exports = KnexDBBackend; diff --git a/package.json b/package.json index 7e8bdbc..4d46423 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "acl-knex", - "version": "0.2.0", + "version": "0.2.1", "description": "A Knex.js backend for node_acl", "keywords": [ "middleware", diff --git a/setup.js b/setup.js index acbde9c..56fbd04 100644 --- a/setup.js +++ b/setup.js @@ -1,6 +1,6 @@ 'use strict'; -var createTables = require('./lib/createTables').createTables; +var createTables = require('./lib/databaseTasks').createTables; createTables(process.argv.slice(2), function() { process.exit(); diff --git a/test/runner.js b/test/runner.js index c905407..267ec6b 100644 --- a/test/runner.js +++ b/test/runner.js @@ -3,6 +3,8 @@ var knex = require('knex'); var KnexBackend = require('../'); var tests = require('../node_modules/acl/test/tests'); +var assert = require('chai').assert; +var error = null; function run() { Object.keys(tests).forEach(function (test) { @@ -11,40 +13,122 @@ function run() { } describe('Postgres', function () { - describe('with passing db', function () { - before(function (done) { - var self = this; - var db = knex({ - client: 'postgres', - connection: 'postgres://postgres@127.0.0.1:5432/travis_ci_test' + describe('testing setup method', function () { + before(function () { + error = null; + }); + + describe('with passing db', function () { + before(function (done) { + var self = this; + var db = knex({ + client: 'postgres', + connection: 'postgres://postgres@127.0.0.1:5432/travis_ci_test' + }); + new KnexBackend().setup([null, null, null, null, null, null, null, db], function(err, db) { + error = err; + if (err) return done(err); + done(); + }); }); - new KnexBackend().setup([null, null, null, null, null, null, null, db], function(err, db) { - if (err) return done(err); - self.backend = new KnexBackend(db, 'postgres', 'acl_'); - done(); + + it('should create tables in database', function () { + assert(!error); + }); + + describe('and then using teardown method', function () { + before(function (done) { + var self = this; + var db = knex({ + client: 'postgres', + connection: 'postgres://postgres@127.0.0.1:5432/travis_ci_test' + }); + new KnexBackend().teardown([null, null, null, null, null, null, null, db], function(err, db) { + error = err; + if (err) return done(err); + done(); + }); + }); + + it('should drop tables in database', function () { + assert(!error); + }); }); }); - run(); - }); - describe('with connection string', function () { - before(function (done) { - var self = this; + describe('with connection string', function () { + before(function (done) { + var self = this; + + new KnexBackend().setup([null, null, null, null, null, null, 'postgres://postgres@127.0.0.1:5432/travis_ci_test'], function(err, db) { + error = err; + if (err) return done(err); + done(); + }); + }); - new KnexBackend().setup([null, null, null, null, null, null, 'postgres://postgres@127.0.0.1:5432/travis_ci_test'], function(err, db) { - if (err) return done(err); - self.backend = new KnexBackend(db, 'postgres', 'acl_'); - done(); + it('should create tables in database', function () { + assert(!error); + }); + + describe('and then using teardown method', function () { + before(function (done) { + var self = this; + + new KnexBackend().teardown([null, null, null, null, null, null, 'postgres://postgres@127.0.0.1:5432/travis_ci_test'], function(err, db) { + error = err; + if (err) return done(err); + done(); + }); + }); + + it('should drop tables in database', function () { + assert(!error); + }); }); }); - run(); + describe('without connection string', function () { + before(function (done) { + var self = this; + + new KnexBackend().setup(['travis_ci_test', 'postgres'], function(err, db) { + error = err; + if (err) return done(err); + done(); + }); + }); + + it('should create tables in database', function () { + assert(!error); + }); + + describe('and then using teardown method', function () { + before(function (done) { + var self = this; + + new KnexBackend().teardown(['travis_ci_test', 'postgres'], function(err, db) { + error = err; + if (err) return done(err); + done(); + }); + }); + + it('should drop tables in database', function () { + assert(!error); + }); + }); + }); }); - describe('without connection string', function () { + + describe('Acl Test', function () { before(function (done) { var self = this; - - new KnexBackend().setup(['travis_ci_test', 'postgres'], function(err, db) { + var db = knex({ + client: 'postgres', + connection: 'postgres://postgres@127.0.0.1:5432/travis_ci_test' + }); + new KnexBackend().setup([null, null, null, null, null, null, null, db], function(err, db) { if (err) return done(err); self.backend = new KnexBackend(db, 'postgres', 'acl_'); done();