pact_broker-client 1.18.0 → 1.19.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: '038d9dad336dd4380cecfed72c8149a0db8b6083'
4
- data.tar.gz: 534b53f01fe7d391edadc74e01513a2cb0914c9d
3
+ metadata.gz: 254d1374fb868966c77ccff58753e8d53d96f577
4
+ data.tar.gz: fe50c5757ad5e4e10efda0aa144e63e167fec078
5
5
  SHA512:
6
- metadata.gz: 7c6a3cd12937059590d1d8e775ff33bbde1d232b9870394e1bd123472c9e27d5ec840463abe9c047deff7d72b152cba9be489ca2fe8eebcc643a137f7e27a96b
7
- data.tar.gz: fdc7eaf43f5d2008e8bfa0a04301fef007bf07fa11fde3a9076ab65ab46b6a392a9948055ff1368de20a5384e2642fbac20f2037019fa67088e3ab957aca8812
6
+ metadata.gz: 9104dcc0ffcd52808781158d8ec862314063b18fbd5338ac535e8baba140030e833af899b1af00056f3822933790f9631214a01be04bfa0d48228b366b344856
7
+ data.tar.gz: c251c838c5379b259120af768652493d05184d812157b6b3d44963116016707709c2216138c21b74109038291f0c3d102ecc200f83c856e1ec995bf924f9a540
@@ -1,3 +1,23 @@
1
+ <a name="v1.19.0"></a>
2
+ ### v1.19.0 (2019-06-25)
3
+
4
+
5
+ #### Features
6
+
7
+ * **hal client**
8
+ * update from pact-ruby ([f8b3432](/../../commit/f8b3432))
9
+
10
+ * update pact with broker for scenario where version does not exist ([27b744f](/../../commit/27b744f))
11
+
12
+
13
+ #### Bug Fixes
14
+
15
+ * **create webhook**
16
+ * pass in token from command line ([9d3170e](/../../commit/9d3170e))
17
+
18
+ * correct pact merge error message ([5ebe808](/../../commit/5ebe808))
19
+
20
+
1
21
  <a name="v1.18.0"></a>
2
22
  ### v1.18.0 (2019-03-05)
3
23
 
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Pact Broker Client
2
2
 
3
- A client for the Pact Broker. Publishes pacts to, and retrieves pacts from, the pact broker. The functionality is available via a CLI, or via Ruby Rake tasks.
3
+ A client for the Pact Broker. Publishes pacts to, and retrieves pacts from, a Pact Broker. The functionality is available via a CLI, or via Ruby Rake tasks. You can also use the [Pact CLI Docker image][docker].
4
4
 
5
5
  [![Build Status](https://travis-ci.org/pact-foundation/pact_broker-client.svg?branch=master)](https://travis-ci.org/pact-foundation/pact_broker-client)
6
6
 
@@ -231,3 +231,4 @@ bundle exec rake pact:publish
231
231
 
232
232
  [wiki-tags]: https://github.com/pact-foundation/pact_broker/wiki/Using-tags
233
233
  [pact-ruby-standalone]: https://github.com/pact-foundation/pact-ruby-standalone/releases
234
+ [docker]: https://cloud.docker.com/u/pactfoundation/repository/docker/pactfoundation/pact-cli
@@ -417,14 +417,14 @@ Given **the pact for Foo version 1.2.3 has been verified by Bar version 4.5.6**,
417
417
  Pact Broker will respond with:
418
418
  ```json
419
419
  {
420
- "status": 400,
420
+ "status": 200,
421
421
  "headers": {
422
422
  "Content-Type": "application/hal+json;charset=utf-8"
423
423
  },
424
424
  "body": {
425
- "errors": [
426
- "an error message"
427
- ]
425
+ "summary": {
426
+ "reason": "an error message"
427
+ }
428
428
  }
429
429
  }
430
430
  ```
@@ -1,5 +1,13 @@
1
1
  require 'pact_broker/client/error'
2
2
 
3
+ # BUILDKITE_BRANCH BUILDKITE_COMMIT https://buildkite.com/docs/pipelines/environment-variables
4
+ # CIRCLE_BRANCH CIRCLE_SHA1 https://circleci.com/docs/2.0/env-vars/
5
+ # TRAVIS_COMMIT TRAVIS_BRANCH - TRAVIS_PULL_REQUEST_BRANCH TRAVIS_PULL_REQUEST_SHA https://docs.travis-ci.com/user/environment-variables/
6
+ # GIT_COMMIT GIT_BRANCH https://wiki.jenkins.io/display/JENKINS/Building+a+software+project
7
+ # GIT_COMMIT GIT_LOCAL_BRANCH https://hudson.eclipse.org/webtools/env-vars.html/
8
+ # APPVEYOR_REPO_COMMIT APPVEYOR_REPO_BRANCH https://www.appveyor.com/docs/environment-variables/
9
+ # bamboo.repository.git.branch https://confluence.atlassian.com/bamboo/bamboo-variables-289277087.html
10
+
3
11
  module PactBroker
4
12
  module Client
5
13
  module Git
@@ -0,0 +1,34 @@
1
+ require 'delegate'
2
+
3
+ module PactBroker
4
+ module Client
5
+ module Hal
6
+ class AuthorizationHeaderRedactor < SimpleDelegator
7
+ def puts(*args)
8
+ __getobj__().puts(*redact_args(args))
9
+ end
10
+
11
+ def print(*args)
12
+ __getobj__().puts(*redact_args(args))
13
+ end
14
+
15
+ def <<(*args)
16
+ __getobj__().send(:<<, *redact_args(args))
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :redactions
22
+
23
+ def redact_args(args)
24
+ args.collect{ | s| redact(s) }
25
+ end
26
+
27
+ def redact(string)
28
+ return string unless string.is_a?(String)
29
+ string.gsub(/Authorization: .*\\r\\n/, "Authorization: [redacted]\\r\\n")
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,15 +1,18 @@
1
1
  require 'pact_broker/client/retry'
2
+ require 'pact_broker/client/hal/authorization_header_redactor'
3
+ require 'net/http'
2
4
 
3
5
  module PactBroker
4
6
  module Client
5
7
  module Hal
6
8
  class HttpClient
7
- attr_accessor :username, :password, :verbose
9
+ attr_accessor :username, :password, :verbose, :token
8
10
 
9
11
  def initialize options
10
12
  @username = options[:username]
11
13
  @password = options[:password]
12
14
  @verbose = options[:verbose]
15
+ @token = options[:token]
13
16
  end
14
17
 
15
18
  def get href, params = {}, headers = {}
@@ -39,13 +42,14 @@ module PactBroker
39
42
 
40
43
  request.body = body if body
41
44
  request.basic_auth username, password if username
45
+ request['Authorization'] = "Bearer #{token}" if token
42
46
  request
43
47
  end
44
48
 
45
49
  def perform_request request, uri
46
- response = Retry.while_error do
50
+ response = Retry.until_truthy_or_max_times do
47
51
  http = Net::HTTP.new(uri.host, uri.port, :ENV)
48
- http.set_debug_output($stderr) if verbose
52
+ http.set_debug_output(output_stream) if verbose
49
53
  http.use_ssl = (uri.scheme == 'https')
50
54
  http.start do |http|
51
55
  http.request request
@@ -54,6 +58,10 @@ module PactBroker
54
58
  Response.new(response)
55
59
  end
56
60
 
61
+ def output_stream
62
+ AuthorizationHeaderRedactor.new($stdout)
63
+ end
64
+
57
65
  class Response < SimpleDelegator
58
66
  def body
59
67
  bod = raw_body
@@ -77,7 +85,6 @@ module PactBroker
77
85
  end
78
86
  end
79
87
  end
80
-
81
88
  end
82
89
  end
83
90
  end
@@ -42,10 +42,9 @@ module PactBroker
42
42
  private
43
43
 
44
44
  def almost_duplicate_message(original, new_interaction)
45
- "An interaction with same description (#{new_interaction[:description].inspect}) and provider state (#{new_interaction[:providerState].inspect}) but a different request or response has already been used. " +
46
- "Please use a different description or provider state, or hard-code any random data.\n" +
47
- original.to_json + "\n\n"
48
- new_interaction.to_json
45
+ "Two interactions have been found with same description (#{new_interaction[:description].inspect}) and provider state (#{new_interaction[:providerState].inspect}) but a different request or response. " +
46
+ "Please use a different description or provider state, or hard-code any random data.\n\n" +
47
+ original.to_json + "\n\n" + new_interaction.to_json
49
48
  end
50
49
 
51
50
  def same_description_and_state? original, additional
@@ -1,5 +1,5 @@
1
1
  module PactBroker
2
2
  module Client
3
- VERSION = '1.18.0'
3
+ VERSION = '1.19.0'
4
4
  end
5
5
  end
@@ -20,9 +20,7 @@ module PactBroker
20
20
  def initialize(params, pact_broker_base_url, pact_broker_client_options)
21
21
  @params = OpenStruct.new(params)
22
22
  @pact_broker_base_url = pact_broker_base_url
23
- @basic_auth_options = pact_broker_client_options[:basic_auth] || {}
24
- @verbose = pact_broker_client_options[:verbose]
25
- @http_client = PactBroker::Client::Hal::HttpClient.new(basic_auth_options.merge(verbose: verbose))
23
+ @http_client = PactBroker::Client::Hal::HttpClient.new(pact_broker_client_options.merge(pact_broker_client_options[:basic_auth] || {}))
26
24
  end
27
25
 
28
26
  def call
@@ -1 +1 @@
1
- bundle exec bin/pact-broker publish spec/pacts/pact_broker_client-pact_broker.json --consumer-app-version 1.2.3 --broker-base-url http://localhost:9292 --tag-with-git-branch
1
+ bundle exec bin/pact-broker publish spec/pacts/pact_broker_client-pact_broker.json --consumer-app-version 1.2.3 --broker-base-url http://localhost:9292 --tag-with-git-branch --broker-username localhost --broker-password localhost
@@ -0,0 +1,17 @@
1
+ require 'pact_broker/client/hal/authorization_header_redactor'
2
+
3
+ module PactBroker
4
+ module Client
5
+ module Hal
6
+ describe AuthorizationHeaderRedactor do
7
+ let(:stream) { StringIO.new }
8
+ let(:stream_redactor) { AuthorizationHeaderRedactor.new(stream) }
9
+
10
+ it "redacts the authorizaton header" do
11
+ stream_redactor << "\\r\\nAuthorization: Bearer TOKEN\\r\\n"
12
+ expect(stream.string).to eq "\\r\\nAuthorization: [redacted]\\r\\n"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -4,7 +4,7 @@ module PactBroker::Client
4
4
  module Hal
5
5
  describe HttpClient do
6
6
  before do
7
- allow(Retry).to receive(:while_error) { |&block| block.call }
7
+ allow(Retry).to receive(:until_truthy_or_max_times) { |&block| block.call }
8
8
  end
9
9
 
10
10
  subject { HttpClient.new(username: 'foo', password: 'bar') }
@@ -43,7 +43,7 @@ module PactBroker::Client
43
43
 
44
44
 
45
45
  it "retries on failure" do
46
- expect(Retry).to receive(:while_error)
46
+ expect(Retry).to receive(:until_truthy_or_max_times)
47
47
  do_get
48
48
  end
49
49
 
@@ -74,8 +74,8 @@ module PactBroker::Client
74
74
  expect(request).to have_been_made
75
75
  end
76
76
 
77
- it "calls Retry.while_error" do
78
- expect(Retry).to receive(:while_error)
77
+ it "calls Retry.until_truthy_or_max_times" do
78
+ expect(Retry).to receive(:until_truthy_or_max_times)
79
79
  do_post
80
80
  end
81
81
 
@@ -60,7 +60,7 @@ module PactBroker
60
60
  end
61
61
 
62
62
  it "raises an error" do
63
- expect { subject }.to raise_error PactMergeError
63
+ expect { subject }.to raise_error PactMergeError, /foo.*different/
64
64
  end
65
65
  end
66
66
  end
@@ -15,7 +15,7 @@ module PactBroker
15
15
  }.to_json
16
16
  end
17
17
  let!(:index_request) do
18
- stub_request(:get, "http://broker").to_return(status: 200, body: index_body, headers: { "Content-Type" => "application/hal+json" } )
18
+ stub_request(:get, "http://broker").with(headers: { "Authorization" => /.*/}).to_return(status: 200, body: index_body, headers: { "Content-Type" => "application/hal+json" } )
19
19
  end
20
20
 
21
21
  let!(:webhook_request) do
@@ -34,10 +34,16 @@ module PactBroker
34
34
  }.tap { |it| Pact::Fixture.add_fixture(:create_webhook_params, it) }
35
35
  end
36
36
 
37
- subject { Create.call(params, "http://broker", {}) }
37
+ let(:pact_broker_client_options) do
38
+ {
39
+ token: 'token',
40
+ verbose: 'verbose'
41
+ }
42
+ end
38
43
 
39
- context "when a 405 is returned from the webhook creation request" do
44
+ subject { Create.call(params, "http://broker", pact_broker_client_options) }
40
45
 
46
+ context "when a 405 is returned from the webhook creation request" do
41
47
  it "raises an error with a message to upgrade the Pact Broker" do
42
48
  expect { subject }.to raise_error PactBroker::Client::Error, /This version of the Pact Broker/
43
49
  end
@@ -345,20 +345,17 @@
345
345
  "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=9.9.9&latestby=cvpv"
346
346
  },
347
347
  "response": {
348
- "status": 400,
348
+ "status": 200,
349
349
  "headers": {
350
350
  "Content-Type": "application/hal+json;charset=utf-8"
351
351
  },
352
352
  "body": {
353
- "errors": [
354
- "an error message"
355
- ]
353
+ "summary": {
354
+ "reason": "an error message"
355
+ }
356
356
  },
357
357
  "matchingRules": {
358
- "$.body.errors": {
359
- "min": 1
360
- },
361
- "$.body.errors[*].*": {
358
+ "$.body.summary.reason": {
362
359
  "match": "type"
363
360
  }
364
361
  }
@@ -95,20 +95,20 @@ module PactBroker::Client
95
95
  query: "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=9.9.9&latestby=cvpv"
96
96
  ).
97
97
  will_respond_with(
98
- status: 400,
98
+ status: 200,
99
99
  headers: pact_broker_response_headers,
100
100
  body: {
101
- errors: Pact.each_like("an error message")
101
+ summary: {
102
+ reason: Pact.like("an error message")
103
+ }
102
104
  }
103
105
  )
104
106
  end
105
107
 
106
108
  let(:selectors) { [{ pacticipant: "Foo", version: "1.2.3" }, { pacticipant: "Bar", version: "9.9.9" }] }
107
109
 
108
- it 'raises an error' do
109
- expect {
110
- pact_broker_client.matrix.get(selectors)
111
- }.to raise_error PactBroker::Client::Error, "an error message"
110
+ it 'does not raise an error' do
111
+ pact_broker_client.matrix.get(selectors)
112
112
  end
113
113
  end
114
114
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact_broker-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.18.0
4
+ version: 1.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Beth Skurrie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-04 00:00:00.000000000 Z
11
+ date: 2019-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -207,6 +207,7 @@ files:
207
207
  - lib/pact_broker/client/error.rb
208
208
  - lib/pact_broker/client/git.rb
209
209
  - lib/pact_broker/client/hal.rb
210
+ - lib/pact_broker/client/hal/authorization_header_redactor.rb
210
211
  - lib/pact_broker/client/hal/entity.rb
211
212
  - lib/pact_broker/client/hal/entry_point.rb
212
213
  - lib/pact_broker/client/hal/http_client.rb
@@ -247,6 +248,7 @@ files:
247
248
  - spec/lib/pact_broker/client/cli/broker_publish_spec.rb
248
249
  - spec/lib/pact_broker/client/cli/custom_thor_spec.rb
249
250
  - spec/lib/pact_broker/client/cli/version_selector_options_parser_spec.rb
251
+ - spec/lib/pact_broker/client/hal/authorization_header_redactor_spec.rb
250
252
  - spec/lib/pact_broker/client/hal/entity_spec.rb
251
253
  - spec/lib/pact_broker/client/hal/http_client_spec.rb
252
254
  - spec/lib/pact_broker/client/hal/link_spec.rb
@@ -320,6 +322,7 @@ test_files:
320
322
  - spec/lib/pact_broker/client/cli/broker_publish_spec.rb
321
323
  - spec/lib/pact_broker/client/cli/custom_thor_spec.rb
322
324
  - spec/lib/pact_broker/client/cli/version_selector_options_parser_spec.rb
325
+ - spec/lib/pact_broker/client/hal/authorization_header_redactor_spec.rb
323
326
  - spec/lib/pact_broker/client/hal/entity_spec.rb
324
327
  - spec/lib/pact_broker/client/hal/http_client_spec.rb
325
328
  - spec/lib/pact_broker/client/hal/link_spec.rb