Skip to content

Commit

Permalink
feat(generators): More test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
slt authored and YOU54F committed Aug 14, 2024
1 parent 89fe1c4 commit 78a42d7
Show file tree
Hide file tree
Showing 8 changed files with 83 additions and 75 deletions.
2 changes: 1 addition & 1 deletion lib/pact/provider_verifier/set_up_provider_state.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,11 @@ def post_to_provider_state
# https://github.com/pact-foundation/pact-go/issues/42
# eg. https://ci.appveyor.com/project/mefellows/pact-go/build/25#L1202


faraday.request :retry, max: 2, interval: 0.05,
interval_randomness: 0.5, backoff_factor: 2,
methods:[:post],
exceptions: [Faraday::ConnectionFailed]

faraday.response :logger if verbose
faraday.adapter Faraday.default_adapter
end
Expand Down
23 changes: 23 additions & 0 deletions spec/integration_with_provider_state_in_headers_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
require 'json'

describe "pact-provider-verifier with a provider state injected to a pact file" do
before(:all) do
@pipe = IO.popen("bundle exec rackup -p 5837 spec/support/provider_with_state_generator.rb")
sleep 2
end

subject { `bundle exec bin/pact-provider-verifier spec/support/pacts/pact-with-provider-state-in-headers.json -a 1 --provider-base-url http://localhost:5837/ --provider-states-setup-url http://localhost:5837/provider_state -v` }

it "exits with a 0 exit code" do
subject
expect($?).to eq 0
end

it "the output contains a success message" do
expect(subject).to include "1 interaction, 0 failures"
end

after(:all) do
Process.kill 'KILL', @pipe.pid
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
sleep 2
end

subject { `bundle exec bin/pact-provider-verifier spec/support/pacts/pact-with-provider-state.json -a 1 --provider-base-url http://localhost:5837/ --provider-states-setup-url http://localhost:5837/provider_state -v` }
subject { `bundle exec bin/pact-provider-verifier spec/support/pacts/pact-with-provider-state-in-path.json -a 1 --provider-base-url http://localhost:5837/ --provider-states-setup-url http://localhost:5837/provider_state -v` }

it "exits with a 0 exit code" do
subject
Expand Down

This file was deleted.

4 changes: 2 additions & 2 deletions spec/lib/pact/provider_verifier/set_up_provider_state_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ module ProviderVerifier

before do
ENV['PROVIDER_STATES_SETUP_URL'] = provider_states_setup_url
stub_request(:post, provider_states_setup_url)
stub_request(:post, provider_states_setup_url).to_return(status: 200, body: '{"id":2}')
allow($stdout).to receive(:puts)
allow($stderr).to receive(:puts)
end

it "makes a HTTP request to the configured URL with a JSON body containing the consumer and provider state names" do
subject
expect(subject).to eq({"id" => 2})
expect(WebMock).to have_requested(:post, provider_states_setup_url).
with(body: {consumer: consumer, state: provider_state, states: [provider_state], params: params}, headers: {'Content-Type' => "application/json"})
end
Expand Down
44 changes: 44 additions & 0 deletions spec/support/pacts/pact-with-provider-state-in-headers.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"provider": {
"name": "Foo"
},
"consumer": {
"name": "Bar"
},
"interactions": [
{
"description": "requires access token",
"request": {
"method": "GET",
"path": "/requires_auth",
"headers": {
"Authorization": "Bearer EXAMPLE_TOKEN"
},
"generators": {
"header": {
"$.Authorization": {
"expression": "Bearer ${accessToken}",
"type": "ProviderState"
}
}
}
},
"response": {
"status": 200
},
"providerStates": [
{
"name": "returns access token"
}
]
}
],
"metadata": {
"pactSpecification": {
"version": "3.0.0"
},
"pact-jvm": {
"version": "4.0.5"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,4 @@
"version": "4.0.5"
}
}
}
}
14 changes: 11 additions & 3 deletions spec/support/provider_with_state_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,23 @@

class ProviderWithStateGenerator < Sinatra::Base
post '/provider_state' do
json :id => 2
json :id => 2, :accessToken => 'INJECTED_TOKEN'
end

get '/book/1' do
json :id => 1, :name => 'Unexpected Book'
# Return 404 so that if the provider state is not injected the contract will fail
status 404
json :id => 1, :name => 'Book not found'
end

get '/book/2' do
json :id => 2, :name => 'Injected Book'
end


get '/requires_auth' do
if request.env['HTTP_AUTHORIZATION'] != "Bearer INJECTED_TOKEN"
status 403
end
end

end

0 comments on commit 78a42d7

Please sign in to comment.