@redocly/openapi-core
Version:
See https://github.com/Redocly/redocly-cli
181 lines (177 loc) • 5.52 kB
text/typescript
import { outdent } from 'outdent';
import { lintDocument } from '../../../lint';
import { parseYamlToDocument, makeConfig } from '../../../../__tests__/utils';
import { BaseResolver } from '../../../resolve';
describe('Oas2 response-contains-header', () => {
it('should report a response object not containing the header', async () => {
const document = parseYamlToDocument(outdent`
swagger: '2.0'
schemes:
- https
basePath: /v2
paths:
'/accounts/{accountId}':
get:
description: Retrieve a sub account under the master account.
operationId: account
responses:
'201':
description: Account Created
headers:
Content-Location:
description: Location of created Account
type: string
'404':
description: User not found
`);
const results = await lintDocument({
externalRefResolver: new BaseResolver(),
document,
config: await makeConfig({
rules: {
'response-contains-header': {
severity: 'error',
names: { '2xx': ['Content-Length'], '4xx': ['Content-Length'] },
},
},
}),
});
expect(results).toMatchInlineSnapshot(`
[
{
"location": [
{
"pointer": "#/paths/~1accounts~1{accountId}/get/responses/201/headers",
"reportOnKey": true,
"source": Source {
"absoluteRef": "",
"body": "swagger: '2.0'
schemes:
- https
basePath: /v2
paths:
'/accounts/{accountId}':
get:
description: Retrieve a sub account under the master account.
operationId: account
responses:
'201':
description: Account Created
headers:
Content-Location:
description: Location of created Account
type: string
'404':
description: User not found",
"mimeType": undefined,
},
},
],
"message": "Response object must contain a "Content-Length" header.",
"ruleId": "response-contains-header",
"severity": "error",
"suggest": [],
},
{
"location": [
{
"pointer": "#/paths/~1accounts~1{accountId}/get/responses/404/headers",
"reportOnKey": true,
"source": Source {
"absoluteRef": "",
"body": "swagger: '2.0'
schemes:
- https
basePath: /v2
paths:
'/accounts/{accountId}':
get:
description: Retrieve a sub account under the master account.
operationId: account
responses:
'201':
description: Account Created
headers:
Content-Location:
description: Location of created Account
type: string
'404':
description: User not found",
"mimeType": undefined,
},
},
],
"message": "Response object must contain a "Content-Length" header.",
"ruleId": "response-contains-header",
"severity": "error",
"suggest": [],
},
]
`);
});
it('should not report a response object containing the header nor not applicable', async () => {
const document = parseYamlToDocument(outdent`
swagger: '2.0'
schemes:
- https
basePath: /v2
paths:
'/accounts/{accountId}':
get:
description: Retrieve a sub account under the master account.
operationId: account
responses:
'201':
description: Account Created
headers:
Content-Length:
description: calls per hour allowed by the user
schema:
type: integer
format: int32
'404':
description: User not found
`);
const results = await lintDocument({
externalRefResolver: new BaseResolver(),
document,
config: await makeConfig({
rules: {
'response-contains-header': {
severity: 'error',
names: { '2xx': ['Content-Length'], '400': ['Content-Length'] },
},
},
}),
});
expect(results).toMatchInlineSnapshot(`[]`);
});
it('should not report a response object when there is no `names` section defined', async () => {
const document = parseYamlToDocument(outdent`
swagger: '2.0'
schemes:
- https
basePath: /v2
paths:
'/accounts/{accountId}':
get:
description: Retrieve a sub account under the master account.
operationId: account
responses:
'404':
description: User not found
`);
const results = await lintDocument({
externalRefResolver: new BaseResolver(),
document,
config: await makeConfig({
rules: {
'response-contains-header': {
severity: 'error',
},
},
}),
});
expect(results).toMatchInlineSnapshot(`[]`);
});
});