Sha256: 8ee56acff8a593b0c885aea9baad8002f75ba11d21ca2f15d4a905b7c7e34ce8

Contents?: true

Size: 1.85 KB

Versions: 2

Compression:

Stored size: 1.85 KB

Contents

# -*- encoding : utf-8 -*-
describe Pacto do
  let(:contract_path) { contract_file 'simple_contract' }
  let(:strict_contract_path) { contract_file 'strict_contract' }

  before :all do
    WebMock.allow_net_connect!
  end

  context 'Contract investigation' do
    xit 'verifies the contract against a producer' do
      # FIXME: Does this really test what it says it does??
      contract = described_class.load_contracts(contract_path, 'http://localhost:8000')
      expect(contract.simulate_consumers.map(&:successful?).uniq).to eq([true])
    end
  end

  context 'Stubbing a collection of contracts' do
    it 'generates a server that stubs the contract for consumers' do
      contracts = described_class.load_contracts(contract_path, 'http://dummyprovider.com')
      contracts.stub_providers

      response = get_json('http://dummyprovider.com/api/hello')
      expect(response['message']).to eq 'bar'
    end
  end

  context 'Journey' do
    it 'stubs multiple services with a single use' do
      described_class.configure do |c|
        c.strict_matchers = false
        c.register_hook Pacto::Hooks::ERBHook.new
      end

      contracts = described_class.load_contracts contracts_folder, 'http://dummyprovider.com'
      contracts.stub_providers(device_id: 42)

      login_response = get_json('http://dummyprovider.com/api/hello')
      expect(login_response.keys).to eq ['message']
      expect(login_response['message']).to be_kind_of(String)

      devices_response = get_json('http://dummyprovider.com/strict')
      expect(devices_response['devices'].size).to eq(2)
      expect(devices_response['devices'][0]).to eq('/dev/42')
      expect(devices_response['devices'][1]).to eq('/dev/43')
    end
  end

  def get_json(url)
    response = Faraday.get(url) do |req|
      req.headers = { 'Accept' => 'application/json' }
    end
    MultiJson.load(response.body)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pacto-0.4.0.rc3 spec/integration/e2e_spec.rb
pacto-0.4.0.rc2 spec/integration/e2e_spec.rb