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.
		
		
		
		
		
			
		
			
				
					576 lines
				
				14 KiB
			
		
		
			
		
	
	
					576 lines
				
				14 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const t = require('tap') | ||
|  | const test = t.test | ||
|  | const Fastify = require('fastify') | ||
|  | const Swagger = require('swagger-parser') | ||
|  | const yaml = require('js-yaml') | ||
|  | const fastifySwagger = require('../index') | ||
|  | const { | ||
|  |   schemaQuerystring, | ||
|  |   schemaBody, | ||
|  |   schemaParams, | ||
|  |   schemaSecurity | ||
|  | } = require('../examples/options') | ||
|  | let { | ||
|  |   swaggerOption | ||
|  | } = require('../examples/options') | ||
|  | 
 | ||
|  | const resolve = require('path').resolve | ||
|  | const readFileSync = require('fs').readFileSync | ||
|  | 
 | ||
|  | swaggerOption = { | ||
|  |   ...swaggerOption, | ||
|  |   exposeRoute: true | ||
|  | } | ||
|  | 
 | ||
|  | const schemaParamsWithoutDesc = { | ||
|  |   schema: { | ||
|  |     params: { | ||
|  |       type: 'object', | ||
|  |       properties: { | ||
|  |         id: { | ||
|  |           type: 'string' | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | const schemaParamsWithKey = { | ||
|  |   schema: { | ||
|  |     params: { | ||
|  |       type: 'object', | ||
|  |       properties: { | ||
|  |         id: { | ||
|  |           type: 'string', | ||
|  |           description: 'user id' | ||
|  |         }, | ||
|  |         key: { | ||
|  |           type: 'string', | ||
|  |           description: 'just some random key' | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | test('/documentation/json route', t => { | ||
|  |   t.plan(2) | ||
|  |   const fastify = Fastify() | ||
|  | 
 | ||
|  |   fastify.register(fastifySwagger, swaggerOption) | ||
|  | 
 | ||
|  |   fastify.get('/', () => {}) | ||
|  |   fastify.post('/', () => {}) | ||
|  |   fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |   fastify.post('/example', schemaBody, () => {}) | ||
|  |   fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |   fastify.get('/example1', schemaSecurity, () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/json' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     const payload = JSON.parse(res.payload) | ||
|  | 
 | ||
|  |     Swagger.validate(payload) | ||
|  |       .then(function (api) { | ||
|  |         t.pass('valid swagger object') | ||
|  |       }) | ||
|  |       .catch(function (err) { | ||
|  |         t.fail(err) | ||
|  |       }) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/documentation/uiConfig route', t => { | ||
|  |   t.plan(2) | ||
|  |   const fastify = Fastify() | ||
|  | 
 | ||
|  |   const uiConfig = { | ||
|  |     docExpansion: 'full' | ||
|  |   } | ||
|  | 
 | ||
|  |   const opts = { | ||
|  |     ...swaggerOption, | ||
|  |     uiConfig | ||
|  |   } | ||
|  | 
 | ||
|  |   fastify.register(fastifySwagger, opts) | ||
|  | 
 | ||
|  |   fastify.get('/', () => {}) | ||
|  |   fastify.post('/', () => {}) | ||
|  |   fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |   fastify.post('/example', schemaBody, () => {}) | ||
|  |   fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |   fastify.get('/example1', schemaSecurity, () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/uiConfig' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     const payload = JSON.parse(res.payload) | ||
|  | 
 | ||
|  |     t.match(payload, uiConfig, 'uiConfig should be valid') | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/documentation/initOAuth route', t => { | ||
|  |   t.plan(2) | ||
|  |   const fastify = Fastify() | ||
|  | 
 | ||
|  |   const initOAuth = { | ||
|  |     scopes: ['openid', 'profile', 'email', 'offline_access'] | ||
|  |   } | ||
|  | 
 | ||
|  |   const opts = { | ||
|  |     ...swaggerOption, | ||
|  |     initOAuth | ||
|  |   } | ||
|  | 
 | ||
|  |   fastify.register(fastifySwagger, opts) | ||
|  | 
 | ||
|  |   fastify.get('/', () => {}) | ||
|  |   fastify.post('/', () => {}) | ||
|  |   fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |   fastify.post('/example', schemaBody, () => {}) | ||
|  |   fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |   fastify.get('/example1', schemaSecurity, () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/initOAuth' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     const payload = JSON.parse(res.payload) | ||
|  | 
 | ||
|  |     t.match(payload, initOAuth, 'initOAuth should be valid') | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('fastify.swagger should return a valid swagger yaml', t => { | ||
|  |   t.plan(4) | ||
|  |   const fastify = Fastify() | ||
|  | 
 | ||
|  |   fastify.register(fastifySwagger, swaggerOption) | ||
|  | 
 | ||
|  |   fastify.get('/', () => {}) | ||
|  |   fastify.post('/', () => {}) | ||
|  |   fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |   fastify.post('/example', schemaBody, () => {}) | ||
|  |   fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |   fastify.get('/example1', schemaSecurity, () => {}) | ||
|  |   fastify.all('/parametersWithoutDesc/:id', schemaParamsWithoutDesc, () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/yaml' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |     t.equal(res.headers['content-type'], 'application/x-yaml') | ||
|  |     try { | ||
|  |       yaml.load(res.payload) | ||
|  |       t.pass('valid swagger yaml') | ||
|  |     } catch (err) { | ||
|  |       t.fail(err) | ||
|  |     } | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/documentation should redirect to ./documentation/static/index.html', t => { | ||
|  |   t.plan(4) | ||
|  |   const fastify = Fastify() | ||
|  |   fastify.register(fastifySwagger, swaggerOption) | ||
|  | 
 | ||
|  |   fastify.get('/', () => {}) | ||
|  |   fastify.post('/', () => {}) | ||
|  |   fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |   fastify.post('/example', schemaBody, () => {}) | ||
|  |   fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |   fastify.get('/example1', schemaSecurity, () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(res.statusCode, 302) | ||
|  |     t.equal(res.headers.location, './documentation/static/index.html') | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/documentation/ should redirect to ./static/index.html', t => { | ||
|  |   t.plan(4) | ||
|  |   const fastify = Fastify() | ||
|  |   fastify.register(fastifySwagger, swaggerOption) | ||
|  | 
 | ||
|  |   fastify.get('/', () => {}) | ||
|  |   fastify.post('/', () => {}) | ||
|  |   fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |   fastify.post('/example', schemaBody, () => {}) | ||
|  |   fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |   fastify.get('/example1', schemaSecurity, () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(res.statusCode, 302) | ||
|  |     t.equal(res.headers.location, './static/index.html') | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/v1/documentation should redirect to ./documentation/static/index.html', t => { | ||
|  |   t.plan(4) | ||
|  |   const fastify = Fastify() | ||
|  |   const opts = JSON.parse(JSON.stringify(swaggerOption)) | ||
|  |   opts.routePrefix = '/v1/documentation' | ||
|  |   fastify.register(fastifySwagger, opts) | ||
|  | 
 | ||
|  |   fastify.get('/', () => {}) | ||
|  |   fastify.post('/', () => {}) | ||
|  |   fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |   fastify.post('/example', schemaBody, () => {}) | ||
|  |   fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |   fastify.get('/example1', schemaSecurity, () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/v1/documentation' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(res.statusCode, 302) | ||
|  |     t.equal(res.headers.location, './documentation/static/index.html') | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/v1/documentation/ should redirect to ./static/index.html', t => { | ||
|  |   t.plan(4) | ||
|  |   const fastify = Fastify() | ||
|  |   const opts = JSON.parse(JSON.stringify(swaggerOption)) | ||
|  |   opts.routePrefix = '/v1/documentation' | ||
|  |   fastify.register(fastifySwagger, opts) | ||
|  | 
 | ||
|  |   fastify.get('/', () => {}) | ||
|  |   fastify.post('/', () => {}) | ||
|  |   fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |   fastify.post('/example', schemaBody, () => {}) | ||
|  |   fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |   fastify.get('/example1', schemaSecurity, () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/v1/documentation/' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(res.statusCode, 302) | ||
|  |     t.equal(res.headers.location, './static/index.html') | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/v1/foobar should redirect to ./foobar/static/index.html - in plugin', t => { | ||
|  |   t.plan(4) | ||
|  |   const fastify = Fastify() | ||
|  | 
 | ||
|  |   fastify.register(function (fastify, options, next) { | ||
|  |     const opts = JSON.parse(JSON.stringify(swaggerOption)) | ||
|  |     opts.routePrefix = '/foobar' | ||
|  |     fastify.register(fastifySwagger, opts) | ||
|  | 
 | ||
|  |     fastify.get('/', () => {}) | ||
|  |     fastify.post('/', () => {}) | ||
|  |     fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |     fastify.post('/example', schemaBody, () => {}) | ||
|  |     fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |     fastify.get('/example1', schemaSecurity, () => {}) | ||
|  | 
 | ||
|  |     next() | ||
|  |   }, { prefix: '/v1' }) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/v1/foobar' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(res.statusCode, 302) | ||
|  |     t.equal(res.headers.location, './foobar/static/index.html') | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/v1/foobar/ should redirect to ./static/index.html - in plugin', t => { | ||
|  |   t.plan(4) | ||
|  |   const fastify = Fastify() | ||
|  | 
 | ||
|  |   fastify.register(function (fastify, options, next) { | ||
|  |     const opts = JSON.parse(JSON.stringify(swaggerOption)) | ||
|  |     opts.routePrefix = '/foobar' | ||
|  |     fastify.register(fastifySwagger, opts) | ||
|  | 
 | ||
|  |     fastify.get('/', () => {}) | ||
|  |     fastify.post('/', () => {}) | ||
|  |     fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |     fastify.post('/example', schemaBody, () => {}) | ||
|  |     fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |     fastify.get('/example1', schemaSecurity, () => {}) | ||
|  | 
 | ||
|  |     next() | ||
|  |   }, { prefix: '/v1' }) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/v1/foobar/' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(res.statusCode, 302) | ||
|  |     t.equal(res.headers.location, './static/index.html') | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('with routePrefix: \'/\' should redirect to ./static/index.html', t => { | ||
|  |   t.plan(4) | ||
|  |   const fastify = Fastify() | ||
|  | 
 | ||
|  |   const opts = JSON.parse(JSON.stringify(swaggerOption)) | ||
|  |   opts.routePrefix = '/' | ||
|  |   fastify.register(fastifySwagger, opts) | ||
|  | 
 | ||
|  |   fastify.get('/foo', () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(res.statusCode, 302) | ||
|  |     t.equal(res.headers.location, './static/index.html') | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/documentation/static/:file should send back the correct file', t => { | ||
|  |   t.plan(24) | ||
|  |   const fastify = Fastify() | ||
|  | 
 | ||
|  |   fastify.register(fastifySwagger, swaggerOption) | ||
|  | 
 | ||
|  |   fastify.get('/', () => {}) | ||
|  |   fastify.post('/', () => {}) | ||
|  |   fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |   fastify.post('/example', schemaBody, () => {}) | ||
|  |   fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |   fastify.get('/example1', schemaSecurity, () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(res.statusCode, 302) | ||
|  |     t.equal(res.headers.location, './static/index.html') | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.ready(() => { | ||
|  |     fastify.inject({ | ||
|  |       method: 'GET', | ||
|  |       url: '/documentation/static/' | ||
|  |     }, (err, res) => { | ||
|  |       t.error(err) | ||
|  |       t.equal(typeof res.payload, 'string') | ||
|  |       t.equal(res.headers['content-type'], 'text/html; charset=UTF-8') | ||
|  |       t.equal( | ||
|  |         readFileSync( | ||
|  |           resolve(__dirname, '..', 'static', 'index.html'), | ||
|  |           'utf8' | ||
|  |         ), | ||
|  |         res.payload | ||
|  |       ) | ||
|  |       t.ok(res.payload.indexOf('resolveUrl') !== -1) | ||
|  |     }) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/static/oauth2-redirect.html' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |     t.equal(res.headers['content-type'], 'text/html; charset=UTF-8') | ||
|  |     t.equal( | ||
|  |       readFileSync( | ||
|  |         resolve(__dirname, '..', 'static', 'oauth2-redirect.html'), | ||
|  |         'utf8' | ||
|  |       ), | ||
|  |       res.payload | ||
|  |     ) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/static/swagger-ui.css' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |     t.equal(res.headers['content-type'], 'text/css; charset=UTF-8') | ||
|  |     t.equal( | ||
|  |       readFileSync( | ||
|  |         resolve(__dirname, '..', 'static', 'swagger-ui.css'), | ||
|  |         'utf8' | ||
|  |       ), | ||
|  |       res.payload | ||
|  |     ) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/static/swagger-ui-bundle.js' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |     t.equal(res.headers['content-type'], 'application/javascript; charset=UTF-8') | ||
|  |     t.equal( | ||
|  |       readFileSync( | ||
|  |         resolve(__dirname, '..', 'static', 'swagger-ui-bundle.js'), | ||
|  |         'utf8' | ||
|  |       ), | ||
|  |       res.payload | ||
|  |     ) | ||
|  |   }) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/static/swagger-ui-standalone-preset.js' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(typeof res.payload, 'string') | ||
|  |     t.equal(res.headers['content-type'], 'application/javascript; charset=UTF-8') | ||
|  |     t.equal( | ||
|  |       readFileSync( | ||
|  |         resolve(__dirname, '..', 'static', 'swagger-ui-standalone-preset.js'), | ||
|  |         'utf8' | ||
|  |       ), | ||
|  |       res.payload | ||
|  |     ) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/documentation/static/:file 404', t => { | ||
|  |   t.plan(3) | ||
|  |   const fastify = Fastify() | ||
|  | 
 | ||
|  |   fastify.register(fastifySwagger, swaggerOption) | ||
|  | 
 | ||
|  |   fastify.get('/', () => {}) | ||
|  |   fastify.post('/', () => {}) | ||
|  |   fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |   fastify.post('/example', schemaBody, () => {}) | ||
|  |   fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |   fastify.get('/example1', schemaSecurity, () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/static/stuff.css' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     const payload = JSON.parse(res.payload) | ||
|  |     t.equal(res.statusCode, 404) | ||
|  |     t.match(payload, { | ||
|  |       error: 'Not Found', | ||
|  |       statusCode: 404 | ||
|  |     }) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/documentation2/json route (overwrite)', t => { | ||
|  |   t.plan(2) | ||
|  |   const fastify = Fastify() | ||
|  |   const swaggerOptionWithRouteOverwrite = JSON.parse(JSON.stringify(swaggerOption)) | ||
|  |   swaggerOptionWithRouteOverwrite.routePrefix = '/documentation2' | ||
|  |   fastify.register(fastifySwagger, swaggerOptionWithRouteOverwrite) | ||
|  | 
 | ||
|  |   fastify.get('/', () => {}) | ||
|  |   fastify.post('/', () => {}) | ||
|  |   fastify.get('/example', schemaQuerystring, () => {}) | ||
|  |   fastify.post('/example', schemaBody, () => {}) | ||
|  |   fastify.get('/parameters/:id', schemaParams, () => {}) | ||
|  |   fastify.get('/example1', schemaSecurity, () => {}) | ||
|  |   fastify.get('/parameters/:id/:key', schemaParamsWithKey, () => {}) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation2/json' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  | 
 | ||
|  |     const payload = JSON.parse(res.payload) | ||
|  | 
 | ||
|  |     Swagger.validate(payload) | ||
|  |       .then(function (api) { | ||
|  |         t.pass('valid swagger object') | ||
|  |       }) | ||
|  |       .catch(function (err) { | ||
|  |         t.fail(err) | ||
|  |       }) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/documentation/:myfile should return 404 in dynamic mode', t => { | ||
|  |   t.plan(2) | ||
|  |   const fastify = Fastify() | ||
|  |   fastify.register(fastifySwagger, swaggerOption) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/swagger-ui.js' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(res.statusCode, 404) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/documentation/:myfile should run custom NotFoundHandler in dynamic mode', t => { | ||
|  |   t.plan(2) | ||
|  |   const fastify = Fastify() | ||
|  |   const notFoundHandler = function (req, reply) { | ||
|  |     reply.code(410).send() | ||
|  |   } | ||
|  |   fastify.setNotFoundHandler(notFoundHandler) | ||
|  |   fastify.register(fastifySwagger, swaggerOption) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/swagger-ui.js' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(res.statusCode, 410) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('/documentation/ should redirect to ./static/index.html', t => { | ||
|  |   t.plan(3) | ||
|  |   const fastify = Fastify() | ||
|  |   fastify.register(fastifySwagger, swaggerOption) | ||
|  | 
 | ||
|  |   fastify.inject({ | ||
|  |     method: 'GET', | ||
|  |     url: '/documentation/' | ||
|  |   }, (err, res) => { | ||
|  |     t.error(err) | ||
|  |     t.equal(res.statusCode, 302) | ||
|  |     t.equal(res.headers.location, './static/index.html') | ||
|  |   }) | ||
|  | }) |