Sha256: 1f7887f5cbe305038fb4694638797f219ada6a8d8977bd88b664fbcfd3d6236b

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

require_relative 'hash_methods'

def xpath_for(param)
  # TODO: look a using Savon's xpath rather than converting to Nokogiri
  result = param[:exchange].xml_doc.at_xpath(param[:xpath], Soaspec::Environment.api_handler.namespaces)
  raise 'No value at Xpath' unless result
  result
end

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

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

RSpec::Matchers.define :have_element_at_xpath do |xpath|
  match do |exchange|
    expect(xpath_for(exchange: exchange, xpath: xpath).content).not_to be_empty
  end
end

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(xpath_for(exchange: exchange, xpath: expected_hash.keys.first).content).to eq expected_hash.values.first
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
soaspec-0.0.9 lib/soaspec/matchers.rb