module MiniApivore::Validation
Public Instance Methods
action_dispatch_request_args(path, params: {}, headers: {})
click to toggle source
# File lib/mini_apivore/validation.rb, line 136 def action_dispatch_request_args(path, params: {}, headers: {}) if defined?(ActionPack) && ActionPack::VERSION::MAJOR >= 5 [path, params: params, headers: headers] else [path, params, headers] end end
apivore_build_path(path, data)
click to toggle source
# File lib/mini_apivore/validation.rb, line 92 def apivore_build_path(path, data) path.scan(/\{([^\}]*)\}/).each do |param| key = param.first dkey = data && ( data[key] || data[key.to_sym] ) if dkey path = path.gsub "{#{key}}", dkey.to_param.to_s else raise URI::InvalidURIError, "No substitution data found for {#{key}}"\ " to test the path #{path}.", caller end end path + (data['_query_string'] ? "?#{data['_query_string'].to_param}" : '') end
check_request_path()
click to toggle source
# File lib/mini_apivore/validation.rb, line 69 def check_request_path if !swagger_checker.has_path?(@path) @errors << "Swagger doc: #{swagger_checker.swagger_path} does not have"\ " a documented @path for #{@path}" elsif !swagger_checker.has_method_at_path?(@path, @verb) @errors << "Swagger doc: #{swagger_checker.swagger_path} does not have"\ " a documented @path for #{@verb} #{@path}" elsif !swagger_checker.has_response_code_for_path?(@path, @verb, @expected_response_code) @errors << "Swagger doc: #{swagger_checker.swagger_path} does not have"\ " a documented response code of #{@expected_response_code} at @path"\ " #{@verb} #{@path}. "\ "\n Available response codes: #{swagger_checker.response_codes_for_path(@path, @verb)}" elsif @verb == "get" && swagger_checker.fragment(@path, @verb, @expected_response_code).nil? @errors << "Swagger doc: #{swagger_checker.swagger_path} missing"\ " response model for get request with #{@path} for code"\ " #{@expected_response_code}" end end
check_response_is_valid()
click to toggle source
# File lib/mini_apivore/validation.rb, line 117 def check_response_is_valid swagger_errors = swagger_checker.has_matching_document_for( @path, @verb, response.status, response_body ) unless swagger_errors.empty? @errors.concat( swagger_errors.map do |e| e.sub("'#", "'#{full_path}#").gsub( /^The property|in schema.*$/,'' ) end ) end end
check_route( verb, path, expected_response_code, params = {} )
click to toggle source
# File lib/mini_apivore/validation.rb, line 21 def check_route( verb, path, expected_response_code, params = {} ) prepare_action_env( verb, path, expected_response_code, params ) assert( match?, <<FAIL ) Failed at: #{prepare_error_backtrace}\n Failure message: #{failure_message},\n fullpath: #{full_path}, \n params causing failure:#{params} FAIL end
check_status_code()
click to toggle source
# File lib/mini_apivore/validation.rb, line 110 def check_status_code if response.status != @expected_response_code @errors << "Path #{@path} did not respond with expected status code."\ " Expected #{@expected_response_code} got #{response.status}"\ end end
failure_message()
click to toggle source
# File lib/mini_apivore/validation.rb, line 108 def failure_message; @errors.join(" ") end
full_path()
click to toggle source
# File lib/mini_apivore/validation.rb, line 88 def full_path apivore_build_path(swagger_checker.base_path + @path, @params) end
has_errors?()
click to toggle source
# File lib/mini_apivore/validation.rb, line 106 def has_errors?; !@errors.empty? end
match?()
click to toggle source
# File lib/mini_apivore/validation.rb, line 38 def match? #pre_checks check_request_path # request unless has_errors? send( @verb, *action_dispatch_request_args( full_path, params: @params['_data'] || {}, headers: @params['_headers'] || {} ) ) #post_checks check_status_code check_response_is_valid unless has_errors? if has_errors? && response.body.length > 0 @errors << "\nResponse body:\n #{JSON.pretty_generate(JSON.parse(response.body))}" end swagger_checker.remove_tested_end_point_response( @path, @verb, @expected_response_code ) end !has_errors? end
prepare_action_env(verb, path, expected_response_code, params = {})
click to toggle source
# File lib/mini_apivore/validation.rb, line 11 def prepare_action_env(verb, path, expected_response_code, params = {}) @errors = [] @verb = verb.to_s @path = path.to_s @params = IndHash.new(params) @expected_response_code = expected_response_code.to_i end
prepare_error_backtrace()
click to toggle source
# File lib/mini_apivore/validation.rb, line 31 def prepare_error_backtrace # it will deliver something like this: #"/app/test/helpers/base_routes_helpers.rb:57:in `__create_card'", #"/app/test/integration/cards_api_test.rb:71:in `block (2 levels) in <class:CommentsApiTest>'", Thread.current.backtrace[2..-1].slice_after{|trc| trc[/check_route/] }.to_a.last[0..1] end
response_body()
click to toggle source
# File lib/mini_apivore/validation.rb, line 132 def response_body JSON.parse(response.body) if response.body && !response.body.empty? end
swagger_checker()
click to toggle source
# File lib/mini_apivore/validation.rb, line 19 def swagger_checker; self.class.swagger_checker end