4 Commits
1.4.0 ... 1.4.1

Author SHA1 Message Date
domaindrivendev
f7c29267fe Merge pull request #78 from bertha-carl/fully-validate
Can we use JSON::Validator.fully_validate() to get better error messages?
2017-07-20 10:09:01 -07:00
Hannes Probst
8ede7f78f1 use fully_validate to get more specific error msg 2017-07-18 15:45:36 +02:00
domaindrivendev
8b937e3585 Merge pull request #76 from ahobson/bugfix-optional-query-params
Support optional query parameters
2017-07-13 16:35:48 -07:00
Andrew Hobson
1515ce4fcb Support optional query parameters 2017-07-11 16:28:45 -04:00
3 changed files with 24 additions and 7 deletions

View File

@@ -20,6 +20,8 @@ module Rswag
def build_query_string(example) def build_query_string(example)
query_string = parameters_in(:query) query_string = parameters_in(:query)
.select { |p| p.fetch(:required, true) ||
example.respond_to?(p[:name]) }
.map { |p| build_query_string_part(p, example.send(p[:name])) } .map { |p| build_query_string_part(p, example.send(p[:name])) }
.join('&') .join('&')

View File

@@ -40,13 +40,12 @@ module Rswag
response_schema = @api_metadata[:response][:schema] response_schema = @api_metadata[:response][:schema]
return if response_schema.nil? return if response_schema.nil?
begin validation_schema = response_schema
validation_schema = response_schema .merge('$schema' => 'http://tempuri.org/rswag/specs/extended_schema')
.merge('$schema' => 'http://tempuri.org/rswag/specs/extended_schema') .merge(@global_metadata.slice(:definitions))
.merge(@global_metadata.slice(:definitions)) error_messages = JSON::Validator.fully_validate(validation_schema, body)
JSON::Validator.validate!(validation_schema, body) if error_messages.any?
rescue JSON::Schema::ValidationError => ex raise UnexpectedResponse, "Expected response body to match schema: #{error_messages[0]}"
raise UnexpectedResponse, "Expected response body to match schema: #{ex.message}"
end end
end end
end end

View File

@@ -48,6 +48,22 @@ module Rswag
end end
end end
context "optional 'query' parameters" do
before do
api_metadata[:operation][:parameters] << { name: 'q1', in: :query, type: 'string' }
api_metadata[:operation][:parameters] << { name: 'q2', in: :query, type: 'string', required: true }
api_metadata[:operation][:parameters] << { name: 'q3', in: :query, type: 'string', required: false }
api_metadata[:operation][:parameters] << { name: 'q4', in: :query, type: 'string', required: false }
allow(example).to receive(:q1).and_return('foo')
allow(example).to receive(:q2).and_return('bar')
allow(example).to receive(:q3).and_return('baz')
end
it "appends a query string using metadata and example values" do
expect(path).to eq('/blogs/1/comments/2?q1=foo&q2=bar&q3=baz')
end
end
context "'query' parameter of type 'array'" do context "'query' parameter of type 'array'" do
before do before do
api_metadata[:operation][:parameters] << { api_metadata[:operation][:parameters] << {