From 1be8eb4daaf56f18c7882c113007e1449d55244a Mon Sep 17 00:00:00 2001 From: Jan Dzvonik Date: Tue, 17 Apr 2018 02:30:00 +0200 Subject: [PATCH 1/3] Update hapi version, readme guidelines, test --- README.md | 29 +++++++++++++++++------------ package.json | 2 +- src/create-server.js | 11 ++++++----- test/create-server.spec.js | 26 ++++++++++++-------------- 4 files changed, 36 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index e24dcdf..fe532d2 100644 --- a/README.md +++ b/README.md @@ -373,7 +373,7 @@ These are the steps required to localize your existing application: 2. Initialize `i18next` instance - see [the example app](examples/multi-language/multi-language-app.js) 3. Set `i18next` instance to your app to enable localization: `app.setI18next(i18next)` 4. Create directory with all locales -5. Ommit utterances in all intents and access the translate function using `app.t('key')` +5. Ommit utterances in all intents and access the translate function using `app.t('key')` Localized intent example: @@ -425,28 +425,33 @@ You can create your own HTTP from scratch to handle Amazon requests manually. Se ```javascript const Hapi = require('hapi'); -const server = new Hapi.Server(); const app = require('./app'); // Your app -server.connection({ +const server = new Hapi.Server({ port: process.env.PORT || 8888 }); server.route({ path: '/', method: 'POST', - handler: (request, response) => { - app.handle(request.payload, (data) => { - response(data); + handler: (request, h) => { + return new Promise((resolve) => { + app.handle(request.payload, (data) => { + resolve(h.response(data)); + }); }); } }); -server.start((err) => { - if (err) throw err; - console.log('Server running at:', server.info.uri); - app.saveSpeechAssets(); -}); +server.start() + .then(() => { + console.log(`Server running at: ${server.info.uri}`); + // app.saveSpeechAssets(); + }) + .catch(error => { + console.error(error); + throw error; + }); ``` ## Deploy @@ -578,7 +583,7 @@ describe('(Intent) MyIntent', () => { // Simulate Alexa request handling app.handle(intentRequest, response => { - + // Test the response expect(response).to.be.defined; done(); diff --git a/package.json b/package.json index 8dd4b2f..882718a 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "eslint-config-standard": "^6.2.1", "eslint-plugin-promise": "^3.3.1", "eslint-plugin-standard": "^2.0.1", - "hapi": "^15.2.0", + "hapi": "^17.3.1", "i18next": "^4.1.0", "i18next-node-fs-backend": "^0.1.3", "istanbul": "^0.4.5", diff --git a/src/create-server.js b/src/create-server.js index 901ab75..2c94623 100755 --- a/src/create-server.js +++ b/src/create-server.js @@ -12,20 +12,21 @@ const info = require('debug')('alexia:info'); */ module.exports = (app, options) => { const Hapi = require('hapi'); - const server = new Hapi.Server(); options = Object.assign({}, options); - server.connection({ + const server = new Hapi.Server({ port: options.port || process.env.PORT || 8888 }); server.route({ path: options.path || '/', method: 'POST', - handler: (request, response) => { - app.handle(request.payload, (data) => { - response(data); + handler: (request, h) => { + return new Promise((resolve) => { + app.handle(request.payload, (data) => { + resolve(h.response(data)); + }); }); } }); diff --git a/test/create-server.spec.js b/test/create-server.spec.js index 73dd9c0..f98af15 100755 --- a/test/create-server.spec.js +++ b/test/create-server.spec.js @@ -33,20 +33,18 @@ describe('server', () => { it('should create working Hapi server', (done) => { const server = app.createServer(app); - server.start(serverError => { - expect(serverError).to.be.not.ok; - - // Send POST request to server - request(createRequestOptions(server.info.uri), (requestError, response) => { - expect(requestError).to.be.not.ok; - expect(response.body).to.deep.equal(mockResponse); - expect(response.statusCode === 200); - - server.stop(); - - done(); - }); - }); + server.start() + .then(() => { + // Send POST request to server + request(createRequestOptions(server.info.uri), (requestError, response) => { + expect(requestError).to.be.not.ok; + expect(response.body).to.deep.equal(mockResponse); + expect(response.statusCode === 200); + }); + }) + .then(() => server.stop()) + .then(() => done()) + .catch(done); }); From 863798ae48d3eeb6256e3ce17e0dda5df24da95c Mon Sep 17 00:00:00 2001 From: Jan Dzvonik Date: Thu, 19 Apr 2018 15:39:28 +0200 Subject: [PATCH 2/3] Should not throw server error --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index fe532d2..5310dbf 100644 --- a/README.md +++ b/README.md @@ -448,10 +448,7 @@ server.start() console.log(`Server running at: ${server.info.uri}`); // app.saveSpeechAssets(); }) - .catch(error => { - console.error(error); - throw error; - }); + .catch(console.error); ``` ## Deploy From 32b3c004e56142893d8aae21690399d5be26a0ad Mon Sep 17 00:00:00 2001 From: Jan Dzvonik Date: Thu, 19 Apr 2018 18:20:13 +0200 Subject: [PATCH 3/3] New Hapi api, improve tests --- README.md | 2 +- src/create-server.js | 2 +- test/create-server.spec.js | 23 +++++++++++++++++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5310dbf..a58ed10 100644 --- a/README.md +++ b/README.md @@ -427,7 +427,7 @@ You can create your own HTTP from scratch to handle Amazon requests manually. Se const Hapi = require('hapi'); const app = require('./app'); // Your app -const server = new Hapi.Server({ +const server = Hapi.server({ port: process.env.PORT || 8888 }); diff --git a/src/create-server.js b/src/create-server.js index 2c94623..c43c33f 100755 --- a/src/create-server.js +++ b/src/create-server.js @@ -15,7 +15,7 @@ module.exports = (app, options) => { options = Object.assign({}, options); - const server = new Hapi.Server({ + const server = Hapi.server({ port: options.port || process.env.PORT || 8888 }); diff --git a/test/create-server.spec.js b/test/create-server.spec.js index f98af15..fc10e85 100755 --- a/test/create-server.spec.js +++ b/test/create-server.spec.js @@ -30,8 +30,28 @@ describe('server', () => { app.handle.restore(); }); + it('should ensure expected route is defined on Hapi server', (done) => { + const server = app.createServer({ + path: '/skill' + }); + + server.inject({ + url: '/skill', + method: 'POST', + payload: mockRequest + }) + .then(response => { + expect(response.statusCode).to.deep.equal(200); + expect(response.headers).to.contain.keys('content-type', 'content-length'); + expect(JSON.parse(response.payload)).to.deep.equal(mockResponse); + }) + .then(() => done()) + .catch(done); + + }); + it('should create working Hapi server', (done) => { - const server = app.createServer(app); + const server = app.createServer(); server.start() .then(() => { @@ -45,7 +65,6 @@ describe('server', () => { .then(() => server.stop()) .then(() => done()) .catch(done); - }); });