Sha256: 905fc1658b67a265bfecaa14f1ba99d4d769a5a889efbcc9d24823e823a47566
Contents?: true
Size: 1.27 KB
Versions: 1
Compression:
Stored size: 1.27 KB
Contents
require 'active_support/core_ext/hash/slice' require 'json-schema' require 'rswag/specs/extended_schema' module Rswag module Specs class ResponseValidator def initialize(api_metadata, global_metadata) @api_metadata = api_metadata @global_metadata = global_metadata end def validate!(response) validate_code!(response.code) validate_body!(response.body) end private def validate_code!(code) if code.to_s != @api_metadata[:response][:code].to_s raise UnexpectedResponse, "Expected response code '#{code}' to match '#{@api_metadata[:response][:code]}'" end end def validate_body!(body) response_schema = @api_metadata[:response][:schema] return if response_schema.nil? begin validation_schema = response_schema .merge('$schema' => 'http://tempuri.org/rswag/specs/extended_schema') .merge(@global_metadata.slice(:definitions)) JSON::Validator.validate!(validation_schema, body) rescue JSON::Schema::ValidationError => ex raise UnexpectedResponse, "Expected response body to match schema: #{ex.message}" end end end class UnexpectedResponse < StandardError; end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rswag-specs-1.0.3 | lib/rswag/specs/response_validator.rb |