From 207f0dd7419f1cb982eb53dca0cd5a1a33016e65 Mon Sep 17 00:00:00 2001 From: Arno Hilke Date: Fri, 12 Mar 2021 04:09:04 +0100 Subject: [PATCH] test: Add Test Case for Allow Header The Allow header must be sent if the server responds with 405 to indicate which request methods can be used. See #467 --- test/allow.header.spec.ts | 85 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 test/allow.header.spec.ts diff --git a/test/allow.header.spec.ts b/test/allow.header.spec.ts new file mode 100644 index 00000000..bc4ccd9b --- /dev/null +++ b/test/allow.header.spec.ts @@ -0,0 +1,85 @@ +import { expect } from 'chai'; +import * as express from 'express'; +import { Server } from 'http'; +import * as request from 'supertest'; +import * as packageJson from '../package.json'; +import * as OpenApiValidator from '../src'; +import { OpenAPIV3 } from '../src/framework/types'; +import { startServer } from './common/app.common'; + +describe(packageJson.name, () => { + let app = null; + + before(async () => { + app = await createApp(); + }); + + after(() => { + app.server.close(); + }); + + it('adds allow header to 405 - Method Not Allowed', async () => + request(app) + .put('/v1/pets/greebo') + .expect(405) + .then((response) => { + expect(response.header).to.include({ allow: 'POST, GET' }); + })); +}); + +async function createApp(): Promise { + const app = express(); + + app.use( + OpenApiValidator.middleware({ + apiSpec: createApiSpec(), + validateRequests: true, + }), + ); + app.use( + express + .Router() + .get('/v1/pets/:petId', () => ['cat', 'dog']) + .post('/v1/pets/:petId', (req, res) => res.json(req.body)), + ); + + await startServer(app, 3001); + return app; +} + +function createApiSpec(): OpenAPIV3.Document { + return { + openapi: '3.0.3', + info: { + title: 'Petstore API', + version: '1.0.0', + }, + servers: [ + { + url: '/v1/', + }, + ], + paths: { + '/pets/{petId}': { + parameters: [ + { + in: 'path', + name: 'petId', + required: true, + schema: { type: 'string' }, + }, + ], + get: { + responses: { + '200': { description: 'GET Pet' }, + }, + }, + post: { + responses: { + '200': { description: 'POST Pet' }, + }, + }, + }, + }, + }; +}