lib/soaspec/matchers.rb in soaspec-0.0.22 vs lib/soaspec/matchers.rb in soaspec-0.0.23

- old
+ new

@@ -2,45 +2,55 @@ require_relative 'hash_methods' require_relative 'xpath_not_found' # TODO: Mathcers are specific to SOAP. Make generic for REST and others by using actual.api_class +# Whether response has any element with the provided value RSpec::Matchers.define :contain_value do |expected| match do |actual| expect(actual.response.body.include_value?(expected)).to be true end failure_message do |actual| "expected that #{actual.response.body} would contain value #{expected}" end end +# Whether substring exists in body of response (more general than above) RSpec::Matchers.define :include_in_body do |expected| match do |actual| - expect(actual.response.to_xml.to_s.include?(expected)).to be true + expect(actual.api_class.include_in_body?(actual.response, expected)).to be true end failure_message do |actual| "expected that #{actual.response.body.to_xml} would contain value #{expected}" end end +# Whether expected element exists in body RSpec::Matchers.define :contain_key do |expected| match do |actual| expect(actual.response.body.include_key?(expected)).to be true end failure_message do |actual| "expected that #{actual.response.body} would contain key #{expected}" end end +# Whether an element exists at expected xpath RSpec::Matchers.define :have_element_at_xpath do |xpath| match do |exchange| - expect { exchange[xpath] }.to_not raise_error NoElementAtXpath + expect { exchange[xpath] }.to_not raise_error end + + failure_message do |actual| + "expected that #{actual.response.to_xml} would have element at xpath '#{xpath}'" + end end +# Whether an element at xpath (defined by key) has value (defined by value). +# @param [Hash] expected_hash Xpath => Value pair (e.g. '//xmlns:GetWeatherResult' => 'Data Not Found') RSpec::Matchers.define :have_xpath_value do |expected_hash| match do |exchange| expected_hash = Hash[*expected_hash.flatten] if expected_hash.is_a?(Array) # For some reason Array was occuring expect(exchange[expected_hash.keys.first]).to eq expected_hash.values.first end \ No newline at end of file