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.
897 lines
19 KiB
897 lines
19 KiB
'use strict'
|
|
|
|
const path = require('path')
|
|
const { test } = require('tap')
|
|
const Fastify = require('fastify')
|
|
const fastifySwagger = require('../../index')
|
|
const fastifySwaggerDynamic = require('../../lib/mode/dynamic')
|
|
const yaml = require('js-yaml')
|
|
const Swagger = require('swagger-parser')
|
|
|
|
const resolve = require('path').resolve
|
|
const readFileSync = require('fs').readFileSync
|
|
|
|
test('specification validation check works', t => {
|
|
const specifications = [
|
|
'',
|
|
'123',
|
|
{},
|
|
{
|
|
path: 123
|
|
},
|
|
{
|
|
path: '/hello/lionel.richie'
|
|
},
|
|
{
|
|
path: './examples/example-static-specification.yaml',
|
|
postProcessor: 'hello'
|
|
}
|
|
]
|
|
|
|
t.plan(specifications.length * 2)
|
|
|
|
specifications.forEach(specification => {
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, {
|
|
mode: 'static',
|
|
specification,
|
|
exposeRoute: true
|
|
})
|
|
|
|
fastify.ready(err => {
|
|
t.not(err, undefined)
|
|
t.matchSnapshot(err.toString())
|
|
})
|
|
})
|
|
})
|
|
|
|
test('registering plugin with invalid mode throws an error', t => {
|
|
const config = {
|
|
mode: 'error'
|
|
}
|
|
|
|
t.plan(1)
|
|
const fastify = Fastify()
|
|
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.ready(err => {
|
|
t.equal(err.message, 'unsupported mode, should be one of [\'static\', \'dynamic\']')
|
|
})
|
|
})
|
|
|
|
test('unsupported file extension in specification.path throws an error', t => {
|
|
const config = {
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.js'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(1)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.ready(err => {
|
|
t.equal(err.message, 'specification.path extension name is not supported, should be one from [\'.yaml\', \'.json\']')
|
|
})
|
|
})
|
|
|
|
test('non-string specification.baseDir throws an error ', t => {
|
|
const config = {
|
|
exposeRoute: true,
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml',
|
|
baseDir: 1
|
|
}
|
|
}
|
|
|
|
t.plan(1)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.ready(err => {
|
|
t.equal(err.message, 'specification.baseDir should be string')
|
|
})
|
|
})
|
|
|
|
test('non-object specification.document throws an error', t => {
|
|
const config = {
|
|
exposeRoute: true,
|
|
mode: 'static',
|
|
specification: {
|
|
document: 'doc'
|
|
}
|
|
}
|
|
|
|
t.plan(1)
|
|
const fastify = new Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.ready(err => {
|
|
t.equal(err.message, 'specification.document is not an object')
|
|
})
|
|
})
|
|
|
|
test('swagger route returns yaml', t => {
|
|
const config = {
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(4)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
// check that yaml is there
|
|
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('swagger route returns json', t => {
|
|
const config = {
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.json'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(4)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
// check that json is there
|
|
fastify.inject(
|
|
{
|
|
method: 'GET',
|
|
url: '/documentation/json'
|
|
},
|
|
(err, res) => {
|
|
t.error(err)
|
|
t.equal(typeof res.payload, 'string')
|
|
t.equal(res.headers['content-type'], 'application/json; charset=utf-8')
|
|
try {
|
|
yaml.load(res.payload)
|
|
t.pass('valid swagger json')
|
|
} catch (err) {
|
|
t.fail(err)
|
|
}
|
|
}
|
|
)
|
|
})
|
|
|
|
test('postProcessor works, swagger route returns updated yaml', t => {
|
|
const config = {
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml',
|
|
postProcessor: function (swaggerObject) {
|
|
swaggerObject.servers[0].url = 'http://localhost:4000/'
|
|
return swaggerObject
|
|
}
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(5)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
// check that yaml is there
|
|
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.matchSnapshot(res.payload)
|
|
t.pass('valid swagger yaml')
|
|
} catch (err) {
|
|
t.fail(err)
|
|
}
|
|
}
|
|
)
|
|
})
|
|
|
|
test('swagger route returns explicitly passed doc', t => {
|
|
const document = {
|
|
info: {
|
|
title: 'Test swagger',
|
|
description: 'testing the fastify swagger api',
|
|
version: '0.1.0'
|
|
}
|
|
}
|
|
|
|
const config = {
|
|
mode: 'static',
|
|
specification: {
|
|
document
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(3)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
// check that json is there
|
|
fastify.inject(
|
|
{
|
|
method: 'GET',
|
|
url: '/documentation/json'
|
|
},
|
|
(err, res) => {
|
|
t.error(err)
|
|
|
|
try {
|
|
const payload = JSON.parse(res.payload)
|
|
t.matchSnapshot(JSON.stringify(payload, null, 2))
|
|
t.pass('valid explicitly passed spec document')
|
|
} catch (error) {
|
|
t.fail(error)
|
|
}
|
|
}
|
|
)
|
|
})
|
|
|
|
test('/documentation/:file should serve static file from the location of main specification file', t => {
|
|
const config = {
|
|
exposeRoute: true,
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml'
|
|
}
|
|
}
|
|
|
|
t.plan(7)
|
|
const fastify = new Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.inject({
|
|
method: 'GET',
|
|
url: '/documentation/non-existing-file'
|
|
}, (err, res) => {
|
|
t.error(err)
|
|
t.equal(res.statusCode, 404)
|
|
})
|
|
|
|
fastify.inject({
|
|
method: 'GET',
|
|
url: '/documentation/example-static-specification.yaml'
|
|
}, (err, res) => {
|
|
t.error(err)
|
|
t.equal(res.statusCode, 200)
|
|
t.equal(
|
|
readFileSync(
|
|
resolve(__dirname, '..', '..', 'examples', 'example-static-specification.yaml'),
|
|
'utf8'
|
|
),
|
|
res.payload
|
|
)
|
|
})
|
|
|
|
fastify.inject({
|
|
method: 'GET',
|
|
url: '/documentation/dynamic-swagger.js'
|
|
}, (err, res) => {
|
|
t.error(err)
|
|
t.equal(res.statusCode, 200)
|
|
})
|
|
})
|
|
|
|
test('/documentation/non-existing-file calls custom NotFoundHandler', t => {
|
|
const config = {
|
|
exposeRoute: true,
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml'
|
|
}
|
|
}
|
|
|
|
t.plan(2)
|
|
const fastify = new Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
fastify.setNotFoundHandler((request, reply) => {
|
|
reply.code(410).send()
|
|
})
|
|
|
|
fastify.inject({
|
|
method: 'GET',
|
|
url: '/documentation/some-file-that-does-not-exist.js'
|
|
}, (err, res) => {
|
|
t.error(err)
|
|
t.equal(res.statusCode, 410)
|
|
})
|
|
})
|
|
|
|
test('/documentation/:file should be served from custom location', t => {
|
|
const config = {
|
|
exposeRoute: true,
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml',
|
|
baseDir: resolve(__dirname, '..', '..', 'static')
|
|
}
|
|
}
|
|
|
|
t.plan(3)
|
|
const fastify = new Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.inject({
|
|
method: 'GET',
|
|
url: '/documentation/oauth2-redirect.html'
|
|
}, (err, res) => {
|
|
t.error(err)
|
|
t.equal(res.statusCode, 200)
|
|
t.equal(
|
|
readFileSync(resolve(__dirname, '..', '..', 'static', 'oauth2-redirect.html'), 'utf8'),
|
|
res.payload
|
|
)
|
|
})
|
|
})
|
|
|
|
test('/documentation/:file should be served from custom location with trailing slash(es)', t => {
|
|
const config = {
|
|
exposeRoute: true,
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml',
|
|
baseDir: resolve(__dirname, '..', '..', 'static') + '/'
|
|
}
|
|
}
|
|
|
|
t.plan(3)
|
|
const fastify = new Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.inject({
|
|
method: 'GET',
|
|
url: '/documentation/oauth2-redirect.html'
|
|
}, (err, res) => {
|
|
t.error(err)
|
|
t.equal(res.statusCode, 200)
|
|
t.equal(
|
|
readFileSync(resolve(__dirname, '..', '..', 'static', 'oauth2-redirect.html'), 'utf8'),
|
|
res.payload
|
|
)
|
|
})
|
|
})
|
|
|
|
test('/documentation/yaml returns cache.swaggerString on second request in static mode', t => {
|
|
const config = {
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(8)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
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)
|
|
}
|
|
}
|
|
)
|
|
|
|
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')
|
|
yaml.load(res.payload)
|
|
t.pass('valid swagger yaml')
|
|
}
|
|
)
|
|
})
|
|
|
|
test('/documentation/json returns cache.swaggerObject on second request in static mode', t => {
|
|
const config = {
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.json'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(8)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.inject(
|
|
{
|
|
method: 'GET',
|
|
url: '/documentation/json'
|
|
},
|
|
(err, res) => {
|
|
t.error(err)
|
|
t.equal(typeof res.payload, 'string')
|
|
t.equal(res.headers['content-type'], 'application/json; charset=utf-8')
|
|
t.pass('valid swagger json')
|
|
}
|
|
)
|
|
|
|
fastify.inject(
|
|
{
|
|
method: 'GET',
|
|
url: '/documentation/json'
|
|
},
|
|
(err, res) => {
|
|
t.error(err)
|
|
t.equal(typeof res.payload, 'string')
|
|
t.equal(res.headers['content-type'], 'application/json; charset=utf-8')
|
|
t.pass('valid swagger json')
|
|
}
|
|
)
|
|
})
|
|
|
|
test('/documentation/yaml returns cache.swaggerString on second request in dynamic mode', t => {
|
|
const config = {
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(8)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
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)
|
|
}
|
|
}
|
|
)
|
|
|
|
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/json returns cache.swaggerObject on second request in dynamic mode', t => {
|
|
const config = {
|
|
specification: {
|
|
path: './examples/example-static-specification.json'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(8)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.inject(
|
|
{
|
|
method: 'GET',
|
|
url: '/documentation/json'
|
|
},
|
|
(err, res) => {
|
|
t.error(err)
|
|
t.equal(typeof res.payload, 'string')
|
|
t.equal(res.headers['content-type'], 'application/json; charset=utf-8')
|
|
t.pass('valid swagger json')
|
|
}
|
|
)
|
|
|
|
fastify.inject(
|
|
{
|
|
method: 'GET',
|
|
url: '/documentation/json'
|
|
},
|
|
(err, res) => {
|
|
t.error(err)
|
|
t.equal(typeof res.payload, 'string')
|
|
t.equal(res.headers['content-type'], 'application/json; charset=utf-8')
|
|
t.pass('valid swagger json')
|
|
}
|
|
)
|
|
})
|
|
|
|
test('swagger routes are not exposed', t => {
|
|
const config = {
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.json'
|
|
},
|
|
exposeRoute: false
|
|
}
|
|
|
|
t.plan(4)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
// check that yaml is there
|
|
fastify.inject(
|
|
{
|
|
method: 'GET',
|
|
url: '/documentation/json'
|
|
},
|
|
(err, res) => {
|
|
t.error(err)
|
|
t.equal(typeof res.payload, 'string')
|
|
t.equal(res.headers['content-type'], 'application/json; charset=utf-8')
|
|
t.pass('routes are not exposed')
|
|
}
|
|
)
|
|
})
|
|
|
|
test('inserts default opts in fastifySwagger', t => {
|
|
t.plan(1)
|
|
const fastify = Fastify()
|
|
|
|
fastify.register(fastifySwagger)
|
|
|
|
fastify.ready(() => {
|
|
t.pass('Inserted default option for fastifySwagger.')
|
|
})
|
|
})
|
|
|
|
test('inserts default package name', t => {
|
|
const config = {
|
|
mode: 'dynamic',
|
|
specification: {
|
|
path: './examples/example-static-specification.json'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(2)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
const originalPathJoin = path.join
|
|
const testPackageJSON = path.join(__dirname, '../../examples/test-package.json')
|
|
|
|
path.join = (...args) => {
|
|
if (args[3] === 'package.json') {
|
|
return testPackageJSON
|
|
}
|
|
return originalPathJoin(...args)
|
|
}
|
|
|
|
fastify.inject(
|
|
{
|
|
method: 'GET',
|
|
url: '/documentation/json'
|
|
},
|
|
(err, res) => {
|
|
t.error(err)
|
|
t.pass('Inserted default package name.')
|
|
}
|
|
)
|
|
})
|
|
|
|
test('inserts default package name - openapi', t => {
|
|
const config = {
|
|
mode: 'dynamic',
|
|
openapi: {
|
|
servers: []
|
|
},
|
|
specification: {
|
|
path: './examples/example-static-specification.json'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(2)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
const originalPathJoin = path.join
|
|
const testPackageJSON = path.join(__dirname, '../../examples/test-package.json')
|
|
|
|
path.join = (...args) => {
|
|
if (args[3] === 'package.json') {
|
|
return testPackageJSON
|
|
}
|
|
return originalPathJoin(...args)
|
|
}
|
|
|
|
fastify.inject(
|
|
{
|
|
method: 'GET',
|
|
url: '/documentation/json'
|
|
},
|
|
(err, res) => {
|
|
t.error(err)
|
|
t.pass('Inserted default package name.')
|
|
}
|
|
)
|
|
})
|
|
|
|
test('throws an error if cannot parse package\'s JSON', t => {
|
|
const config = {
|
|
mode: 'dynamic',
|
|
specification: {
|
|
path: './examples/example-static-specification.json'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(2)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
const originalPathJoin = path.join
|
|
const testPackageJSON = path.join(__dirname, '')
|
|
|
|
path.join = (...args) => {
|
|
if (args[3] === 'package.json') {
|
|
return testPackageJSON
|
|
}
|
|
return originalPathJoin(...args)
|
|
}
|
|
|
|
fastify.inject(
|
|
{
|
|
method: 'GET',
|
|
url: '/documentation/json'
|
|
},
|
|
(err, res) => {
|
|
t.error(err)
|
|
t.equal(err, null)
|
|
}
|
|
)
|
|
})
|
|
|
|
test('throws an error if cannot parse package\'s JSON - openapi', t => {
|
|
const config = {
|
|
mode: 'dynamic',
|
|
openapi: {
|
|
servers: []
|
|
},
|
|
specification: {
|
|
path: './examples/example-static-specification.json'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(2)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
const originalPathJoin = path.join
|
|
const testPackageJSON = path.join(__dirname, '')
|
|
|
|
path.join = (...args) => {
|
|
if (args[3] === 'package.json') {
|
|
return testPackageJSON
|
|
}
|
|
return originalPathJoin(...args)
|
|
}
|
|
|
|
fastify.inject(
|
|
{
|
|
method: 'GET',
|
|
url: '/documentation/json'
|
|
},
|
|
(err, res) => {
|
|
t.error(err)
|
|
t.equal(err, null)
|
|
}
|
|
)
|
|
})
|
|
|
|
test('inserts default opts in fastifySwaggerDynamic (dynamic.js)', t => {
|
|
t.plan(1)
|
|
const fastify = Fastify()
|
|
|
|
fastify.register(fastifySwaggerDynamic)
|
|
|
|
fastify.ready(() => {
|
|
t.pass('Inserted default option for fastifySwagger.')
|
|
})
|
|
})
|
|
|
|
test('/documentation/uiConfig should have default', t => {
|
|
const config = {
|
|
exposeRoute: true,
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml',
|
|
baseDir: resolve(__dirname, '..', '..', 'static')
|
|
}
|
|
}
|
|
|
|
t.plan(3)
|
|
const fastify = new Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.inject({
|
|
method: 'GET',
|
|
url: '/documentation/uiConfig'
|
|
}, (err, res) => {
|
|
t.error(err)
|
|
t.equal(res.statusCode, 200)
|
|
t.equal(res.payload, '{}')
|
|
})
|
|
})
|
|
|
|
test('/documentation/uiConfig can be customize', t => {
|
|
const config = {
|
|
exposeRoute: true,
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml',
|
|
baseDir: resolve(__dirname, '..', '..', 'static')
|
|
},
|
|
uiConfig: {
|
|
docExpansion: 'full'
|
|
}
|
|
}
|
|
|
|
t.plan(3)
|
|
const fastify = new Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.inject({
|
|
method: 'GET',
|
|
url: '/documentation/uiConfig'
|
|
}, (err, res) => {
|
|
t.error(err)
|
|
t.equal(res.statusCode, 200)
|
|
t.equal(res.payload, '{"docExpansion":"full"}')
|
|
})
|
|
})
|
|
|
|
test('/documentation/initOAuth should have default', t => {
|
|
const config = {
|
|
exposeRoute: true,
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml',
|
|
baseDir: resolve(__dirname, '..', '..', 'static')
|
|
}
|
|
}
|
|
|
|
t.plan(3)
|
|
const fastify = new Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.inject({
|
|
method: 'GET',
|
|
url: '/documentation/initOAuth'
|
|
}, (err, res) => {
|
|
t.error(err)
|
|
t.equal(res.statusCode, 200)
|
|
t.equal(res.payload, '{}')
|
|
})
|
|
})
|
|
|
|
test('/documentation/initOAuth can be customize', t => {
|
|
const config = {
|
|
exposeRoute: true,
|
|
mode: 'static',
|
|
specification: {
|
|
path: './examples/example-static-specification.yaml',
|
|
baseDir: resolve(__dirname, '..', '..', 'static')
|
|
},
|
|
initOAuth: {
|
|
scopes: ['openid', 'profile', 'email', 'offline_access']
|
|
}
|
|
}
|
|
|
|
t.plan(3)
|
|
const fastify = new Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
fastify.inject({
|
|
method: 'GET',
|
|
url: '/documentation/initOAuth'
|
|
}, (err, res) => {
|
|
t.error(err)
|
|
t.equal(res.statusCode, 200)
|
|
t.equal(res.payload, '{"scopes":["openid","profile","email","offline_access"]}')
|
|
})
|
|
})
|
|
|
|
test('should still return valid swagger object when missing package.json', t => {
|
|
const config = {
|
|
mode: 'dynamic',
|
|
specification: {
|
|
path: './examples/example-static-specification.json'
|
|
},
|
|
exposeRoute: true
|
|
}
|
|
|
|
t.plan(3)
|
|
const fastify = Fastify()
|
|
fastify.register(fastifySwagger, config)
|
|
|
|
const originalPathJoin = path.join
|
|
const testPackageJSON = path.join(__dirname, 'missing.json')
|
|
|
|
path.join = (...args) => {
|
|
if (args[3] === 'package.json') {
|
|
return testPackageJSON
|
|
}
|
|
return originalPathJoin(...args)
|
|
}
|
|
|
|
fastify.ready(err => {
|
|
t.error(err)
|
|
|
|
const swaggerObject = fastify.swagger()
|
|
t.equal(typeof swaggerObject, 'object')
|
|
|
|
Swagger.validate(swaggerObject)
|
|
.then(function (api) {
|
|
t.pass('Swagger object is still valid.')
|
|
})
|
|
.catch(function (err) {
|
|
t.fail(err)
|
|
})
|
|
})
|
|
})
|