You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					387 lines
				
				11 KiB
			
		
		
			
		
	
	
					387 lines
				
				11 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const t = require('tap') | ||
|  | const test = t.test | ||
|  | const sget = require('simple-get').concat | ||
|  | const Fastify = require('fastify') | ||
|  | const fs = require('fs') | ||
|  | 
 | ||
|  | test('reply.view with ejs engine and async: true (global option)', t => { | ||
|  |   t.plan(6) | ||
|  |   const fastify = Fastify() | ||
|  |   const ejs = require('ejs') | ||
|  | 
 | ||
|  |   fastify.register(require('../index'), { | ||
|  |     engine: { ejs }, | ||
|  |     options: { async: true }, | ||
|  |     templates: 'templates' | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/', (req, reply) => { | ||
|  |     reply.view('ejs-async.ejs') | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.listen({ port: 0 }, err => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     sget({ | ||
|  |       method: 'GET', | ||
|  |       url: 'http://localhost:' + fastify.server.address().port | ||
|  |     }, async (err, response, body) => { | ||
|  |       t.error(err) | ||
|  |       t.equal(response.statusCode, 200) | ||
|  |       t.equal(response.headers['content-length'], '' + body.length) | ||
|  |       t.equal(response.headers['content-type'], 'text/html; charset=utf-8') | ||
|  |       t.equal(await ejs.render(fs.readFileSync('./templates/ejs-async.ejs', 'utf8'), {}, { async: true }), body.toString()) | ||
|  |       fastify.close() | ||
|  |     }) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('reply.view with ejs engine, async: true (global option), and production: true', t => { | ||
|  |   const numTests = 2 | ||
|  |   t.plan(numTests * 5 + 1) | ||
|  |   const fastify = Fastify() | ||
|  |   const ejs = require('ejs') | ||
|  | 
 | ||
|  |   fastify.register(require('../index'), { | ||
|  |     engine: { ejs }, | ||
|  |     production: true, | ||
|  |     options: { async: true }, | ||
|  |     templates: 'templates' | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/', (req, reply) => { | ||
|  |     reply.view('ejs-async.ejs') | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.listen({ port: 0 }, async err => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     for (let i = 0; i < numTests; i++) { | ||
|  |       await new Promise((resolve, reject) => { | ||
|  |         sget({ | ||
|  |           method: 'GET', | ||
|  |           url: 'http://localhost:' + fastify.server.address().port | ||
|  |         }, async (err, response, body) => { | ||
|  |           t.error(err) | ||
|  |           t.equal(response.statusCode, 200) | ||
|  |           t.equal(response.headers['content-length'], '' + body.length) | ||
|  |           t.equal(response.headers['content-type'], 'text/html; charset=utf-8') | ||
|  |           t.equal(await ejs.render(fs.readFileSync('./templates/ejs-async.ejs', 'utf8'), {}, { async: true }), body.toString()) | ||
|  |           if (i === numTests - 1) fastify.close() | ||
|  |           resolve() | ||
|  |         }) | ||
|  |       }) | ||
|  |     } | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | const minifier = require('html-minifier') | ||
|  | const minifierOpts = { collapseWhitespace: true } | ||
|  | test('reply.view with ejs engine, async: true (global option), and html-minifier', t => { | ||
|  |   t.plan(6) | ||
|  |   const fastify = Fastify() | ||
|  |   const ejs = require('ejs') | ||
|  | 
 | ||
|  |   fastify.register(require('../index'), { | ||
|  |     engine: { ejs }, | ||
|  |     options: { | ||
|  |       async: true, | ||
|  |       useHtmlMinifier: minifier, | ||
|  |       htmlMinifierOptions: minifierOpts | ||
|  |     }, | ||
|  |     templates: 'templates' | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/', (req, reply) => { | ||
|  |     reply.view('ejs-async.ejs') | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.listen({ port: 0 }, err => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     sget({ | ||
|  |       method: 'GET', | ||
|  |       url: 'http://localhost:' + fastify.server.address().port | ||
|  |     }, async (err, response, body) => { | ||
|  |       t.error(err) | ||
|  |       t.equal(response.statusCode, 200) | ||
|  |       t.equal(response.headers['content-length'], '' + body.length) | ||
|  |       t.equal(response.headers['content-type'], 'text/html; charset=utf-8') | ||
|  |       t.equal(minifier.minify(await ejs.render(fs.readFileSync('./templates/ejs-async.ejs', 'utf8'), {}, { async: true }), minifierOpts), body.toString()) | ||
|  |       fastify.close() | ||
|  |     }) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('reply.view with ejs engine, async: true (global option), and html-minifier in production mode', t => { | ||
|  |   const numTests = 3 | ||
|  |   t.plan(numTests * 5 + 1) | ||
|  |   const fastify = Fastify() | ||
|  |   const ejs = require('ejs') | ||
|  | 
 | ||
|  |   fastify.register(require('../index'), { | ||
|  |     engine: { ejs }, | ||
|  |     production: true, | ||
|  |     options: { | ||
|  |       async: true, | ||
|  |       useHtmlMinifier: minifier, | ||
|  |       htmlMinifierOptions: minifierOpts | ||
|  |     }, | ||
|  |     templates: 'templates' | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/', (req, reply) => { | ||
|  |     reply.view('ejs-async.ejs') | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.listen({ port: 0 }, async err => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     for (let i = 0; i < numTests; i++) { | ||
|  |       await new Promise((resolve, reject) => { | ||
|  |         sget({ | ||
|  |           method: 'GET', | ||
|  |           url: 'http://localhost:' + fastify.server.address().port | ||
|  |         }, async (err, response, body) => { | ||
|  |           t.error(err) | ||
|  |           t.equal(response.statusCode, 200) | ||
|  |           t.equal(response.headers['content-length'], '' + body.length) | ||
|  |           t.equal(response.headers['content-type'], 'text/html; charset=utf-8') | ||
|  |           t.equal(minifier.minify(await ejs.render(fs.readFileSync('./templates/ejs-async.ejs', 'utf8'), {}, { async: true }), minifierOpts), body.toString()) | ||
|  |           if (i === numTests - 1) fastify.close() | ||
|  |           resolve() | ||
|  |         }) | ||
|  |       }) | ||
|  |     } | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('reply.view with ejs engine and async: true (local option)', t => { | ||
|  |   t.plan(6) | ||
|  |   const fastify = Fastify() | ||
|  |   const ejs = require('ejs') | ||
|  | 
 | ||
|  |   fastify.register(require('../index'), { | ||
|  |     engine: { ejs }, | ||
|  |     templates: 'templates' | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/', (req, reply) => { | ||
|  |     reply.view('ejs-async.ejs', {}, { async: true }) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.listen({ port: 0 }, err => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     sget({ | ||
|  |       method: 'GET', | ||
|  |       url: 'http://localhost:' + fastify.server.address().port | ||
|  |     }, async (err, response, body) => { | ||
|  |       t.error(err) | ||
|  |       t.equal(response.statusCode, 200) | ||
|  |       t.equal(response.headers['content-length'], '' + body.length) | ||
|  |       t.equal(response.headers['content-type'], 'text/html; charset=utf-8') | ||
|  |       t.equal(await ejs.render(fs.readFileSync('./templates/ejs-async.ejs', 'utf8'), {}, { async: true }), body.toString()) | ||
|  |       fastify.close() | ||
|  |     }) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('reply.view with ejs engine, async: true (local option), and production: true', t => { | ||
|  |   const numTests = 5 | ||
|  |   t.plan(numTests * 5 + 1) | ||
|  |   const fastify = Fastify() | ||
|  |   const ejs = require('ejs') | ||
|  | 
 | ||
|  |   fastify.register(require('../index'), { | ||
|  |     engine: { ejs }, | ||
|  |     production: true, | ||
|  |     templates: 'templates' | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/', (req, reply) => { | ||
|  |     reply.view('ejs-async.ejs', {}, { async: true }) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.listen({ port: 0 }, async err => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     for (let i = 0; i < numTests; i++) { | ||
|  |       await new Promise((resolve, reject) => { | ||
|  |         sget({ | ||
|  |           method: 'GET', | ||
|  |           url: 'http://localhost:' + fastify.server.address().port | ||
|  |         }, async (err, response, body) => { | ||
|  |           t.error(err) | ||
|  |           t.equal(response.statusCode, 200) | ||
|  |           t.equal(response.headers['content-length'], '' + body.length) | ||
|  |           t.equal(response.headers['content-type'], 'text/html; charset=utf-8') | ||
|  |           t.equal(await ejs.render(fs.readFileSync('./templates/ejs-async.ejs', 'utf8'), {}, { async: true }), body.toString()) | ||
|  |           if (i === numTests - 1) fastify.close() | ||
|  |           resolve() | ||
|  |         }) | ||
|  |       }) | ||
|  |     } | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('reply.view with ejs engine, async: true (local override), and html-minifier', t => { | ||
|  |   t.plan(6) | ||
|  |   const fastify = Fastify() | ||
|  |   const ejs = require('ejs') | ||
|  | 
 | ||
|  |   fastify.register(require('../index'), { | ||
|  |     engine: { ejs }, | ||
|  |     options: { | ||
|  |       async: false, | ||
|  |       useHtmlMinifier: minifier, | ||
|  |       htmlMinifierOptions: minifierOpts | ||
|  |     }, | ||
|  |     templates: 'templates' | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/', (req, reply) => { | ||
|  |     reply.view('ejs-async.ejs', {}, { async: true }) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.listen({ port: 0 }, err => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     sget({ | ||
|  |       method: 'GET', | ||
|  |       url: 'http://localhost:' + fastify.server.address().port | ||
|  |     }, async (err, response, body) => { | ||
|  |       t.error(err) | ||
|  |       t.equal(response.statusCode, 200) | ||
|  |       t.equal(response.headers['content-length'], '' + body.length) | ||
|  |       t.equal(response.headers['content-type'], 'text/html; charset=utf-8') | ||
|  |       t.equal(minifier.minify(await ejs.render(fs.readFileSync('./templates/ejs-async.ejs', 'utf8'), { }, { async: true }), minifierOpts), body.toString()) | ||
|  |       fastify.close() | ||
|  |     }) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('reply.view with ejs engine, async: false (local override), and html-minifier', t => { | ||
|  |   t.plan(6) | ||
|  |   const fastify = Fastify() | ||
|  |   const ejs = require('ejs') | ||
|  | 
 | ||
|  |   fastify.register(require('../index'), { | ||
|  |     engine: { ejs }, | ||
|  |     options: { | ||
|  |       async: true, | ||
|  |       useHtmlMinifier: minifier, | ||
|  |       htmlMinifierOptions: minifierOpts | ||
|  |     }, | ||
|  |     templates: 'templates' | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/', (req, reply) => { | ||
|  |     reply.view('index.ejs', { text: 'text' }, { async: false }) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.listen({ port: 0 }, err => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     sget({ | ||
|  |       method: 'GET', | ||
|  |       url: 'http://localhost:' + fastify.server.address().port | ||
|  |     }, async (err, response, body) => { | ||
|  |       t.error(err) | ||
|  |       t.equal(response.statusCode, 200) | ||
|  |       t.equal(response.headers['content-length'], '' + body.length) | ||
|  |       t.equal(response.headers['content-type'], 'text/html; charset=utf-8') | ||
|  |       t.equal(minifier.minify(await ejs.render(fs.readFileSync('./templates/index.ejs', 'utf8'), { text: 'text' }, { async: false }), minifierOpts), body.toString()) | ||
|  |       fastify.close() | ||
|  |     }) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('reply.view with ejs engine, async: true (local override), and html-minifier in production mode', t => { | ||
|  |   const numTests = 3 | ||
|  |   t.plan(numTests * 5 + 1) | ||
|  |   const fastify = Fastify() | ||
|  |   const ejs = require('ejs') | ||
|  | 
 | ||
|  |   fastify.register(require('../index'), { | ||
|  |     engine: { ejs }, | ||
|  |     production: true, | ||
|  |     options: { | ||
|  |       async: false, | ||
|  |       useHtmlMinifier: minifier, | ||
|  |       htmlMinifierOptions: minifierOpts | ||
|  |     }, | ||
|  |     templates: 'templates' | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/', (req, reply) => { | ||
|  |     reply.view('ejs-async.ejs', {}, { async: true }) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.listen({ port: 0 }, async err => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     for (let i = 0; i < numTests; i++) { | ||
|  |       await new Promise((resolve, reject) => { | ||
|  |         sget({ | ||
|  |           method: 'GET', | ||
|  |           url: 'http://localhost:' + fastify.server.address().port | ||
|  |         }, async (err, response, body) => { | ||
|  |           t.error(err) | ||
|  |           t.equal(response.statusCode, 200) | ||
|  |           t.equal(response.headers['content-length'], '' + body.length) | ||
|  |           t.equal(response.headers['content-type'], 'text/html; charset=utf-8') | ||
|  |           t.equal(minifier.minify(await ejs.render(fs.readFileSync('./templates/ejs-async.ejs', 'utf8'), {}, { async: true }), minifierOpts), body.toString()) | ||
|  |           if (i === numTests - 1) fastify.close() | ||
|  |           resolve() | ||
|  |         }) | ||
|  |       }) | ||
|  |     } | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('reply.view with ejs engine, async: false (local override), and html-minifier in production mode', t => { | ||
|  |   const numTests = 2 | ||
|  |   t.plan(numTests * 5 + 1) | ||
|  |   const fastify = Fastify() | ||
|  |   const ejs = require('ejs') | ||
|  | 
 | ||
|  |   fastify.register(require('../index'), { | ||
|  |     engine: { ejs }, | ||
|  |     production: true, | ||
|  |     options: { | ||
|  |       async: true, | ||
|  |       useHtmlMinifier: minifier, | ||
|  |       htmlMinifierOptions: minifierOpts | ||
|  |     }, | ||
|  |     templates: 'templates' | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/', (req, reply) => { | ||
|  |     reply.view('index.ejs', { text: 'text' }, { async: false }) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.listen({ port: 0 }, async err => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     for (let i = 0; i < numTests; i++) { | ||
|  |       await new Promise((resolve, reject) => { | ||
|  |         sget({ | ||
|  |           method: 'GET', | ||
|  |           url: 'http://localhost:' + fastify.server.address().port | ||
|  |         }, async (err, response, body) => { | ||
|  |           t.error(err) | ||
|  |           t.equal(response.statusCode, 200) | ||
|  |           t.equal(response.headers['content-length'], '' + body.length) | ||
|  |           t.equal(response.headers['content-type'], 'text/html; charset=utf-8') | ||
|  |           t.equal(minifier.minify(await ejs.render(fs.readFileSync('./templates/index.ejs', 'utf8'), { text: 'text' }, { async: false }), minifierOpts), body.toString()) | ||
|  |           if (i === numTests - 1) fastify.close() | ||
|  |           resolve() | ||
|  |         }) | ||
|  |       }) | ||
|  |     } | ||
|  |   }) | ||
|  | }) |