Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(validator): Spurious errors when using application/merge-patch+json media type #198

Merged
merged 4 commits into from
Sep 22, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ module.exports.validate = function({ resolvedSpec, jsSpec }, config) {
// request body has content
const firstMimeType = requestBodyMimeTypes[0]; // code generation uses the first mime type
const oneContentType = requestBodyMimeTypes.length === 1;
const isJson = firstMimeType === 'application/json';
const isJson =
firstMimeType === 'application/json' ||
firstMimeType.endsWith('+json');

const hasArraySchema =
requestBodyContent[firstMimeType].schema &&
Expand Down
29 changes: 28 additions & 1 deletion test/plugins/validation/oas3/operations.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ describe('validation plugin - semantic - operations - oas3', function() {
expect(res.errors.length).toEqual(0);
});

it('should not warn about an operation with a non-array json request body that does not set a name', function() {
it('should not warn about an operation with a non-array application/json request body that does not set a name', function() {
const spec = {
paths: {
'/pets': {
Expand All @@ -90,6 +90,33 @@ describe('validation plugin - semantic - operations - oas3', function() {
expect(res.errors.length).toEqual(0);
});

it('should not warn about an operation with a non-array `+json` request body that does not set a name', function() {
const spec = {
paths: {
'/pets': {
post: {
summary: 'this is a summary',
operationId: 'operationId',
requestBody: {
description: 'body for request',
content: {
'application/merge-patch+json': {
schema: {
type: 'string'
}
}
}
}
}
}
}
};

const res = validate({ resolvedSpec: spec, jsSpec: spec }, config);
expect(res.warnings.length).toEqual(0);
expect(res.errors.length).toEqual(0);
});

it('should not warn about an operation with a non-form request body that sets a name', function() {
const spec = {
paths: {
Expand Down