class ApiTester::ResponseEvaluator

Class for evaluating responses against what is expected

Attributes

expected_response[RW]
response_body[RW]

Public Class Methods

new(actual_body:, expected_fields:) click to toggle source
# File lib/api-tester/util/response_evaluator.rb, line 9
def initialize(actual_body:, expected_fields:)
  self.response_body = actual_body
  self.expected_response = expected_fields
end

Public Instance Methods

expected_field_array(expected_fields) click to toggle source
# File lib/api-tester/util/response_evaluator.rb, line 44
def expected_field_array(expected_fields)
  fields = {}
  expected_fields.each do |field|
    fields[field.name] = field
    fields = fields.merge inner_expected_field(expected_fields: field.fields,
                                               name: field.name)
  end
  fields
end
expected_fields() click to toggle source
# File lib/api-tester/util/response_evaluator.rb, line 18
def expected_fields
  expected_fields_hash.keys
end
expected_fields_hash() click to toggle source
# File lib/api-tester/util/response_evaluator.rb, line 32
def expected_fields_hash
  expected_field_array expected_response.body
end
extra_fields() click to toggle source
# File lib/api-tester/util/response_evaluator.rb, line 36
def extra_fields
  response_field_array - expected_fields
end
field_array(object) click to toggle source
# File lib/api-tester/util/response_evaluator.rb, line 65
def field_array(object)
  fields = []

  object.each do |key, value|
    if key.respond_to?('each')
      fields.concat(field_array(key))
    elsif value == nil || value == 0 || value == false
      fields << key.to_s
      fields.concat(field_array(value).map { |i| "#{key}.#{i}" })
    elsif value.to_s[0] == '[' && value.to_s[-1] == ']' && !value.to_s.include?('=>')
      fields << key.to_s
    elsif value
      fields << key.to_s
      fields.concat(field_array(value).map { |i| "#{key}.#{i}" })
    else
      fields.concat(field_array(key))
    end
  end
  fields
rescue NoMethodError
  fields
end
inner_expected_field(expected_fields:, name:) click to toggle source
# File lib/api-tester/util/response_evaluator.rb, line 54
def inner_expected_field(expected_fields:, name:)
  fields = {}
  expected_fields.each do |field|
    inner_name = "#{name}.#{field.name}"
    fields[inner_name] = field
    fields = fields.merge inner_expected_field(expected_fields: field.fields,
                                               name: inner_name)
  end
  fields
end
missing_fields() click to toggle source
# File lib/api-tester/util/response_evaluator.rb, line 40
def missing_fields
  expected_fields - response_field_array
end
response_field_array() click to toggle source
# File lib/api-tester/util/response_evaluator.rb, line 14
def response_field_array
  field_array response_body
end
seen_fields() click to toggle source
# File lib/api-tester/util/response_evaluator.rb, line 22
def seen_fields
  seen = []
  fields = response_field_array - extra_fields
  expected = expected_fields_hash
  fields.each do |field_key|
    seen << expected[field_key]
  end
  seen
end