diff --git a/test/fixtures/test-user.json b/test/fixtures/test-user.json deleted file mode 100644 index f337d44..0000000 --- a/test/fixtures/test-user.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "username": "test", - "password": "test", - "email": "test@test.test" -} \ No newline at end of file diff --git a/test/helper.js b/test/helper.js deleted file mode 100644 index 78158c4..0000000 --- a/test/helper.js +++ /dev/null @@ -1,283 +0,0 @@ -var nconf = require('nconf'), - fs = require('fs'), - async = require('async'), - logger = require('winston'), - express = require('express'), - request = require('supertest'), - app = null, - server = null, - opts = null, - testData = {}, - agent = null, - testUser = null; - -exports.options = function (options) { - opts = options; - - testData = {}; -}; - -/** PREPARE helpers */ - -exports.prepare = function (options) { - return function (done) { - opts = options; - - if (!opts.testData) { - opts.testData = {}; - } - - testData = {}; - - var functions = [ - exports._prepareNconf - ]; - - //todo: remove this unnecessary check - if (require('mongoose').Connection.STATES.connected === - require('mongoose').connection.readyState) { - functions.push(exports._cleanupDb); - } - - if (opts.db || opts.http || opts.session) { - functions.push(exports._prepareDb); - } - - if (opts.http || opts.session) { - functions.push(exports._prepareExpress); - } - - if (opts.session) { - functions.push(exports._prepareTestSession); - } - - // setup test data - for (var modelName in opts.testData) { - if (opts.testData.hasOwnProperty(modelName)) { - exports.setTestData(modelName, opts.testData[modelName]); - } - } - - async.series(functions, done); - }; -}; - -exports._prepareNconf = function (done) { - nconf.argv() - .env() - .file({file: './settings.defaults.json'}); - - // use a test database - nconf.set('db:name', nconf.get('db:name') + '-test'); - - // use a test port - nconf.set('http:port', nconf.get('http:port') + 1); - - // remove default winston transport - logger.remove(logger.transports.Console); - - if (!nconf.get('test:logging')) { - // log only errors - nconf.set('logger:console:level', 'error'); - } - - logger.add(logger.transports.Console, nconf.get('logger:console')); - - done(); -}; - -exports._prepareDb = function (done) { - require('./../config/mongoose')(function () { - // bootstrap models - var models_path = __dirname + '/../models'; - - fs.readdirSync(models_path).forEach(function (file) { - require(models_path + '/' + file); - }); - - if (opts.createDataOnPrepare) { - exports.createTestData()(done); - } else { - done(); - } - }); -}; - -exports._prepareExpress = function (done) { - app = express(); - - require('./../config/express')(app); // configuration express application - require('./../config/passport')(app); // configure authorization - require('./../config/routes')(app); // initialize express routes - - server = app.listen(nconf.get('http:port'), nconf.get('http:host'), 511, done); -}; - -exports._prepareTestSession = function(done) { - if (!testUser) { - done(); - - return null; - } - - agent = request.agent(app); - - agent - .post('/admin/login') - .send({ - username: testUser.username, - password: testUser.password - }) - .end(done); - - return null; -}; - -/** CLEANUP helpers */ - -exports.cleanup = function () { - return function (done) { - var functions = [ - exports._cleanupNconf - ]; - - if (opts.db || opts.http) { - functions.push(exports._cleanupDb); - } - - if (opts.http) { - functions.push(exports._cleanupExpress); - } - - async.series(functions, done); - }; -}; - -exports._cleanupNconf = function (done) { - nconf.reset(); - - done(); -}; - -exports._cleanupDb = function (done) { - exports.deleteTestData()(function () { - require('mongoose').disconnect(function (err) { - if(err) throw err; - - // wait a bit to let mongoose finish its pending tasks - // todo: change that - setTimeout(done, 100); - }); - }); -}; - -exports._cleanupExpress = function (done) { - server.close(done); -}; - -/** UTILS **/ - -// return the express app -exports.getApp = function () { - return app; -}; - -// inject data to db before tests -exports.setTestData = function (modelName, data) { - if(typeof data !== 'array') { - // if a single instance is given, convert to array - data = [data]; - } - - if (!testData[modelName]) { - testData[modelName] = data; - } else { - // merge arrays - testData[modelName].push.apply(testData[modelName], data); - } -}; - -/** created to clean/re-create test data before and after each test */ - -exports.createTestData = function () { - return function(done) { - if (testData._isCreated) { - done(); - - return null; - } - - var functions = [], data, Model, modelInstance; - - for (var modelName in testData) { - if (modelName !== '_isCreated' && testData.hasOwnProperty(modelName)) { - data = testData[modelName]; - - Model = require('mongoose').model(modelName); - - for (var i = 0; i < data.length; i += 1) { - modelInstance = new Model(data[i]); - - functions.push(modelInstance.save.bind(modelInstance)); - - // if this is the first User model instance, save it as the test user - if (modelName === 'User' && i === 0) { - testUser = modelInstance; - } - } - } - } - - async.parallel(functions, function (err) { - if (err) { - throw err; - } - - testData._isCreated = true; - - done(); - }); - }; -}; - -exports.deleteTestData = function () { - return function(done) { - var functions = [], model; - - for (var modelName in testData) { - if (modelName !== '_isCreated' && testData.hasOwnProperty(modelName)) { - model = require('mongoose').model(modelName); - - functions.push(function (done) { - this.remove({}, done); - }.bind(model)); - } - } - - async.parallel(functions, function (err) { - if (err) { - throw err; - } - - testData._isCreated = false; - - done(); - }); - }; -}; - -exports.resetTestData = function (done) { - exports.deleteTestData()(function () { - testData = {}; - - done(); - }); -}; - -exports.getTestUser = function () { - return testUser; -}; - -exports.getTestSession = function () { - return agent; -}; \ No newline at end of file diff --git a/test/helper.test.js b/test/helper.test.js deleted file mode 100644 index c7e4488..0000000 --- a/test/helper.test.js +++ /dev/null @@ -1,91 +0,0 @@ - -/*global describe, it */ - -var helper = require('./helper'), - async = require('async'), - expect = require('chai').expect, - request = require('supertest'), - mongoose = require('mongoose'); - -describe('test-helper', function () { - describe('#prepare', function () { - it('should prepare the database', function (done) { - helper.prepare({db: true})(function () { - expect(mongoose.Connection.STATES.connected) - .to.be.equal(mongoose.connection.readyState); - - helper.cleanup()(done); - }); - }); - - it('should prepare the express app', function (done) { - helper.prepare({http: true})(function () { - request(helper.getApp()).get('/').expect(200) - .end(function (err, res) { - if (err) throw err; - - helper.cleanup()(done); - }); - }); - }); - - it('should prepare a test user', function (done) { - var options = { - db: true, - testData: { - User: require('./fixtures/test-user.json') - } - }; - - async.series([ - helper.prepare(options), - helper.createTestData() - ], function () { - expect(helper.getTestUser()) - .to.exist(); - - async.series([ - helper.deleteTestData(), - helper.cleanup() - ], function () { - done(); - }); - }); - }); - }); - - describe('#cleanup', function () { - it('should clear the database', function (done) { - helper.prepare({db: true})(function () { - expect(mongoose.Connection.STATES.connected) - .to.be.equal(mongoose.connection.readyState); - - helper.cleanup()(function () { - expect(mongoose.Connection.STATES.connected) - .to.be.not.equal(mongoose.connection.readyState); - - mongoose.disconnect(done); - }); - }); - }); - - it('should stop the express app', function (done) { - helper.prepare({http: true})(function () { - helper.cleanup()(function () { - try { - request(helper.getApp()) - .get('/') - .timeout(1000) - .end(function (err, res) { - expect(err).to.exist(); - - done(); - }); - } catch (err) { - done(); - } - }); - }); - }); - }); -}); \ No newline at end of file diff --git a/test/mocha.opts b/test/mocha.opts deleted file mode 100644 index a859d61..0000000 --- a/test/mocha.opts +++ /dev/null @@ -1,2 +0,0 @@ ---recursive ---timeout=5000 \ No newline at end of file diff --git a/test/models/article.test.js b/test/models/article.test.js deleted file mode 100644 index ff5d276..0000000 --- a/test/models/article.test.js +++ /dev/null @@ -1,52 +0,0 @@ - -/*global describe, it, before, after, beforeEach, afterEach */ - -var helper = require('./../helper'), - async = require('async'), - expect = require('chai').expect, - Article = null, - author = null; - -describe('article#model', function () { - before(function (done) { - async.series([ - helper.prepare({ - db: true, - testData: { - User: require('./../fixtures/test-user.json') - } - }), - helper.createTestData(), - function (done) { - Article = require('mongoose').model('Article'); - - var tmp = helper.getTestUser(); - - author = { - id: tmp._id, - username: tmp.username - }; - - done(); - } - ], done); - }); - after(helper.cleanup()); - - beforeEach(helper.createTestData()); - afterEach(helper.deleteTestData()); - - it('should create an article', function (done) { - var article = new Article({ - content: 'test', - title: 'title', - author: author - }); - - article.save(function (err, article) { - if (err) throw err; - - done(); - }); - }); -}); \ No newline at end of file diff --git a/test/models/user.test.js b/test/models/user.test.js deleted file mode 100644 index 075c300..0000000 --- a/test/models/user.test.js +++ /dev/null @@ -1,58 +0,0 @@ - -/*global describe, it, before, after, beforeEach, afterEach */ - -var helper = require('./../helper'), - async = require('async'), - expect = require('chai').expect, - User = null; - -describe('user#model', function () { - before(helper.prepare({ - db: true, - testData: { - User: require('./../fixtures/test-user.json') - } - })); - after(helper.cleanup()); - - beforeEach(function () { - User = require('mongoose').model('User'); - }); - afterEach(helper.deleteTestData()); - - it('should create an user', function (done) { - var user = new User({ - username: 'test', - email: 'test@test.test', - password: 'test' - }); - - user.save(function (err, user) { - if (err) { - throw err; - } - - expect(user).to.exist(); - - done(); - }); - }); - - describe('authenticate()', function () { - beforeEach(helper.createTestData()); - - afterEach(helper.deleteTestData()); - - it('should return true if password match', function () { - var res = helper.getTestUser().authenticate('test'); - - expect(res).to.be.equal(true); - }); - - it('should return false if password mismatch', function () { - var res = helper.getTestUser().authenticate('false'); - - expect(res).to.be.equal(false); - }); - }); -}); \ No newline at end of file diff --git a/test/views/adminbar.test.js b/test/views/adminbar.test.js deleted file mode 100644 index 787c4fb..0000000 --- a/test/views/adminbar.test.js +++ /dev/null @@ -1,36 +0,0 @@ - -/*global describe, before, after, it */ - -var helper = require('./../helper'), - nconf = require('nconf'), - cheerio = require('cheerio'), - expect = require('chai').expect, - request = require('supertest'); - -describe('adminbar#view', function () { - before(helper.prepare({ - db: true, // connect to a test database - http: true, // run express app - session: true, // create a test session (already authenticated) - createDataOnPrepare: true, - testData: { - User: require('./../fixtures/test-user.json') - } - })); - - after(helper.cleanup()); - - it('should display the admin bar when logged in', function (done) { - helper.getTestSession() - .get('/') - .expect(200) - .end(function (err, res) { - var $ = cheerio.load(res.text); - - // just check the page title - expect($('div.admin')).to.exist(); - - done(); - }); - }); -}); \ No newline at end of file diff --git a/test/views/home.test.js b/test/views/home.test.js deleted file mode 100644 index d19b477..0000000 --- a/test/views/home.test.js +++ /dev/null @@ -1,31 +0,0 @@ - -/*global describe, before, after, it */ - -var helper = require('./../helper'), - nconf = require('nconf'), - cheerio = require('cheerio'), - expect = require('chai').expect, - request = require('supertest'); - -describe('home#view', function () { - before(helper.prepare({ - db: true, // connect to a test database - http: true // run express app - })); - - after(helper.cleanup()); - - it('should load the home page', function (done) { - request(helper.getApp()) - .get('/') - .expect(200) - .end(function (err, res) { - var $ = cheerio.load(res.text); - - // just check the page title - expect($('h1').text()).to.be.equal(nconf.get('app:title')); - - done(); - }); - }); -}); \ No newline at end of file diff --git a/test/views/login.test.js b/test/views/login.test.js deleted file mode 100644 index f770388..0000000 --- a/test/views/login.test.js +++ /dev/null @@ -1,73 +0,0 @@ - -/*global describe, before, after, it, afterEach, beforeEach */ - -var helper = require('./../helper'), - nconf = require('nconf'), - cheerio = require('cheerio'), - expect = require('chai').expect, - request = require('supertest'); - -describe('login#view', function () { - before(helper.prepare({ - db: true, // connect to a test database - http: true, // run express app - testData: { - User: require('./../fixtures/test-user.json') - } - })); - after(helper.cleanup()); - - beforeEach(helper.createTestData()); - afterEach(helper.deleteTestData()); - - it('should load the login page', function (done) { - request(helper.getApp()) - .get('/admin/login') - .expect(200) - .end(function (err, res) { - var $ = cheerio.load(res.text), - $form = $('form'); - - expect($form).to.exist(); - - expect($form.attr('action')).to.be.equal('/admin/login'); - - expect($form.find('input[name="username"]')).to.exist(); - expect($form.find('input[name="password"]')).to.exist(); - - done(); - }); - }); - - it('should redirect to login page when login fails', function (done) { - request(helper.getApp()) - .post('/admin/login') - .send({ - username: 'fake', - password: 'fake' - }) - .expect(200) - .end(function (err, res) { - expect(res.header.location).to.be.equal('/admin/login'); - - done(); - }); - }); - - it('should redirect to home page when login is successful', function (done) { - var user = helper.getTestUser(); - - request(helper.getApp()) - .post('/admin/login') - .send({ - username: user.username, - password: 'test' - }) - .expect(200) - .end(function (err, res) { - expect(res.header.location).to.be.equal('/'); - - done(); - }); - }); -}); \ No newline at end of file