62 lines
1.7 KiB
Ruby
62 lines
1.7 KiB
Ruby
module ApiResponseHelper
|
|
class ApiResponseServiceException < Exception; end
|
|
|
|
class ApiResponseService
|
|
RESPONSES_FILE_PATH = Rails.root.join("spec/fixtures/responses/responses.json")
|
|
@@responses_hash = nil
|
|
|
|
def self.response_body(object, key)
|
|
response_part(object, key, :body).to_json
|
|
end
|
|
|
|
def self.response_headers(object, key)
|
|
response_part(object, key, :headers)
|
|
end
|
|
|
|
private
|
|
|
|
def self.responses
|
|
unless @@responses_hash.present?
|
|
fd = File.open(RESPONSES_FILE_PATH, 'r')
|
|
@@responses_hash = HashWithIndifferentAccess.new(JSON.parse(fd.read))
|
|
end
|
|
@@responses_hash
|
|
end
|
|
|
|
def self.object_to_key(object)
|
|
class_name = case object.class.to_s
|
|
when "String"
|
|
object
|
|
when "Class"
|
|
object.name
|
|
else
|
|
object.class.name
|
|
end
|
|
class_name
|
|
end
|
|
|
|
def self.response_part(object, key, part = :body)
|
|
object_key = object_to_key(object)
|
|
raise ApiResponseServiceException.new("No #{object_key} in fixtures") unless responses.has_key?(object_key)
|
|
raise ApiResponseServiceException.new("No #{object_key}/#{key} in fixtures") unless responses[object_key].has_key?(key)
|
|
responses[object_key][key.to_s][part]
|
|
end
|
|
end
|
|
|
|
|
|
def api_response_fixture_body(object, key)
|
|
ApiResponseService.response_body(object.to_s, key)
|
|
end
|
|
|
|
def api_response_fixture_headers(object, key)
|
|
ApiResponseService.response_headers(object.to_s, key)
|
|
end
|
|
|
|
def api_response_fixture(object, key)
|
|
{body: api_response_fixture_body(object, key), headers: api_response_fixture_headers(object, key)}
|
|
end
|
|
end
|
|
|
|
RSpec.configure do |config|
|
|
config.include ApiResponseHelper
|
|
end |