Fixes response_validator to handle 3.0 responses and validate against the schema.

JSON::Validator already handles anyOf oneOf schema definitions, so those can be passed in and validation errors are returned properly
This commit is contained in:
Jay Danielian
2019-07-20 14:33:51 -04:00
parent cd348b53f8
commit 4c2097e017
6 changed files with 52 additions and 21 deletions

View File

@@ -15,7 +15,6 @@ class BlogsController < ApplicationController
# request body definition for 3.0
blog_params = params.require(:blog).permit(:title, :content, :headline, :text)
@blog = Blog.create(blog_params)
respond_with @blog
end

View File

@@ -74,7 +74,7 @@ describe 'Blogs API', type: :request, swagger_doc: 'v1/swagger.json' do
let(:flexible_blog) { { blog: { headline: 'my headline', text: 'my text' } } }
response '201', 'flexible blog created' do
schema '$ref' => '#/components/schemas/blog'
schema :oneOf => [{'$ref' => '#/components/schemas/blog'},{'$ref' => '#/components/schemas/flexible_blog'}]
run_test!
end
end
@@ -120,7 +120,7 @@ describe 'Blogs API', type: :request, swagger_doc: 'v1/swagger.json' do
end
end
path '/blogs/{id}/upload' do
let(:id) { blog.id }
let(:blog) { Blog.create(title: 'foo', content: 'bar') }

View File

@@ -54,9 +54,9 @@ RSpec.configure do |config|
id: { type: 'integer' },
title: { type: 'string' },
content: { type: 'string', nullable: true },
thumbnail: { type: 'string' }
thumbnail: { type: 'string', nullable: true }
},
required: %w[id title content thumbnail]
required: %w[id title]
},
flexible_blog: {
type: 'object',
@@ -64,9 +64,9 @@ RSpec.configure do |config|
id: { type: 'integer' },
headline: { type: 'string' },
text: { type: 'string', nullable: true },
thumbnail: { type: 'string' }
thumbnail: { type: 'string', nullable:true }
},
required: %w[id headline thumbnail]
required: %w[id headline]
}
},
securitySchemes: {

View File

@@ -243,7 +243,14 @@
"thumbnail": null
},
"schema": {
"$ref": "#/components/schemas/blog"
"oneOf": [
{
"$ref": "#/components/schemas/blog"
},
{
"$ref": "#/components/schemas/flexible_blog"
}
]
}
}
}
@@ -395,14 +402,13 @@
"nullable": true
},
"thumbnail": {
"type": "string"
"type": "string",
"nullable": true
}
},
"required": [
"id",
"title",
"content",
"thumbnail"
"title"
]
},
"flexible_blog": {
@@ -419,13 +425,13 @@
"nullable": true
},
"thumbnail": {
"type": "string"
"type": "string",
"nullable": true
}
},
"required": [
"id",
"headline",
"thumbnail"
"headline"
]
}
},