lib/airborne/request_expectations.rb in airborne-0.0.21 vs lib/airborne/request_expectations.rb in airborne-0.0.22
- old
+ new
@@ -1,130 +1,136 @@
require 'rspec'
module Airborne
- module RequestExpectations
- include RSpec
- include PathMatcher
+ module RequestExpectations
+ include RSpec
+ include PathMatcher
- def expect_json_types(*args)
- call_with_path(args) do |param, body|
- expect_json_types_impl(param, body)
- end
- end
+ def expect_json_types(*args)
+ set_response(@response) if @json_body.nil?
+ call_with_path(args) do |param, body|
+ expect_json_types_impl(param, body)
+ end
+ end
- def expect_json(*args)
- call_with_path(args) do |param, body|
- expect_json_impl(param, body)
- end
- end
+ def expect_json(*args)
+ set_response(@response) if @json_body.nil?
+ call_with_path(args) do |param, body|
+ expect_json_impl(param, body)
+ end
+ end
- def expect_json_keys(*args)
- call_with_path(args) do |param, body|
- expect(body.keys).to include(*param)
- end
- end
+ def expect_json_keys(*args)
+ set_response(@response) if @json_body.nil?
+ call_with_path(args) do |param, body|
+ expect(body.keys).to include(*param)
+ end
+ end
- def expect_status(code)
- expect(response.code).to eq(code)
- end
+ def expect_status(code)
+ set_response(@response) if @json_body.nil?
+ expect(response.code).to eq(code)
+ end
- def expect_header(key, content)
- header = headers[key]
- if header
- expect(header.downcase).to eq(content.downcase)
- else
- raise "Header #{key} not present in HTTP response"
- end
- end
+ def expect_header(key, content)
+ set_response(@response) if @json_body.nil?
+ header = headers[key]
+ if header
+ expect(header.downcase).to eq(content.downcase)
+ else
+ raise "Header #{key} not present in HTTP response"
+ end
+ end
- def expect_header_contains(key, content)
- header = headers[key]
- if header
- expect(header.downcase).to include(content.downcase)
- else
- raise "Header #{key} not present in HTTP response"
- end
- end
+ def expect_header_contains(key, content)
+ set_response(@response) if @json_body.nil?
+ header = headers[key]
+ if header
+ expect(header.downcase).to include(content.downcase)
+ else
+ raise "Header #{key} not present in HTTP response"
+ end
+ end
- def optional(hash)
- OptionalHashTypeExpectations.new(hash)
- end
+ def optional(hash)
+ OptionalHashTypeExpectations.new(hash)
+ end
- def regex(reg)
- Regexp.new(reg)
- end
+ def regex(reg)
+ Regexp.new(reg)
+ end
- private
+ private
- def call_with_path(args)
- if args.length == 2
- get_by_path(args[0], json_body) do|json_chunk|
- yield(args[1], json_chunk)
- end
- else
- yield(args[0], json_body)
- end
- end
+ def call_with_path(args)
+ if args.length == 2
+ get_by_path(args[0], json_body) do|json_chunk|
+ yield(args[1], json_chunk)
+ end
+ else
+ yield(args[0], json_body)
+ end
+ end
- def get_mapper
- base_mapper = {
- integer: [Fixnum,Bignum],
- array_of_integers: [Fixnum,Bignum],
- int: [Fixnum,Bignum],
- array_of_ints: [Fixnum,Bignum],
- float: [Float,Fixnum,Bignum],
- array_of_floats: [Float,Fixnum,Bignum],
- string: [String],
- array_of_strings: [String],
- boolean: [TrueClass, FalseClass],
- array_of_booleans: [TrueClass, FalseClass],
- bool: [TrueClass, FalseClass],
- array_of_bools: [TrueClass, FalseClass],
- object: [Hash],
- array_of_objects: [Hash],
- array: [Array],
- array_of_arrays: [Array]
- }
+ def get_mapper
+ base_mapper = {
+ integer: [Fixnum,Bignum],
+ array_of_integers: [Fixnum,Bignum],
+ int: [Fixnum,Bignum],
+ array_of_ints: [Fixnum,Bignum],
+ float: [Float,Fixnum,Bignum],
+ array_of_floats: [Float,Fixnum,Bignum],
+ string: [String],
+ array_of_strings: [String],
+ boolean: [TrueClass, FalseClass],
+ array_of_booleans: [TrueClass, FalseClass],
+ bool: [TrueClass, FalseClass],
+ array_of_bools: [TrueClass, FalseClass],
+ object: [Hash],
+ array_of_objects: [Hash],
+ array: [Array],
+ array_of_arrays: [Array]
+ }
- mapper = base_mapper.clone
- base_mapper.each do |key, value|
- mapper[(key.to_s + "_or_null").to_sym] = value + [NilClass]
- end
- mapper
- end
+ mapper = base_mapper.clone
+ base_mapper.each do |key, value|
+ mapper[(key.to_s + "_or_null").to_sym] = value + [NilClass]
+ end
+ mapper
+ end
- def expect_json_types_impl(expectations, hash)
- return if expectations.class == Airborne::OptionalHashTypeExpectations && hash.nil?
- @mapper ||= get_mapper
- expectations.each do |prop_name, expected_type|
- value = hash[prop_name]
- if expected_type.class == Hash || expected_type.class == Airborne::OptionalHashTypeExpectations
- expect_json_types_impl(expected_type, value)
- elsif expected_type.class == Proc
- expected_type.call(value)
- elsif expected_type.to_s.include?("array_of")
- expect(value.class).to eq(Array), "Expected #{prop_name} to be of type #{expected_type}, got #{value.class} instead"
- value.each do |val|
- expect(@mapper[expected_type].include?(val.class)).to eq(true), "Expected #{prop_name} to be of type #{expected_type}, got #{val.class} instead"
- end
- else
- expect(@mapper[expected_type].include?(value.class)).to eq(true), "Expected #{prop_name} to be of type #{expected_type}, got #{value.class} instead"
- end
- end
- end
+ def expect_json_types_impl(expectations, hash)
+ return if expectations.class == Airborne::OptionalHashTypeExpectations && hash.nil?
+ @mapper ||= get_mapper
+ expectations.each do |prop_name, expected_type|
+ value = hash[prop_name]
+ if expected_type.class == Hash || expected_type.class == Airborne::OptionalHashTypeExpectations
+ expect_json_types_impl(expected_type, value)
+ elsif expected_type.class == Proc
+ expected_type.call(value)
+ elsif expected_type.to_s.include?("array_of")
+ expect(value.class).to eq(Array), "Expected #{prop_name} to be of type #{expected_type}, got #{value.class} instead"
+ value.each do |val|
+ expect(@mapper[expected_type].include?(val.class)).to eq(true), "Expected #{prop_name} to be of type #{expected_type}, got #{val.class} instead"
+ end
+ else
+ expect(@mapper[expected_type].include?(value.class)).to eq(true), "Expected #{prop_name} to be of type #{expected_type}, got #{value.class} instead"
+ end
+ end
+ end
- def expect_json_impl(expectations, hash)
- expectations.each do |prop_name, expected_value|
- actual_value = hash[prop_name]
- if expected_value.class == Hash
- expect_json_impl(expected_value, actual_value)
- elsif expected_value.class == Proc
- expected_value.call(actual_value)
- elsif expected_value.class == Regexp
- expect(actual_value).to match(expected_value)
- else
- expect(actual_value).to eq(expected_value)
- end
- end
- end
- end
+ def expect_json_impl(expectations, hash)
+ expectations.each do |prop_name, expected_value|
+ actual_value = hash[prop_name]
+ if expected_value.class == Hash
+ expect_json_impl(expected_value, actual_value)
+ elsif expected_value.class == Proc
+ expected_value.call(actual_value)
+ elsif expected_value.class == Regexp
+ expect(actual_value).to match(expected_value)
+ else
+ expect(actual_value).to eq(expected_value)
+ end
+ end
+ end
+ end
end
\ No newline at end of file