diff --git a/lib/index.js b/lib/index.js index 8865f6b..e987546 100644 --- a/lib/index.js +++ b/lib/index.js @@ -32,8 +32,11 @@ internals.configure = function (opts) { return opts.sequelize.authenticate() .then(() => { const files = Models.getFiles(opts.models); - const models = Models.applyRelations(Models.load(files, opts.sequelize.import.bind(opts.sequelize))); - return models; + return Models.applyRelations(Models.load(files, opts.sequelize.import.bind(opts.sequelize))); + }, (err) => { + return Promise.reject( + new Error("An error occurred while attempting to connect to DB [" + opts.name + "], please check the configuration. Details : " + err.message) + ); }) .then((models) => { if (opts.sync) { @@ -45,7 +48,7 @@ internals.configure = function (opts) { .then((database) => { if (opts.onConnect) { let maybePromise = opts.onConnect(opts.sequelize); - if (maybePromise && typeof maybePromise.then === 'function') + if (maybePromise && typeof maybePromise.then === 'function') return maybePromise.then(() => database); } return database; @@ -77,6 +80,8 @@ exports.register = function(server, options, next) { .then((db) => { server.expose(opts.name, db); return Promise.resolve(db); + }, (err) => { + return Promise.reject(err) }) ]); }, []); @@ -84,6 +89,8 @@ exports.register = function(server, options, next) { Promise.all(configured) .then(() => { return next() + },(err) => { + return next(err) }) .catch((err) => { return next(err) diff --git a/test/index.js b/test/index.js index ed44d87..630f718 100644 --- a/test/index.js +++ b/test/index.js @@ -7,9 +7,6 @@ const Sinon = require('sinon'); const Hapi = require('hapi'); const Sequelize = require('sequelize'); -// Module globals -const internals = {}; - // Test shortcuts const lab = exports.lab = Lab.script(); const test = lab.test; @@ -30,7 +27,7 @@ lab.suite('hapi-sequelize', () => { const onConnect = function (database) { server.log('onConnect called'); - } + }; const spy = Sinon.spy(onConnect); @@ -59,6 +56,44 @@ lab.suite('hapi-sequelize', () => { }) }); + test('plugin fails to register when Sequelize fails to connect', { parallel: true }, (done) => { + + const server = new Hapi.Server(); + server.connection(); + + const onConnect = function (database) { + server.log('onConnect called'); + }; + + const spy = Sinon.spy(onConnect); + + const sequelize = new Sequelize('shop', 'root', '', { + host: '127.0.0.1', + port: 3307, + dialect: 'mysql' + }); + + server.register([ + { + register: require('../lib'), + options: [ + { + name: 'shop', + models: ['./test/models/**/*.js'], + sequelize: sequelize, + sync: true, + forceSync: true, + onConnect: spy + } + ] + } + ], (err) => { + expect(err).to.exist(); + expect(err.message).to.include('ECONNREFUSED'); + done(); + }) + }); + test('plugin throws error when no models are found', { parallel: true }, (done) => { const server = new Hapi.Server();