Module: OpenapiRuby::Adapters::Minitest::DSL

Defined in:
lib/openapi_ruby/adapters/minitest.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



9
10
11
12
13
# File 'lib/openapi_ruby/adapters/minitest.rb', line 9

def self.included(base)
  base.extend ClassMethods
  base.class_attribute :_openapi_contexts, default: []
  base.class_attribute :_openapi_schema_name, default: nil
end

Instance Method Details

#assert_api_response(method, expected_status, params: {}, headers: {}, body: nil, path_params: {}, &block) ⇒ Object

Raises:



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

  # Build the request path
  path = expand_path(context.path_template, params.merge(path_params))

  # Execute the request
  request_params = body || params.reject { |k, _| path_param_names(context).include?(k.to_s) }
  request_headers = headers.dup

  if body.is_a?(Hash)
    request_params = body.to_json
    request_headers["Content-Type"] ||= "application/json"
  end

  send_args = {params: request_params}
  send_args[:headers] = request_headers if request_headers.any?

  send(method, path, **send_args)

  # Validate response
  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

  # Execute additional assertions
  instance_eval(&block) if block
end

#parsed_bodyObject



77
78
79
# File 'lib/openapi_ruby/adapters/minitest.rb', line 77

def parsed_body
  parse_response_body
end