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.
		
		
		
		
		
			
		
			
				
					140 lines
				
				3.0 KiB
			
		
		
			
		
	
	
					140 lines
				
				3.0 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const test = require('tap').test | ||
|  | const sget = require('simple-get') | ||
|  | const Fastify = require('../') | ||
|  | const { FST_ERR_BAD_URL } = require('../lib/errors') | ||
|  | 
 | ||
|  | function getUrl (app) { | ||
|  |   const { address, port } = app.server.address() | ||
|  |   if (address === '::1') { | ||
|  |     return `http://[${address}]:${port}` | ||
|  |   } else { | ||
|  |     return `http://${address}:${port}` | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | test('Should honor ignoreTrailingSlash option', t => { | ||
|  |   t.plan(4) | ||
|  |   const fastify = Fastify({ | ||
|  |     ignoreTrailingSlash: true | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/test', (req, res) => { | ||
|  |     res.send('test') | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.listen(0, (err) => { | ||
|  |     fastify.server.unref() | ||
|  |     if (err) t.threw(err) | ||
|  | 
 | ||
|  |     const baseUrl = getUrl(fastify) | ||
|  | 
 | ||
|  |     sget.concat(baseUrl + '/test', (err, res, data) => { | ||
|  |       if (err) t.threw(err) | ||
|  |       t.equal(res.statusCode, 200) | ||
|  |       t.equal(data.toString(), 'test') | ||
|  |     }) | ||
|  | 
 | ||
|  |     sget.concat(baseUrl + '/test/', (err, res, data) => { | ||
|  |       if (err) t.threw(err) | ||
|  |       t.equal(res.statusCode, 200) | ||
|  |       t.equal(data.toString(), 'test') | ||
|  |     }) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('Should honor maxParamLength option', t => { | ||
|  |   t.plan(4) | ||
|  |   const fastify = Fastify({ maxParamLength: 10 }) | ||
|  | 
 | ||
|  |   fastify.get('/test/:id', (req, reply) => { | ||
|  |     reply.send({ hello: 'world' }) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/test/123456789' | ||
|  |   }, (error, res) => { | ||
|  |     t.error(error) | ||
|  |     t.equal(res.statusCode, 200) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/test/123456789abcd' | ||
|  |   }, (error, res) => { | ||
|  |     t.error(error) | ||
|  |     t.equal(res.statusCode, 404) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('Should expose router options via getters on request and reply', t => { | ||
|  |   t.plan(7) | ||
|  |   const fastify = Fastify() | ||
|  | 
 | ||
|  |   fastify.get('/test/:id', (req, reply) => { | ||
|  |     t.equal(reply.context.config.url, '/test/:id') | ||
|  |     t.equal(reply.context.config.method, 'GET') | ||
|  |     t.equal(req.routerPath, '/test/:id') | ||
|  |     t.equal(req.routerMethod, 'GET') | ||
|  |     t.equal(req.is404, false) | ||
|  |     reply.send({ hello: 'world' }) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/test/123456789' | ||
|  |   }, (error, res) => { | ||
|  |     t.error(error) | ||
|  |     t.equal(res.statusCode, 200) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('Should set is404 flag for unmatched paths', t => { | ||
|  |   t.plan(3) | ||
|  |   const fastify = Fastify() | ||
|  | 
 | ||
|  |   fastify.setNotFoundHandler((req, reply) => { | ||
|  |     t.equal(req.is404, true) | ||
|  |     reply.code(404).send({ error: 'Not Found', message: 'Four oh for', statusCode: 404 }) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/nonexist/123456789' | ||
|  |   }, (error, res) => { | ||
|  |     t.error(error) | ||
|  |     t.equal(res.statusCode, 404) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('Should honor frameworkErrors option', t => { | ||
|  |   t.plan(3) | ||
|  |   const fastify = Fastify({ | ||
|  |     frameworkErrors: function (err, req, res) { | ||
|  |       if (err instanceof FST_ERR_BAD_URL) { | ||
|  |         t.ok(true) | ||
|  |       } else { | ||
|  |         t.fail() | ||
|  |       } | ||
|  |       res.send(`${err.message} - ${err.code}`) | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.get('/test/:id', (req, res) => { | ||
|  |     res.send('{ hello: \'world\' }') | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.inject( | ||
|  |     { | ||
|  |       method: 'GET', | ||
|  |       url: '/test/%world' | ||
|  |     }, | ||
|  |     (err, res) => { | ||
|  |       t.error(err) | ||
|  |       t.equal(res.body, '\'%world\' is not a valid url component - FST_ERR_BAD_URL') | ||
|  |     } | ||
|  |   ) | ||
|  | }) |