29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/openapi_ruby/adapters/minitest.rb', line 29
def assert_api_response(method, expected_status, params: {}, headers: {}, body: nil, path_params: {}, &block)
context = find_context_for(method, path_params)
raise OpenapiRuby::Error, "No api_path defined for #{method.upcase} in #{self.class}" unless context
operation = context.operations[method.to_s]
raise OpenapiRuby::Error, "No #{method.upcase} operation defined" unless operation
response_ctx = operation.responses[expected_status.to_s]
raise OpenapiRuby::Error, "No response #{expected_status} defined for #{method.upcase}" unless response_ctx
path = expand_path(context.path_template, params.merge(path_params))
request_params = body || params.reject { |k, _| path_param_names(context).include?(k.to_s) }
= .dup
if body.is_a?(Hash)
request_params = body.to_json
["Content-Type"] ||= "application/json"
end
send_args = {params: request_params}
send_args[:headers] = if .any?
send(method, path, **send_args)
if OpenapiRuby.configuration.validate_responses_in_tests
assert_equal expected_status, response.status,
"Expected status #{expected_status}, got #{response.status}"
if response_ctx.schema_definition
validator = Testing::ResponseValidator.new
body_data = parse_response_body
errors = validator.validate(
response_body: body_data,
status_code: response.status,
response_context: response_ctx
)
assert errors.empty?, "Response validation failed:\n#{errors.join("\n")}"
end
end
instance_eval(&block) if block
end
|