pact-provider-verifier 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 841f89c7d8e4630a4e451fe78a7aa565e040bfd9
4
- data.tar.gz: 5185190d6bb9316ea3187bd804f883f5efec301c
3
+ metadata.gz: 8b43ff3b5b20e388373c13ea48743bdd78a24e6d
4
+ data.tar.gz: 73378cfd5da336900a6bc5b4ccf231287eef90e8
5
5
  SHA512:
6
- metadata.gz: 4270937089f9520069c711ca967b0a5dc2d9c936748db259da8af1edc2d8ccc5fb43c24a9833ad6e1d08f97fe694b869d18bcf32fcf6cd6aa4751b3df614fdbf
7
- data.tar.gz: 2fd9ed5470c4fd58325d962232eb2b3e24c6a27e42ddcb69809a31da72712bd3311b6f99c806dd206bcf8ba828b9aad1187115fdfc811207d19031fb5f6af7c6
6
+ metadata.gz: 2200801d7a18443487d7954d6eb68df0a74751332377ffdbd046638e3358ec66270144eafff2cd7499c9b347380f7494711d43ffe17cba094c672d1ca5969333
7
+ data.tar.gz: 0e5995e8176546921343631e1d5b7dcec3f18236d279073038941432bb26269b04eecbda45ed1411ffd055d7ad737ecc63665286dff2889eb45aeb125ceb172e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ <a name="1.3.0-1"></a>
2
+ # v1.3.0 (2017-08-08)
3
+
4
+ #### Features
5
+
6
+ * **custom provider header**
7
+ * Allow a --custom-provider-header to be specified ([e3ea6fa](/../../commit/e3ea6fa))
8
+
1
9
  <a name="1.2.0"></a>
2
10
  # 1.2.0 (2017-08-05)
3
11
 
@@ -0,0 +1,33 @@
1
+ module Pact
2
+ module ProviderVerifier
3
+ class AddHeaderMiddlware
4
+
5
+ def initialize app, headers
6
+ @app = app
7
+ @headers = headers
8
+ end
9
+
10
+ def call env
11
+ @app.call(add_headers(env))
12
+ end
13
+
14
+ def add_headers env
15
+ new_env = env.dup
16
+ @headers.each_pair do | key, value |
17
+ header_name = "HTTP_#{key.upcase.gsub("-", "_")}"
18
+ warn_about_header_replacement key, new_env[header_name], value
19
+ new_env[header_name] = value
20
+ end
21
+ new_env
22
+ end
23
+
24
+ def warn_about_header_replacement header_name, existing_value, new_value
25
+ if existing_value.nil?
26
+ $stderr.puts "WARN: Adding header '#{header_name}: #{new_value}' to replayed request. This header did not exist in the pact, and hence this test cannot confirm that the request will work in real life."
27
+ else
28
+ $stdout.puts "INFO: Replacing header '#{header_name}: #{existing_value}' with '#{header_name}: #{new_value}'"
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -6,6 +6,7 @@ require 'pact/cli/run_pact_verification'
6
6
  require 'net/https'
7
7
  require 'faraday_middleware'
8
8
  require 'json'
9
+ require 'pact/provider_verifier/add_header_middlware'
9
10
 
10
11
  module Pact
11
12
  module ProviderVerifier
@@ -33,16 +34,23 @@ module Pact
33
34
  proxy_pact_helper = File.expand_path(File.join(File.dirname(__FILE__), "pact_helper.rb"))
34
35
  ENV['PROVIDER_STATES_SETUP_URL'] = @options.provider_states_setup_url
35
36
  ENV['VERBOSE_LOGGING'] = @options.verbose if @options.verbose
37
+ ENV['CUSTOM_PROVIDER_HEADER'] = @options.custom_provider_header if @options.custom_provider_header
36
38
  provider_base_url = @options.provider_base_url
37
39
 
38
40
  provider_application_version = @options.provider_app_version
39
41
  publish_results = @options.publish_verification_results
40
42
 
43
+ rack_reverse_proxy = Rack::ReverseProxy.new do
44
+ reverse_proxy '/', provider_base_url
45
+ end
46
+
47
+ if @options.custom_provider_header
48
+ rack_reverse_proxy = Pact::ProviderVerifier::AddHeaderMiddlware.new(rack_reverse_proxy, parse_header)
49
+ end
50
+
41
51
  Pact.service_provider "Running Provider Application" do
42
52
  app do
43
- Rack::ReverseProxy.new do
44
- reverse_proxy '/', provider_base_url
45
- end
53
+ rack_reverse_proxy
46
54
  end
47
55
 
48
56
  if provider_application_version
@@ -74,6 +82,11 @@ module Pact
74
82
  exit exit_statuses.count{ | status | status != 0 }
75
83
  end
76
84
 
85
+ def parse_header
86
+ header_name, header_value = @options.custom_provider_header.split(":", 2).collect(&:strip)
87
+ {header_name => header_value}
88
+ end
89
+
77
90
  def print_deprecation_note
78
91
  if @options.provider_states_url
79
92
  $stderr.puts "The --provider-states-url option is deprecated and the URL endpoint can be removed from the application"
@@ -14,6 +14,7 @@ module Pact
14
14
  method_option :broker_username, aliases: "-n", desc: "Pact Broker username", :required => false
15
15
  method_option :broker_password, aliases: "-p", desc: "Pact Broker password", :required => false
16
16
  method_option :verbose, aliases: "-v", desc: "Verbose output", :required => false
17
+ method_option :custom_provider_header, desc: "Header to add to provider state set up and pact requests. eg 'Authorization: Basic cGFjdDpwYWN0'", :required => false
17
18
  method_option :provider_states_url, aliases: "-s", desc: "DEPRECATED", :required => false
18
19
 
19
20
  def verify
@@ -36,6 +36,7 @@ module Pact
36
36
  connection = Faraday.new(:url => provider_states_setup_url)
37
37
  connection.post do |req|
38
38
  req.headers["Content-Type"] = "application/json"
39
+ add_custom_provider_header req
39
40
  req.body = {consumer: consumer, state: provider_state, states: [provider_state] }.to_json
40
41
  end
41
42
  end
@@ -48,6 +49,24 @@ module Pact
48
49
  ENV['VERBOSE_LOGGING']
49
50
  end
50
51
 
52
+ def provider_header_set?
53
+ ENV.fetch('CUSTOM_PROVIDER_HEADER', '') != ''
54
+ end
55
+
56
+ def provider_header_name
57
+ ENV['CUSTOM_PROVIDER_HEADER'].split(":", 2)[0]
58
+ end
59
+
60
+ def provider_header_value
61
+ ENV['CUSTOM_PROVIDER_HEADER'].split(":", 2)[1]
62
+ end
63
+
64
+ def add_custom_provider_header request
65
+ if provider_header_set?
66
+ request[provider_header_name] = provider_header_value
67
+ end
68
+ end
69
+
51
70
  def check_for_error response
52
71
  if response.status >= 300
53
72
  raise SetUpProviderStateError.new("Error setting up provider state '#{provider_state}' for consumer '#{consumer}' at #{provider_states_setup_url}. response status=#{response.status} response body=#{response.body}")
@@ -1,5 +1,5 @@
1
1
  module Pact
2
2
  module ProviderVerifier
3
- VERSION = "1.2.0"
3
+ VERSION = "1.3.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact-provider-verifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Fellows
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-05 00:00:00.000000000 Z
11
+ date: 2017-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -190,6 +190,20 @@ dependencies:
190
190
  - - "~>"
191
191
  - !ruby/object:Gem::Version
192
192
  version: '3.0'
193
+ - !ruby/object:Gem::Dependency
194
+ name: conventional-changelog
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: '1.2'
200
+ type: :development
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - "~>"
205
+ - !ruby/object:Gem::Version
206
+ version: '1.2'
193
207
  description: |-
194
208
  A cross-platform Pact verification tool to validate API Providers.
195
209
  Used in the pact-js-provider project to simplify development
@@ -206,6 +220,7 @@ files:
206
220
  - README.md
207
221
  - bin/pact-provider-verifier
208
222
  - lib/pact/provider_verifier.rb
223
+ - lib/pact/provider_verifier/add_header_middlware.rb
209
224
  - lib/pact/provider_verifier/app.rb
210
225
  - lib/pact/provider_verifier/cli.rb
211
226
  - lib/pact/provider_verifier/pact_helper.rb