spec/spec_helper.rb in apipie-rails-0.5.8 vs spec/spec_helper.rb in apipie-rails-0.5.9
- old
+ new
@@ -33,66 +33,10 @@
end
end
#
-# Matcher to validate the hierarchy of fields described in an internal 'returns' object (without checking their type)
-#
-# For example, code such as:
-# returns_obj = Apipie.get_resource_description(...)._methods.returns.detect{|e| e.code=200})
-# expect(returns_obj).to match_param_structure([:pet_name, :animal_type, :pet_measurements => [:weight, :height]])
-#
-# will verify that the payload structure described for the response of return code 200 is:
-# {
-# "pet_name": <any>,
-# "animal_type": <any>,
-# "pet_measurements": {
-# "weight": <any>,
-# "height": <any>
-# }
-# }
-#
-#
-RSpec::Matchers.define :match_field_structure do |expected|
- @last_message = nil
-
- match do |actual|
- deep_match?(actual, expected)
- end
-
- def deep_match?(actual, expected, breadcrumb=[])
- num = 0
- expected.each do |pdesc|
- if pdesc.is_a? Symbol
- return false unless matching_param(actual.params_ordered, pdesc, breadcrumb)
- elsif pdesc.is_a? Hash
- param = matching_param(actual.params_ordered, pdesc.keys[0], breadcrumb)
- return false unless param
- return false unless deep_match?(param.validator, pdesc.values[0], breadcrumb + [pdesc.keys[0]])
- end
- num+=1
- end
- @fail_message = "expected property count#{breadcrumb == [] ? '' : ' of ' + (breadcrumb).join('.')} (#{actual.params_ordered.count}) to be #{num}"
- actual.params_ordered.count == num
- end
-
- def matching_param(params, expected_name, breadcrumb)
- param = params.find { |p| p.name.to_s == expected_name.to_s }
- unless param
- @fail_message = "expected [#{ params.map(&:name).join(', ') }] to include #{(breadcrumb + [expected_name]).join('.')}"
- end
- param
- end
-
- failure_message do |actual|
- @fail_message
- end
-end
-
-
-
-#
# Matcher to validate the properties (name, type and options) of a single field in the
# internal representation of a swagger schema
#
# For example, code such as:
# schema = swagger[:paths][<path>][<method>][:responses][<code>][:schema]
@@ -110,15 +54,17 @@
failure_message do |actual|
@fail_message
end
- match do |actual|
+ match do |unresolved|
+ actual = resolve_refs(unresolved)
return fail("expected schema to have type 'object' (got '#{actual[:type]}')") if (actual[:type]) != 'object'
return fail("expected schema to include param named '#{name}' (got #{actual[:properties].keys})") if (prop = actual[:properties][name]).nil?
return fail("expected param '#{name}' to have type '#{type}' (got '#{prop[:type]}')") if prop[:type] != type
return fail("expected param '#{name}' to have description '#{opts[:description]}' (got '#{prop[:description]}')") if opts[:description] && prop[:description] != opts[:description]
return fail("expected param '#{name}' to have enum '#{opts[:enum]}' (got #{prop[:enum]})") if opts[:enum] && prop[:enum] != opts[:enum]
+ return fail("expected param '#{name}' to have items '#{opts[:items]}' (got #{prop[:items]})") if opts[:items] && prop[:items] != opts[:items]
if !opts.include?(:required) || opts[:required] == true
return fail("expected param '#{name}' to be required") unless actual[:required].include?(name)
else
return fail("expected param '#{name}' to be optional") if actual[:required].include?(name)
end