diff --git a/.travis.yml b/.travis.yml
index a0eed05..2208aad 100755
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,19 +1,14 @@
language: node_js
node_js:
- - "4"
- - "6"
- - "7"
+ - "8"
- "node"
sudo: false
env:
- - HAPI_VERSION="13"
- - HAPI_VERSION="14"
- - HAPI_VERSION="15"
+ - HAPI_VERSION="17"
install:
- npm install
- npm install hapi@$HAPI_VERSION
-
diff --git a/LICENSE b/LICENSE
index 368907a..0d5c776 100755
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2012-2016, Project contributors.
+Copyright (c) 2012-2017, Project contributors.
Copyright (c) 2012-2015, Walmart.
All rights reserved.
diff --git a/examples/mustache/partials.js b/examples/mustache/partials.js
old mode 100644
new mode 100755
index f9b7106..d175fa5
--- a/examples/mustache/partials.js
+++ b/examples/mustache/partials.js
@@ -27,7 +27,7 @@ internals.main = function () {
server.register(Vision, (err) => {
if (err) {
- throw error;
+ throw err;
}
const partials = {};
diff --git a/lib/index.js b/lib/index.js
index 1df9e70..9415e2a 100755
--- a/lib/index.js
+++ b/lib/index.js
@@ -1,11 +1,13 @@
'use strict';
+
// Load modules
const Hoek = require('hoek');
const Joi = require('joi');
-const Manager = require('./manager');
// Additional helper modules required in constructor
+const Manager = require('./manager');
+
// Declare internals
@@ -22,7 +24,7 @@ internals.schema = Joi.alternatives([
]);
-exports.register = function (server, pluginOptions, next) {
+exports.register = function (server, pluginOptions) {
server.decorate('server', 'views', function (options) {
@@ -47,35 +49,27 @@ exports.register = function (server, pluginOptions, next) {
server.handler('view', internals.handler);
- server.decorate('reply', 'view', function (template, context, options) {
+ server.decorate('toolkit', 'view', function (template, context, options) {
const realm = (this.realm.plugins.vision || this.request.server.realm.plugins.vision || {});
Hoek.assert(realm.manager, 'Cannot render view without a views manager configured');
- return this.response(realm.manager._response(template, context, options, this.request));
+ return this.wrap(realm.manager._response(template, context, options, this.request));
});
-
- return next();
};
exports.register.attributes = {
- connections: false,
once: true,
pkg: require('../package.json')
};
-internals.render = function (template, context, options, callback) {
-
- if (!callback && typeof options === 'function') {
- callback = options;
- options = {};
- }
+internals.render = async function (template, context, options = {}) {
const isServer = (typeof this.route === 'function');
const server = (isServer ? this : this.server);
- const vision = ((!isServer ? this.route.realm.plugins.vision : null) || server.realm.plugins.vision || server.root.realm.plugins.vision || {});
+ const vision = ((!isServer ? this.route.realm.plugins.vision : null) || server.realm.plugins.vision || server.root.plugins.vision || {});
Hoek.assert(vision.manager, 'Missing views manager');
- return vision.manager.render(template, context, options, callback);
+ return await vision.manager.render(template, context, options);
};
@@ -93,7 +87,7 @@ internals.handler = function (route, options) {
options: options.options
};
- return function (request, reply) {
+ return function (request, responder) {
const context = {
params: request.params,
@@ -110,6 +104,6 @@ internals.handler = function (route, options) {
}
}
- reply.view(settings.template, context, settings.options);
+ return responder.view(settings.template, context, settings.options);
};
};
diff --git a/lib/manager.js b/lib/manager.js
index a3400bb..c3e677f 100755
--- a/lib/manager.js
+++ b/lib/manager.js
@@ -3,6 +3,7 @@
const Fs = require('fs');
const Path = require('path');
+
const Boom = require('boom');
const Hoek = require('hoek');
const Joi = require('joi');
@@ -454,8 +455,7 @@ internals.Manager.prototype._path = function (template, settings, isLayout, next
return nextFile();
});
- },
- () => {
+ }, () => {
return next(Boom.badImplementation('View file not found: `' + template + '`. Locations searched: [' + paths.join(',') + ']'));
});
@@ -570,43 +570,51 @@ internals.Manager.prototype._response = function (template, context, options, re
};
-internals.marshal = function (response, callback) {
+internals.marshal = function (response) {
const manager = response.source.manager;
- manager._render(response.source.compiled, response.source.context, response.request, (err, rendered) => {
+ return new Promise((resolve, reject) => {
- if (err) {
- return callback(err);
- }
+ manager._render(response.source.compiled, response.source.context, response.request, (err, rendered) => {
+
+ if (err) {
+ return reject(err);
+ }
- const config = response.source.compiled.settings;
+ const config = response.source.compiled.settings;
- if (!response.headers['content-type']) {
- response.type(config.contentType);
- }
+ if (!response.headers['content-type']) {
+ response.type(config.contentType);
+ }
- response.encoding(config.encoding);
+ response.encoding(config.encoding);
- return callback(null, rendered);
+ return resolve(rendered);
+ });
});
};
-internals.prepare = function (response, callback) {
+
+internals.prepare = function (response) {
const manager = response.source.manager;
- manager._prepare(response.source.template, response.source.options, (err, compiled) => {
+ return new Promise((resolve, reject) => {
- if (err) {
- return callback(err);
- }
+ manager._prepare(response.source.template, response.source.options, (err, compiled) => {
- response.source.compiled = compiled;
- return callback(response);
+ if (err) {
+ return reject(err);
+ }
+
+ response.source.compiled = compiled;
+ return resolve(response);
+ });
});
};
+
internals._wrapMethod = (bind, method, args) => {
return new Promise((resolve, reject) => {
diff --git a/package.json b/package.json
index 304cfe3..96dd1f8 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "vision",
"description": "Templates rendering plugin support for hapi.js",
- "version": "4.1.1",
+ "version": "5.0.0-rc4",
"repository": "git://github.com/hapijs/vision",
"main": "lib/index.js",
"keywords": [
@@ -11,24 +11,27 @@
"hapi"
],
"engines": {
- "node": ">=4.0.0"
+ "node": ">=8.0.0"
},
"dependencies": {
- "boom": "4.x.x",
- "hoek": "4.x.x",
+ "boom": "6.x.x",
+ "hoek": "5.x.x",
"items": "2.x.x",
- "joi": "10.x.x"
+ "joi": "11.x.x"
+ },
+ "peerDependencies": {
+ "hapi": ">=17.0.0-0"
},
"devDependencies": {
"babel-core": "6.x.x",
"babel-plugin-transform-react-jsx": "6.x.x",
- "code": "4.x.x",
+ "code": "5.x.x",
"ejs": "2.x.x",
"handlebars": "4.x.x",
- "hapi": "15.x.x",
+ "hapi": "^17.0.0-rc4",
"hapi-react-views": "6.x.x",
"pug": ">=2.0.0-beta6",
- "lab": "11.x.x",
+ "lab": "14.x.x",
"marko": "3.x.x",
"mustache": "2.x.x",
"nunjucks": "2.x.0",
diff --git a/test/index.js b/test/index.js
index b916c65..fbd7e11 100755
--- a/test/index.js
+++ b/test/index.js
@@ -1,11 +1,12 @@
'use strict';
+
// Load modules
const Path = require('path');
+
const Code = require('code');
const Handlebars = require('handlebars');
const Hapi = require('hapi');
-const Hoek = require('hoek');
const Pug = require('pug');
const Lab = require('lab');
const Vision = require('..');
@@ -26,50 +27,38 @@ const expect = Code.expect;
describe('handler()', () => {
- it('handles routes to views', (done) => {
+ it('handles routes to views', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates'
});
server.route({ method: 'GET', path: '/{param}', handler: { view: 'valid/handler' } });
- server.inject({
- method: 'GET',
- url: '/hello'
- }, (res) => {
-
- expect(res.result).to.contain('hello');
- done();
- });
+ const res = await server.inject({ method: 'GET', url: '/hello' });
+ expect(res.result).to.contain('hello');
});
- it('handles custom context', (done) => {
+ it('handles custom context', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { pug: Pug },
path: __dirname + '/templates'
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/index', context: { message: 'heyloo' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.contain('heyloo');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.contain('heyloo');
});
- it('handles custom options', (done) => {
+ it('handles custom options', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates',
@@ -77,23 +66,19 @@ describe('handler()', () => {
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/options', options: { layout: 'elsewhere' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.contain('+hello');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.contain('+hello');
});
- it('includes prerequisites in the default view context', (done) => {
+ it('includes prerequisites in the default view context', async () => {
const pre = function (request, reply) {
- reply('PreHello');
+ return 'PreHello';
};
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates'
@@ -112,56 +97,44 @@ describe('handler()', () => {
}
});
- server.inject('/', (res) => {
-
- expect(res.result).to.contain('PreHello');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.contain('PreHello');
});
- it('handles both custom and default contexts', (done) => {
+ it('handles both custom and default contexts', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates'
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/testContext', context: { message: 'heyloo' } } } });
- server.inject('/?test=yes', (res) => {
-
- expect(res.result).to.contain('heyloo');
- expect(res.result).to.contain('yes');
- done();
- });
+ const res = await server.inject('/?test=yes');
+ expect(res.result).to.contain('heyloo');
+ expect(res.result).to.contain('yes');
});
- it('overrides default contexts when provided with context of same name', (done) => {
+ it('overrides default contexts when provided with context of same name', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates'
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/testContext', context: { message: 'heyloo', query: { test: 'no' } } } } });
- server.inject('/?test=yes', (res) => {
-
- expect(res.result).to.contain('heyloo');
- expect(res.result).to.contain('no');
- done();
- });
+ const res = await server.inject('/?test=yes');
+ expect(res.result).to.contain('heyloo');
+ expect(res.result).to.contain('no');
});
- it('handles a global context object', (done) => {
+ it('handles a global context object', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates',
@@ -171,19 +144,15 @@ describe('handler()', () => {
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/testContext' } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.contain('
');
- expect(res.result).to.contain('default message
');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.contain('');
+ expect(res.result).to.contain('default message
');
});
- it('passes the request to a global context function', (done) => {
+ it('passes the request to a global context function', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates',
@@ -197,19 +166,15 @@ describe('handler()', () => {
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/testContext' } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.contain('');
- expect(res.result).to.contain('/
');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.contain('');
+ expect(res.result).to.contain('/
');
});
- it('overrides the global context with the default handler context', (done) => {
+ it('overrides the global context with the default handler context', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates',
@@ -223,19 +188,15 @@ describe('handler()', () => {
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/testContext' } } });
- server.inject('/?test=yes', (res) => {
-
- expect(res.result).to.contain('yes
');
- expect(res.result).to.contain('default message
');
- done();
- });
+ const res = await server.inject('/?test=yes');
+ expect(res.result).to.contain('yes
');
+ expect(res.result).to.contain('default message
');
});
- it('overrides the global and default contexts with a custom handler context', (done) => {
+ it('overrides the global and default contexts with a custom handler context', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates',
@@ -250,19 +211,15 @@ describe('handler()', () => {
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/testContext', context: { message: 'override', query: { test: 'no' } } } } });
- server.inject('/?test=yes', (res) => {
-
- expect(res.result).to.contain('no
');
- expect(res.result).to.contain('override
');
- done();
- });
+ const res = await server.inject('/?test=yes');
+ expect(res.result).to.contain('no
');
+ expect(res.result).to.contain('override
');
});
- it('throws on missing views', (done) => {
+ it('throws on missing views', async () => {
const server = new Hapi.Server({ debug: false });
- server.register(Vision, Hoek.ignore);
- server.connection();
+ await server.register(Vision);
server.route({
path: '/',
method: 'GET',
@@ -272,79 +229,51 @@ describe('handler()', () => {
}
});
- server.inject('/', (res) => {
-
- expect(res.statusCode).to.equal(500);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.statusCode).to.equal(500);
});
});
describe('render()', () => {
- it('renders view (root)', (done) => {
+ it('renders view (root)', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: Handlebars },
path: __dirname + '/templates/valid'
});
- server.render('test', { title: 'test', message: 'Hapi' }, (err, rendered, config) => {
-
- expect(err).not.to.exist();
- expect(rendered).to.exist();
- expect(rendered).to.contain('Hapi');
- done();
- });
+ const rendered = await server.render('test', { title: 'test', message: 'Hapi' });
+ expect(rendered).to.contain('Hapi');
});
- it('renders view (root with options)', (done) => {
+ it('renders view (root with options)', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: Handlebars }
});
- server.render('test', { title: 'test', message: 'Hapi' }, { path: Path.join(__dirname, '/templates/valid') }, (err, rendered, config) => {
-
- expect(err).not.to.exist();
- expect(rendered).to.exist();
- expect(rendered).to.contain('Hapi');
- done();
- });
+ const rendered = await server.render('test', { title: 'test', message: 'Hapi' }, { path: Path.join(__dirname, '/templates/valid') });
+ expect(rendered).to.contain('Hapi');
});
- it('renders view (plugin)', (done) => {
+ it('renders view (plugin)', async () => {
- const test = function (server, options, next) {
+ const test = async function (server, options) {
server.views({
engines: { 'html': Handlebars },
relativeTo: Path.join(__dirname, '/templates/plugin')
});
- server.render('test', { message: 'steve' }, (err, rendered, config) => {
-
- expect(err).not.to.exist();
-
- server.route([
- {
- path: '/view', method: 'GET', handler: function (request, reply) {
-
- return reply(rendered);
- }
- }
- ]);
-
- return next();
- });
+ const rendered = await server.render('test', { message: 'steve' });
+ server.route({ path: '/view', method: 'GET', handler: () => rendered });
};
test.attributes = {
@@ -352,39 +281,19 @@ describe('render()', () => {
};
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
-
- server.register(test, (err) => {
+ await server.register(Vision);
- expect(err).to.not.exist();
- server.inject('/view', (res) => {
-
- expect(res.result).to.equal('steve
');
- done();
- });
- });
+ await server.register(test);
+ const res = await server.inject('/view');
+ expect(res.result).to.equal('steve
');
});
- it('renders view (plugin without views)', (done) => {
-
- const test = function (server, options, next) {
-
- server.render('test', { message: 'steve' }, (err, rendered, config) => {
-
- expect(err).not.to.exist();
-
- server.route([
- {
- path: '/view', method: 'GET', handler: function (request, reply) {
+ it('renders view (plugin without views)', async () => {
- return reply(rendered);
- }
- }
- ]);
+ const test = async function (server, options) {
- return next();
- });
+ const rendered = await server.render('test', { message: 'steve' });
+ server.route({ path: '/view', method: 'GET', handler: () => rendered });
};
test.attributes = {
@@ -392,48 +301,28 @@ describe('render()', () => {
};
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': Handlebars },
relativeTo: Path.join(__dirname, '/templates/plugin')
});
- server.register(test, (err) => {
-
- expect(err).to.not.exist();
- server.inject('/view', (res) => {
-
- expect(res.result).to.equal('steve
');
- done();
- });
- });
+ await server.register(test);
+ const res = await server.inject('/view');
+ expect(res.result).to.equal('steve
');
});
- it('renders view (plugin with options)', (done) => {
+ it('renders view (plugin with options)', async () => {
- const test = function (server, options, next) {
+ const test = async function (server, options) {
server.views({
engines: { 'html': Handlebars }
});
- server.render('test', { message: 'steve' }, { relativeTo: Path.join(__dirname, '/templates/plugin') }, (err, rendered, config) => {
-
- expect(err).not.to.exist();
-
- server.route([
- {
- path: '/view', method: 'GET', handler: function (request, reply) {
-
- return reply(rendered);
- }
- }
- ]);
-
- return next();
- });
+ const rendered = await server.render('test', { message: 'steve' }, { relativeTo: Path.join(__dirname, '/templates/plugin') });
+ server.route({ path: '/view', method: 'GET', handler: () => rendered });
};
test.attributes = {
@@ -441,34 +330,24 @@ describe('render()', () => {
};
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
-
- server.register(test, (err) => {
+ await server.register(Vision);
- expect(err).to.not.exist();
- server.inject('/view', (res) => {
+ await server.register(test);
+ const res = await server.inject('/view');
- expect(res.result).to.equal('steve
');
- done();
- });
- });
+ expect(res.result).to.equal('steve
');
});
- it('throws on missing views', (done) => {
+ it('rejects on missing views', async () => {
const server = new Hapi.Server();
- server.register(Vision, Hoek.ignore);
- expect(() => {
-
- server.render('test');
- }).to.throw('Missing views manager');
- done();
+ await server.register(Vision);
+ await expect(server.render('test')).to.reject('Missing views manager');
});
- it('renders view (plugin request)', (done) => {
+ it('renders view (plugin request)', async () => {
- const test = function (server, options, next) {
+ const test = async function (server, options) {
server.views({
engines: { 'html': Handlebars },
@@ -478,17 +357,8 @@ describe('render()', () => {
server.route({
method: 'GET',
path: '/view',
- handler: function (request, reply) {
-
- request.render('test', { message: 'steve' }, (err, rendered, config) => {
-
- expect(err).not.to.exist();
- return reply(rendered);
- });
- }
+ handler: (request) => request.render('test', { message: 'steve' })
});
-
- return next();
};
test.attributes = {
@@ -496,25 +366,16 @@ describe('render()', () => {
};
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
-
- server.register(test, (err) => {
-
- expect(err).to.not.exist();
- server.inject('/view', (res) => {
-
- expect(res.result).to.equal('steve
');
- done();
- });
- });
+ await server.register(Vision);
+ await server.register(test);
+ const res = await server.inject('/view');
+ expect(res.result).to.equal('steve
');
});
- it('does not pass the request to the global context function (server)', (done) => {
+ it('does not pass the request to the global context function (server)', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates/valid',
@@ -527,19 +388,14 @@ describe('render()', () => {
}
});
- server.render('testContext', null, null, (err, result) => {
-
- expect(err).not.to.exist();
- expect(result).to.contain('default
');
- done();
- });
+ const rendered = await server.render('testContext', null, null);
+ expect(rendered).to.contain('default
');
});
- it('does not pass the request to the global context function (request)', (done) => {
+ it('does not pass the request to the global context function (request)', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates/valid',
@@ -552,110 +408,17 @@ describe('render()', () => {
}
});
- const handler = (request, reply) => {
-
- request.render('testContext', null, null, (err, rendered) => {
-
- expect(err).not.to.exist();
- reply(rendered);
- });
- };
-
- server.route({ method: 'GET', path: '/', handler });
- server.inject({ method: 'GET', url: '/' }, (response) => {
-
- expect(response.result).to.contain('default
');
- done();
- });
- });
-
- it('returns a promise when no options or callback given (server)', () => {
-
- const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
- server.views({
- engines: { html: Handlebars },
- path: __dirname + '/templates/valid'
- });
-
- return server.render('test', { message: 'Hello!' })
- .then((content) => expect(content).to.contain('Hello!
'));
- });
-
- it('returns a promise when no callback given (server)', () => {
-
- const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
-
- server.views({
- engines: { html: Handlebars },
- path: __dirname + '/templates/valid'
- });
-
- return server.render('test', { message: 'Hello!' }, {})
- .then((content) => expect(content).to.contain('Hello!
'));
- });
-
- it('returns a promise when no options or callback given (request)', (done) => {
-
- const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
-
- server.views({
- engines: { html: Handlebars },
- path: __dirname + '/templates/valid'
- });
-
- const handler = (request, reply) => {
-
- const promise = request.render('test', { message: 'Hello!' });
- expect(promise).to.be.an.instanceof(Promise);
- reply(promise);
- };
-
- server.route({ method: 'GET', path: '/', handler });
- server.inject({ method: 'GET', url: '/' }, (response) => {
-
- expect(response.result).to.contain('Hello!
');
- done();
- });
- });
-
- it('returns a promise when no callback given (request)', (done) => {
-
- const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
-
- server.views({
- engines: { html: Handlebars },
- path: __dirname + '/templates/valid'
- });
-
- const handler = (request, reply) => {
-
- const promise = request.render('test', { message: 'Hello!' }, {});
- expect(promise).to.be.an.instanceof(Promise);
- reply(promise);
- };
-
- server.route({ method: 'GET', path: '/', handler });
- server.inject({ method: 'GET', url: '/' }, (response) => {
-
- expect(response.result).to.contain('Hello!
');
- done();
- });
+ server.route({ method: 'GET', path: '/', handler: (request) => request.render('testContext', null, null) });
+ const res = await server.inject({ method: 'GET', url: '/' });
+ expect(res.result).to.contain('default
');
});
});
describe('views()', () => {
- it('requires plugin with views', (done) => {
+ it('requires plugin with views', async () => {
- const test = function (server, options, next) {
+ const test = async function (server, options) {
server.path(__dirname);
@@ -665,29 +428,20 @@ describe('views()', () => {
};
server.views(views);
+
if (Object.keys(views).length !== 2) {
- return next(new Error('plugin.view() modified options'));
+ throw new Error('plugin.view() modified options');
}
- server.route([
- {
- path: '/view', method: 'GET', handler: function (request, reply) {
-
- return reply.view('test', { message: options.message });
- }
- }
- ]);
-
+ server.route({ path: '/view', method: 'GET', handler: (request, reply) => reply.view('test', { message: options.message }) });
server.ext('onRequest', (request, reply) => {
if (request.path === '/ext') {
- return reply.view('test', { message: 'grabbed' });
+ return reply.view('test', { message: 'grabbed' }).takeover();
}
- return reply.continue();
+ return reply.continue;
});
-
- return next();
};
test.attributes = {
@@ -695,44 +449,26 @@ describe('views()', () => {
};
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
-
- server.register({ register: test, options: { message: 'viewing it' } }, (err) => {
-
- expect(err).to.not.exist();
- server.inject('/view', (viewResponse) => {
-
- expect(viewResponse.result).to.equal('viewing it
');
+ await server.register(Vision);
+ await server.register({ register: test, options: { message: 'viewing it' } });
- server.inject('/ext', (extResponse) => {
+ const res1 = await server.inject('/view');
+ expect(res1.result).to.equal('viewing it
');
- expect(extResponse.result).to.equal('grabbed
');
- done();
- });
- });
- });
+ const res2 = await server.inject('/ext');
+ expect(res2.result).to.equal('grabbed
');
});
- it('requires plugin with views with specific relativeTo', (done) => {
+ it('requires plugin with views with specific relativeTo', async () => {
- const test = function (server, options, next) {
+ const test = async function (server, options) {
server.views({
engines: { 'html': Handlebars },
relativeTo: Path.join(__dirname, '/templates/plugin')
});
- server.route([
- {
- path: '/view', method: 'GET', handler: function (request, reply) {
-
- return reply.view('test', { message: 'steve' });
- }
- }
- ]);
-
- return next();
+ server.route({ path: '/view', method: 'GET', handler: (request, reply) => reply.view('test', { message: 'steve' }) });
};
test.attributes = {
@@ -740,34 +476,22 @@ describe('views()', () => {
};
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
+ await server.register(test);
- server.register(test, (err) => {
-
- expect(err).to.not.exist();
- server.inject('/view', (res) => {
-
- expect(res.result).to.equal('steve
');
- done();
- });
- });
+ const res = await server.inject('/view');
+ expect(res.result).to.equal('steve
');
});
- it('defaults to server views', (done) => {
+ it('defaults to server views', async () => {
- const test = function (server, options, next) {
+ const test = async function (server, options) {
server.route({
path: '/view',
method: 'GET',
- handler: function (request, reply) {
-
- return reply.view('test', { message: options.message });
- }
+ handler: (request, reply) => reply.view('test', { message: options.message })
});
-
- return next();
};
test.attributes = {
@@ -775,8 +499,7 @@ describe('views()', () => {
};
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.path(__dirname);
@@ -787,33 +510,26 @@ describe('views()', () => {
server.views(views);
- server.register({ register: test, options: { message: 'viewing it' } }, (err) => {
-
- expect(err).to.not.exist();
- server.inject('/view', (res) => {
-
- expect(res.result).to.equal('viewing it
');
- done();
- });
- });
+ await server.register({ register: test, options: { message: 'viewing it' } });
+ const res = await server.inject('/view');
+ expect(res.result).to.equal('viewing it
');
});
- it('throws on multiple views', (done) => {
+ it('throws on multiple views', async () => {
const server = new Hapi.Server();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({ engines: { 'html': Handlebars } });
expect(() => {
server.views({ engines: { 'html': Handlebars } });
}).to.throw('Cannot set views manager more than once');
- done();
});
- it('can register helpers via the view manager', (done) => {
+ it('can register helpers via the view manager', async () => {
const server = new Hapi.Server();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
const manager = server.views({
engines: { 'html': Handlebars.create() },
@@ -824,18 +540,14 @@ describe('views()', () => {
manager.registerHelper('long', (string) => string);
manager.registerHelper('uppercase', (string) => string);
- server.render('testHelpers', { something: 'uppercase' }, (err, result) => {
-
- expect(err).not.to.exist();
- expect(result).to.equal('This is all uppercase and this is how we like it!
');
- done();
- });
+ const rendered = await server.render('testHelpers', { something: 'uppercase' });
+ expect(rendered).to.equal('This is all uppercase and this is how we like it!
');
});
- it('can render templates via the view manager', (done) => {
+ it('can render templates via the view manager', async () => {
const server = new Hapi.Server();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
const manager = server.views({
engines: { 'html': Handlebars },
@@ -843,62 +555,29 @@ describe('views()', () => {
path: 'valid'
});
- manager.render('test', { message: 'Hello!' }, null, (err, result) => {
-
- expect(err).not.to.exist();
- expect(result).to.contain('Hello!
');
- done();
- });
+ const rendered = await manager.render('test', { message: 'Hello!' }, null);
+ expect(rendered).to.contain('Hello!
');
});
});
describe('Plugin', () => {
- it('can be registered before connections', (done) => {
-
- const plugin = function (server, options, next) {
-
- server.dependency('vision');
- server.connection();
- next();
- };
-
- plugin.attributes = {
- connections: false,
- name: 'test'
- };
-
- const server = new Hapi.Server();
- server.register([Vision, plugin], Hoek.ignore);
-
- expect(server.views).to.be.a.function();
- server.initialize((err) => {
-
- expect(err).to.not.exist();
- server.stop(done);
- });
- });
-
- it('only registers once', (done) => {
+ it('only registers once', async () => {
- const one = function (server, options, next) {
+ const one = function (server, options) {
- server.register(Vision, next);
+ return server.register(Vision);
};
- const two = function (server, options, next) {
+ const two = function (server, options) {
- server.register(Vision, next);
+ return server.register(Vision);
};
one.attributes = { name: 'one' };
two.attributes = { name: 'two' };
const server = new Hapi.Server();
- server.register([one, two], (err) => {
-
- expect(err).to.not.exist();
- done();
- });
+ await server.register([one, two]);
});
});
diff --git a/test/manager.js b/test/manager.js
index fc0e3c4..cb7f9c1 100755
--- a/test/manager.js
+++ b/test/manager.js
@@ -2,16 +2,17 @@
// Load modules
const Fs = require('fs');
+const Util = require('util');
+
const Code = require('code');
const Handlebars = require('handlebars');
const Hapi = require('hapi');
-const Hoek = require('hoek');
const Pug = require('pug');
const Lab = require('lab');
const Vision = require('..');
-const Manager = require('../lib/manager');
const Mustache = require('mustache');
-const Util = require('util');
+
+const Manager = require('../lib/manager');
// Declare internals
@@ -29,11 +30,10 @@ const expect = Code.expect;
describe('Manager', () => {
- it('renders handlebars template', (done) => {
+ it('renders handlebars template', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await await server.register(Vision);
server.views({
engines: {
html: {
@@ -45,15 +45,12 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/handlebars', handler: { view: { template: 'test.html', context: { message: 'Hello World!' } } } });
- server.inject('/handlebars', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(200);
- done();
- });
+ const res = await server.inject('/handlebars');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(200);
});
- it('shallow copies global context', (done) => {
+ it('shallow copies global context', async () => {
const options = {
engines: {
@@ -68,16 +65,13 @@ describe('Manager', () => {
};
const manager = new Manager(options);
-
expect(manager._context).to.equal(options.context);
- done();
});
- it('sets content type', (done) => {
+ it('sets content type', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await await server.register(Vision);
server.views({
engines: {
html: {
@@ -89,20 +83,16 @@ describe('Manager', () => {
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'test', context: { message: 'Hello World!' } } } });
- server.inject('/', (res) => {
-
- expect(res.headers['content-type']).to.equal('something/else');
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(200);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.headers['content-type']).to.equal('something/else');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(200);
});
- it('errors on invalid template path', (done) => {
+ it('errors on invalid template path', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates/invalid'
@@ -111,18 +101,14 @@ describe('Manager', () => {
// Rendering errors are not available to extensions.
server.route({ method: 'GET', path: '/', handler: { view: { template: 'test', context: { message: 'Hello, World!' } } } });
- server.inject('/', (res) => {
-
- expect(res.statusCode).to.equal(500);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.statusCode).to.equal(500);
});
- it('returns a compiled Handlebars template reply', (done) => {
+ it('returns a compiled Handlebars template reply', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates/valid'
@@ -130,20 +116,16 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'test', context: { message: 'Hello, World!' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.result).to.have.string('Hello, World!');
- expect(res.statusCode).to.equal(200);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.result).to.have.string('Hello, World!');
+ expect(res.statusCode).to.equal(200);
});
- it('errors absolute path given and allowAbsolutePath is false (by default)', (done) => {
+ it('errors absolute path given and allowAbsolutePath is false (by default)', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates/valid'
@@ -152,32 +134,28 @@ describe('Manager', () => {
// Compilation errors sould be available for extensions.
let error = null;
- server.ext('onPostHandler', (request, reply) => {
+ server.ext('onPreResponse', (request, reply) => {
const response = request.response;
if (response.isBoom) {
error = response;
}
- reply.continue();
+ return reply.continue;
});
server.route({ method: 'GET', path: '/', handler: { view: { template: __dirname + '/templates/valid/test', context: { message: 'Hello, World!' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(500);
- expect(error).to.be.an.instanceof(Error);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(500);
+ expect(error).to.be.an.instanceof(Error);
});
- it('errors if path given includes ../ and allowInsecureAccess is false (by default)', (done) => {
+ it('errors if path given includes ../ and allowInsecureAccess is false (by default)', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates/valid'
@@ -186,32 +164,28 @@ describe('Manager', () => {
// Compilation errors sould be available for extensions.
let error = null;
- server.ext('onPostHandler', (request, reply) => {
+ server.ext('onPreResponse', (request, reply) => {
const response = request.response;
if (response.isBoom) {
error = response;
}
- reply.continue();
+ return reply.continue;
});
server.route({ method: 'GET', path: '/', handler: { view: { template: '../test', context: { message: 'Hello, World!' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(500);
- expect(error).to.be.an.instanceof(Error);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(500);
+ expect(error).to.be.an.instanceof(Error);
});
- it('allows if path given includes ../ and allowInsecureAccess is true', (done) => {
+ it('allows if path given includes ../ and allowInsecureAccess is true', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
allowInsecureAccess: true,
@@ -220,20 +194,16 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: '../test', context: { message: 'Hello, World!' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.result).to.have.string('Hello, World!');
- expect(res.statusCode).to.equal(200);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.result).to.have.string('Hello, World!');
+ expect(res.statusCode).to.equal(200);
});
- it('errors if template does not exist()', (done) => {
+ it('errors if template does not exist()', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates/valid'
@@ -242,32 +212,28 @@ describe('Manager', () => {
// Compilation errors sould be available for extensions.
let error = null;
- server.ext('onPostHandler', (request, reply) => {
+ server.ext('onPreResponse', (request, reply) => {
const response = request.response;
if (response.isBoom) {
error = response;
}
- reply.continue();
+ return reply.continue;
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'testNope', context: { message: 'Hello, World!' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(500);
- expect(error).to.be.an.instanceof(Error);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(500);
+ expect(error).to.be.an.instanceof(Error);
});
- it('errors if engine.compile throws', (done) => {
+ it('errors if engine.compile throws', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates/valid'
@@ -276,32 +242,28 @@ describe('Manager', () => {
// Compilation errors sould be available for extensions.
let error = null;
- server.ext('onPostHandler', (request, reply) => {
+ server.ext('onPreResponse', (request, reply) => {
const response = request.response;
if (response.isBoom) {
error = response;
}
- reply.continue();
+ return reply.continue;
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'badmustache', context: { message: 'Hello, World!' }, options: { path: __dirname + '/templates/valid/invalid' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(500);
- expect(error).to.be.an.instanceof(Error);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(500);
+ expect(error).to.be.an.instanceof(Error);
});
- it('should not fail if rendered template returns undefined', (done) => {
+ it('should not fail if rendered template returns undefined', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: {
html: {
@@ -321,18 +283,14 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'test.html' } } });
- server.inject('/', (res) => {
-
- expect(res.statusCode).to.equal(200);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.statusCode).to.equal(200);
});
- it('allows the context to be modified by extensions', (done) => {
+ it('allows the context to be modified by extensions', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates/valid'
@@ -342,20 +300,16 @@ describe('Manager', () => {
const response = request.response;
response.source.context.message = 'goodbye';
-
- reply.continue();
+ return reply.continue;
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'test.html', context: { message: 'hello' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.result).not.to.contain('hello');
- expect(res.result).to.contain('goodbye');
- expect(res.statusCode).to.equal(200);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.result).not.to.contain('hello');
+ expect(res.result).to.contain('goodbye');
+ expect(res.statusCode).to.equal(200);
});
describe('with engine initialization', () => {
@@ -564,11 +518,10 @@ describe('Manager', () => {
});
});
- it('should not error on layoutKeyword conflict', (done) => {
+ it('should not error on layoutKeyword conflict', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates/valid'
@@ -578,22 +531,18 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'test', context: { message: 'Hello, World!', content: 'fail' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(200);
- expect(res.payload).to.contain('Hello, World!');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(200);
+ expect(res.payload).to.contain('Hello, World!');
});
- describe('with layout', (done) => {
+ describe('with layout', () => {
- it('returns response', (done) => {
+ it('returns response', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates',
@@ -602,20 +551,16 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/test', context: { title: 'test', message: 'Hapi' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(200);
- expect(res.result.replace(/\r/g, '')).to.equal('\n\n \n test\n \n \n \n
Hapi
\n\n\n \n\n');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(200);
+ expect(res.result.replace(/\r/g, '')).to.equal('\n\n \n test\n \n \n \n
Hapi
\n\n\n \n\n');
});
- it('returns response with relativeTo and absolute path', (done) => {
+ it('returns response with relativeTo and absolute path', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
relativeTo: '/none/shall/pass',
@@ -625,20 +570,16 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/test', context: { title: 'test', message: 'Hapi' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(200);
- expect(res.result.replace(/\r/g, '')).to.equal('\n\n \n test\n \n \n \n
Hapi
\n\n\n \n\n');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(200);
+ expect(res.result.replace(/\r/g, '')).to.equal('\n\n \n test\n \n \n \n
Hapi
\n\n\n \n\n');
});
- it('returns response with layout override', (done) => {
+ it('returns response with layout override', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates',
@@ -647,20 +588,16 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/test', context: { title: 'test', message: 'Hapi' }, options: { layout: 'otherLayout' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(200);
- expect(res.result.replace(/\r/g, '')).to.equal('test:\n
Hapi
\n\n');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(200);
+ expect(res.result.replace(/\r/g, '')).to.equal('test:\n
Hapi
\n\n');
});
- it('returns response with custom server layout', (done) => {
+ it('returns response with custom server layout', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates',
@@ -669,20 +606,16 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/test', context: { title: 'test', message: 'Hapi' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(200);
- expect(res.result.replace(/\r/g, '')).to.equal('test:\n
Hapi
\n\n');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(200);
+ expect(res.result.replace(/\r/g, '')).to.equal('test:\n
Hapi
\n\n');
});
- it('returns response with custom server layout and path', (done) => {
+ it('returns response with custom server layout and path', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
relativeTo: __dirname,
@@ -693,20 +626,16 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/test', context: { title: 'test', message: 'Hapi' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(200);
- expect(res.result.replace(/\r/g, '')).to.equal('test+\n
Hapi
\n\n');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(200);
+ expect(res.result.replace(/\r/g, '')).to.equal('test+\n
Hapi
\n\n');
});
- it('errors on missing layout', (done) => {
+ it('errors on missing layout', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates',
@@ -716,31 +645,27 @@ describe('Manager', () => {
// Compilation errors sould be available for extensions.
let error = null;
- server.ext('onPostHandler', (request, reply) => {
+ server.ext('onPreResponse', (request, reply) => {
const response = request.response;
if (response.isBoom) {
error = response;
}
- reply.continue();
+ return reply.continue;
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/test', context: { title: 'test', message: 'Hapi' } } } });
- server.inject('/', (res) => {
-
- expect(res.statusCode).to.equal(500);
- expect(error).to.be.an.instanceof(Error);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.statusCode).to.equal(500);
+ expect(error).to.be.an.instanceof(Error);
});
- it('errors on invalid layout', (done) => {
+ it('errors on invalid layout', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates',
@@ -750,31 +675,27 @@ describe('Manager', () => {
// Compilation errors sould be available for extensions.
let error = null;
- server.ext('onPostHandler', (request, reply) => {
+ server.ext('onPreResponse', (request, reply) => {
const response = request.response;
if (response.isBoom) {
error = response;
}
- reply.continue();
+ return reply.continue;
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/test', context: { title: 'test', message: 'Hapi' } } } });
- server.inject('/', (res) => {
-
- expect(res.statusCode).to.equal(500);
- expect(error).to.be.an.instanceof(Error);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.statusCode).to.equal(500);
+ expect(error).to.be.an.instanceof(Error);
});
- it('returns response without layout', (done) => {
+ it('returns response without layout', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates',
@@ -783,20 +704,16 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'valid/test', context: { title: 'test', message: 'Hapi' }, options: { layout: false } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(200);
- expect(res.result.replace(/\r/g, '')).to.equal('\n
Hapi
\n\n');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(200);
+ expect(res.result.replace(/\r/g, '')).to.equal('\n
Hapi
\n\n');
});
- it('errors on layoutKeyword conflict', (done) => {
+ it('errors on layoutKeyword conflict', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates/valid',
@@ -807,19 +724,15 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'test', context: { message: 'Hello, World!', content: 'fail' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(500);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(500);
});
- it('errors absolute path given and allowAbsolutePath is false (by default)', (done) => {
+ it('errors absolute path given and allowAbsolutePath is false (by default)', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
engines: { 'html': require('handlebars') },
path: __dirname + '/templates/valid',
@@ -829,35 +742,31 @@ describe('Manager', () => {
// Compilation errors sould be available for extensions.
let error = null;
- server.ext('onPostHandler', (request, reply) => {
+ server.ext('onPreResponse', (request, reply) => {
const response = request.response;
if (response.isBoom) {
error = response;
}
- reply.continue();
+ return reply.continue;
});
server.route({ method: 'GET', path: '/', handler: { view: { template: 'test', context: { title: 'test', message: 'Hapi' }, options: { path: __dirname + '/templates/valid/invalid' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(500);
- expect(error).to.be.an.instanceof(Error);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(500);
+ expect(error).to.be.an.instanceof(Error);
});
});
describe('with multiple engines', () => {
- it('renders handlebars template', (done) => {
+ it('renders handlebars template', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
path: __dirname + '/templates/valid',
engines: {
@@ -876,19 +785,15 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'test.html', context: { message: 'Hello World!' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(200);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(200);
});
- it('renders pug template', (done) => {
+ it('renders pug template', async () => {
const server = new Hapi.Server();
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
path: __dirname + '/templates/valid',
engines: {
@@ -907,19 +812,15 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'testMulti.pug', context: { message: 'Hello World!' } } } });
- server.inject('/', (res) => {
-
- expect(res.result).to.exist();
- expect(res.statusCode).to.equal(200);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.result).to.exist();
+ expect(res.statusCode).to.equal(200);
});
- it('returns 500 on unknown extension', (done) => {
+ it('returns 500 on unknown extension', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
path: __dirname + '/templates/valid',
engines: {
@@ -938,18 +839,14 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'test', context: { message: 'Hello World!' } } } });
- server.inject('/', (res) => {
-
- expect(res.statusCode).to.equal(500);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.statusCode).to.equal(500);
});
- it('returns 500 on missing extension engine', (done) => {
+ it('returns 500 on missing extension engine', async () => {
const server = new Hapi.Server({ debug: false });
- server.connection();
- server.register(Vision, Hoek.ignore);
+ await server.register(Vision);
server.views({
path: __dirname + '/templates/valid',
engines: {
@@ -968,11 +865,8 @@ describe('Manager', () => {
server.route({ method: 'GET', path: '/', handler: { view: { template: 'test.xyz', context: { message: 'Hello World!' } } } });
- server.inject('/', (res) => {
-
- expect(res.statusCode).to.equal(500);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.statusCode).to.equal(500);
});
});
@@ -1962,10 +1856,10 @@ describe('Manager', () => {
});
return views.render('test', { message: 'Hello!' }, null)
- .then((content) => {
+ .then((content) => {
- expect(content).to.contain('Hello!
');
- });
+ expect(content).to.contain('Hello!
');
+ });
});
it('returns a promise that is rejected on error if no callback is provided', () => {
@@ -1975,28 +1869,24 @@ describe('Manager', () => {
path: __dirname + '/templates/valid'
});
- return views.render('missing', null, null)
- .then(
- () => {
+ return views.render('missing', null, null).then(() => {
- throw new Error('should not resolve');
- },
- (err) => {
+ throw new Error('should not resolve');
+ },
+ (err) => {
- expect(err).to.exist();
- expect(err.message).to.contain('missing.html');
- }
- );
+ expect(err).to.exist();
+ expect(err.message).to.contain('missing.html');
+ });
});
});
describe('_response()', () => {
- it('sets Content-Type', (done) => {
+ it('sets Content-Type', async () => {
const server = new Hapi.Server();
- server.register(Vision, Hoek.ignore);
- server.connection();
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates/valid'
@@ -2008,18 +1898,14 @@ describe('Manager', () => {
};
server.route({ method: 'GET', path: '/', handler });
- server.inject('/', (res) => {
-
- expect(res.headers['content-type']).to.contain('text/html');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.headers['content-type']).to.contain('text/html');
});
- it('does not override Content-Type', (done) => {
+ it('does not override Content-Type', async () => {
const server = new Hapi.Server();
- server.register(Vision, Hoek.ignore);
- server.connection();
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
@@ -2032,18 +1918,14 @@ describe('Manager', () => {
};
server.route({ method: 'GET', path: '/', handler });
- server.inject('/', (res) => {
-
- expect(res.headers['content-type']).to.contain('text/plain');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.headers['content-type']).to.contain('text/plain');
});
- it('errors on invalid template', (done) => {
+ it('errors on invalid template', async () => {
const server = new Hapi.Server({ debug: false });
- server.register(Vision, Hoek.ignore);
- server.connection();
+ await server.register(Vision);
server.views({
engines: { html: require('handlebars') },
path: __dirname + '/templates/invalid'
@@ -2055,18 +1937,14 @@ describe('Manager', () => {
};
server.route({ method: 'GET', path: '/', handler });
- server.inject('/', (res) => {
-
- expect(res.statusCode).to.equal(500);
- done();
- });
+ const res = await server.inject('/');
+ expect(res.statusCode).to.equal(500);
});
- it('passes the response object to the global context function', (done) => {
+ it('passes the response object to the global context function', async () => {
const server = new Hapi.Server();
- server.register(Vision, Hoek.ignore);
- server.connection();
+ await server.register(Vision);
server.views({
engines: { html: Handlebars },
path: __dirname + '/templates/valid',
@@ -2089,12 +1967,9 @@ describe('Manager', () => {
};
server.route({ method: 'GET', path: '/', handler });
- server.inject('/', (res) => {
-
- expect(res.payload).to.contain('/
');
- expect(res.payload).to.contain('global
');
- done();
- });
+ const res = await server.inject('/');
+ expect(res.payload).to.contain('/
');
+ expect(res.payload).to.contain('global
');
});
});
});