pact_broker-client 1.11.0 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9e145049914705be5d6fbf40b0c558fa03b1f721
4
- data.tar.gz: 1af03d94ccc879a70f04297a8d2e3fe41878c446
3
+ metadata.gz: 66e0409305fdcec099daca823e1cb127ef56081d
4
+ data.tar.gz: 810b2cd5e4f581e229104fb30cf9fddaf1387aa6
5
5
  SHA512:
6
- metadata.gz: cf7f69734f2cc5195ab2b9ad04647ef10a8d841488132fc327db0bc363076dee6ed6b2e97a7a78930e59f72fc270c62a4588387692a5b84ab6625f54b9871db4
7
- data.tar.gz: 96760c522ae3663b570d53537bb0af321bd9d24cf74c945cb7a7cc96118b076e44434e09ff175b5fffef45c1f9a58896ea69a468ac5330778c6c7b98d0310015
6
+ metadata.gz: c5d6208dedba22ebcbd587bf593d3ca626c54d60d3f3e0a5b3fc23c2d02b6d282e416ae024fdbad77ab1a0915602f3d715fb6ad04b59bcd17c579a249be47de2
7
+ data.tar.gz: 4b37910c9a784962d4f9e054d0308e13227f7a267e60c8e64f8803faf6a71cb7a1d215a4eb7b35300fef35f6437dcd229bc991af636e6e7cb1de2a89051b5639
@@ -1,3 +1,17 @@
1
+ <a name="v1.12.0"></a>
2
+ ### v1.12.0 (2017-11-06)
3
+
4
+
5
+ #### Features
6
+
7
+ * **publish**
8
+ * expose tag_with_git_branch in rake publication task ([f28d9ad](/../../commit/f28d9ad))
9
+
10
+ * **can-i-deploy**
11
+ * shorten header names in text output ([89d5a04](/../../commit/89d5a04))
12
+ * support invocation with only one pacticipant/version provided ([3d799cc](/../../commit/3d799cc))
13
+
14
+
1
15
  <a name="v1.11.0"></a>
2
16
  ### v1.11.0 (2017-11-01)
3
17
 
data/README.md CHANGED
@@ -1,12 +1,106 @@
1
1
  # Pact Broker Client
2
2
 
3
- A client for the Pact Broker. Publishes pacts to, and retrieves pacts from, the pact broker.
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 configuration code.
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
 
7
- ## Usage
7
+ ## Usage - CLI
8
8
 
9
- You will need an instance of a [Pact Broker](https://github.com/pact-foundation/pact_broker). It's URL will be used below in the configuration for the Consumer and the Provider. eg. http://pact-broker.my.org
9
+ ### publish
10
+
11
+ ```
12
+ Usage:
13
+ pact-broker publish PACT_DIRS_OR_FILES ... -a, --consumer-app-version=CONSUMER_APP_VERSION -b, --broker-base-url=BROKER_BASE_URL
14
+
15
+ Options:
16
+ -a, --consumer-app-version=CONSUMER_APP_VERSION # The consumer application version
17
+ -b, --broker-base-url=BROKER_BASE_URL # The base URL of the Pact Broker
18
+ -u, [--broker-username=BROKER_USERNAME] # Pact Broker basic auth username
19
+ -p, [--broker-password=BROKER_PASSWORD] # Pact Broker basic auth password
20
+ -t, [--tag=TAG] # Tag name for consumer version. Can be specified multiple times.
21
+ -g, [--tag-with-git-branch], [--no-tag-with-git-branch] # Tag consumer version with the name of the current git branch. Default: false
22
+ -v, [--verbose], [--no-verbose] # Verbose output. Default: false
23
+
24
+ Publish pacts to a Pact Broker.
25
+ ```
26
+
27
+ ### create-version-tag
28
+
29
+ ```
30
+ Usage:
31
+ pact-broker create-version-tag -a, --pacticipant=PACTICIPANT -b, --broker-base-url=BROKER_BASE_URL -e, --version=VERSION
32
+
33
+ Options:
34
+ -a, --pacticipant=PACTICIPANT # The pacticipant name
35
+ -e, --version=VERSION # The pacticipant version
36
+ -t, [--tag=TAG] # Tag name for pacticipant version. Can be specified multiple times.
37
+ -g, [--tag-with-git-branch], [--no-tag-with-git-branch] # Tag pacticipant version with the name of the current git branch. Default: false
38
+ -b, --broker-base-url=BROKER_BASE_URL # The base URL of the Pact Broker
39
+ -u, [--broker-username=BROKER_USERNAME] # Pact Broker basic auth username
40
+ -p, [--broker-password=BROKER_PASSWORD] # Pact Broker basic auth password
41
+ -v, [--verbose], [--no-verbose] # Verbose output. Default: false
42
+
43
+ Add a tag to a pacticipant version
44
+ ```
45
+
46
+ ### can-i-deploy
47
+
48
+ *This feature is in beta release, and backwards compatibility is NOT guaranteed.*
49
+ You will need the latest version of the Pact Broker for this feature to work.
50
+
51
+ ```
52
+ Usage:
53
+ pact-broker can-i-deploy -a, --pacticipant=PACTICIPANT -b, --broker-base-url=BROKER_BASE_URL
54
+
55
+ Options:
56
+ -a, --pacticipant=PACTICIPANT # The pacticipant name. Use once for each pacticipant being checked.
57
+ -e, [--version=VERSION] # The pacticipant version. Must be entered after the --pacticipant that it relates to.
58
+ -l, [--latest=[TAG]] # Use the latest pacticipant version. Optionally specify a TAG to use the latest version with the specified tag.
59
+ -b, --broker-base-url=BROKER_BASE_URL # The base URL of the Pact Broker
60
+ -u, [--broker-username=BROKER_USERNAME] # Pact Broker basic auth username
61
+ -p, [--broker-password=BROKER_PASSWORD] # Pact Broker basic auth password
62
+ -o, [--output=OUTPUT] # json or table
63
+ # Default: table
64
+ -v, [--verbose], [--no-verbose] # Verbose output. Default: false
65
+
66
+ Description:
67
+ Returns exit code 0 or 1, indicating whether or not the specified pacticipant versions are compatible. Prints out the
68
+ relevant pact/verification details.
69
+
70
+ The environment variables PACT_BROKER_BASE_URL, PACT_BROKER_USERNAME and PACT_BROKER_PASSWORD may be used instead of
71
+ their respective command line options.
72
+
73
+ SCENARIOS
74
+
75
+ Check the status of the pacts for a pacticipant version:
76
+
77
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT --version VERSION --broker-base-url BROKER_BASE_URL
78
+
79
+ Check the status of the pacts for the latest pacticipant version:
80
+
81
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT --latest --broker-base-url BROKER_BASE_URL
82
+
83
+ Check the status of the pacts for the latest pacticipant version for a given tag:
84
+
85
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT --latest TAG --broker-base-url BROKER_BASE_URL
86
+
87
+ Check the status of the pacts between two (or more) specific pacticipant versions:
88
+
89
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT1 --version VERSION1 --pacticipant PACTICIPANT2 --version VERSION2
90
+ --broker-base-url BROKER_BASE_URL
91
+
92
+ Check the status of the pacts between the latest versions of two (or more) pacticipants:
93
+
94
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT1 --latest --pacticipant PACTICIPANT2 --latest --broker-base-url
95
+ BROKER
96
+
97
+ Check the status of the pacts between the latest versions of two (or more) pacticipants with a given tag:
98
+
99
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT1 --latest TAG1 --pacticipant PACTICIPANT2 --latest TAG2
100
+ --broker-base-url BROKER_BASE_URL
101
+ ```
102
+
103
+ ## Usage - Ruby
10
104
 
11
105
  ### Consumer
12
106
 
@@ -25,23 +119,14 @@ PactBroker::Client::PublicationTask.new do | task |
25
119
  require 'my_consumer/version'
26
120
  task.consumer_version = MyConsumer::VERSION
27
121
  task.pattern = 'custom/path/to/pacts/*.json' # optional, default value is 'spec/pacts/*.json'
28
- task.pact_broker_base_url = "http://pact-broker.my.org"
122
+ task.pact_broker_base_url = "http://pact-broker"
123
+ task.tag_with_git_branch = true|false # STRONGLY RECOMMENDED as it will greatly assist with your pact workflow. Optional, will merge result with other specified task.tags
29
124
  task.tags = ["dev"] # optional
30
125
  task.pact_broker_basic_auth = { username: 'basic_auth_user', password: 'basic_auth_pass'} # optional
31
126
  task.write_method = :merge # optional, this will merge the published pact into an existing pact rather than overwriting it if one exists. Not recommended, as it makes a mulch of the workflow on the broker.
32
127
  end
33
128
  ```
34
129
 
35
- ## Using tags
36
-
37
- Tags enable you to test different versions of your consumer and provider against each other (eg. `head` and `prod`) and to use pacts on feature branches without breaking your main line of development. You can read more about using tags on the Pact broker [wiki][wiki-tags].
38
-
39
- If you want to use the git branch name as the tag name, use:
40
-
41
- ```ruby
42
- task.tag = `git rev-parse --abbrev-ref HEAD`.strip
43
- ```
44
-
45
130
  ```bash
46
131
  # In CI script
47
132
 
@@ -64,4 +149,6 @@ Pact.service_provider "My Provider" do
64
149
  end
65
150
  ```
66
151
 
152
+
153
+
67
154
  [wiki-tags]: https://github.com/pact-foundation/pact_broker/wiki/Using-tags
@@ -15,7 +15,8 @@ module PactBroker
15
15
  class PactPublicationError < ::Thor::Error; end
16
16
 
17
17
  class Broker < CustomThor
18
- desc 'can-i-deploy', "Returns exit code 0 or 1, indicating whether or not the specified application versions are compatible."
18
+ desc 'can-i-deploy', ''
19
+ long_desc File.read(File.join(File.dirname(__FILE__), 'can_i_deploy_long_desc.txt'))
19
20
 
20
21
  method_option :pacticipant, required: true, aliases: "-a", desc: "The pacticipant name. Use once for each pacticipant being checked."
21
22
  method_option :version, required: false, aliases: "-e", desc: "The pacticipant version. Must be entered after the --pacticipant that it relates to."
@@ -0,0 +1,31 @@
1
+ Returns exit code 0 or 1, indicating whether or not the specified pacticipant versions are compatible. Prints out the relevant pact/verification details.
2
+
3
+ WARNING! This feature is in beta release, and backwards compatibility is NOT guaranteed. You will need the latest version of the Pact Broker for this feature to work.
4
+
5
+ The environment variables PACT_BROKER_BASE_URL_BASE_URL, PACT_BROKER_BASE_URL_USERNAME and PACT_BROKER_BASE_URL_PASSWORD may be used instead of their respective command line options.
6
+
7
+ SCENARIOS
8
+
9
+ Check the status of the pacts for a pacticipant version:
10
+
11
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT --version VERSION --broker-base-url BROKER_BASE_URL
12
+
13
+ Check the status of the pacts for the latest pacticipant version:
14
+
15
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT --latest --broker-base-url BROKER_BASE_URL
16
+
17
+ Check the status of the pacts for the latest pacticipant version for a given tag:
18
+
19
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT --latest TAG --broker-base-url BROKER_BASE_URL
20
+
21
+ Check the status of the pacts between two (or more) specific pacticipant versions:
22
+
23
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT1 --version VERSION1 --pacticipant PACTICIPANT2 --version VERSION2 --broker-base-url BROKER_BASE_URL
24
+
25
+ Check the status of the pacts between the latest versions of two (or more) pacticipants:
26
+
27
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT1 --latest --pacticipant PACTICIPANT2 --latest --broker-base-url BROKER_BASE_URL
28
+
29
+ Check the status of the pacts between the latest versions of two (or more) pacticipants with a given tag:
30
+
31
+ $ pact-broker can-i-deploy --pacticipant PACTICIPANT1 --latest TAG1 --pacticipant PACTICIPANT2 --latest TAG2 --broker-base-url BROKER_BASE_URL
@@ -4,8 +4,10 @@ module PactBroker
4
4
  module Client
5
5
  class Matrix < BaseClient
6
6
  def get selectors, options = {}
7
+ latestby = selectors.size == 1 ? 'cvp' : 'cvpv'
7
8
  query = {
8
- q: convert_selector_hashes_to_params(selectors)
9
+ q: convert_selector_hashes_to_params(selectors),
10
+ latestby: latestby
9
11
  }.merge(query_options(options))
10
12
  response = self.class.get("/matrix", query: query, headers: default_get_headers)
11
13
  $stdout.puts("DEBUG: Response headers #{response.headers}") if verbose?
@@ -7,6 +7,14 @@ module PactBroker
7
7
 
8
8
  Line = Struct.new(:consumer, :consumer_version, :provider, :provider_version, :success)
9
9
 
10
+ OPTIONS = [
11
+ { consumer: {} },
12
+ { consumer_version: {display_name: 'C.VERSION'} },
13
+ { provider: {} },
14
+ { provider_version: {display_name: 'P.VERSION'} },
15
+ { success: {display_name: 'SUCCESS?'} }
16
+ ]
17
+
10
18
  def self.call(matrix)
11
19
  data = matrix[:matrix].collect do | line |
12
20
  Line.new(
@@ -18,7 +26,7 @@ module PactBroker
18
26
  )
19
27
  end
20
28
 
21
- printer = TablePrint::Printer.new(data)
29
+ printer = TablePrint::Printer.new(data, OPTIONS)
22
30
  printer.table_print
23
31
  end
24
32
 
@@ -1,4 +1,5 @@
1
1
  require 'rake/tasklib'
2
+ require 'pact_broker/client/git'
2
3
 
3
4
  =begin
4
5
  require pact_broker/client/tasks
@@ -7,7 +8,8 @@ PactBroker::Client::PublicationTask.new do | task |
7
8
  require 'consumer/version'
8
9
  task.pact_broker_base_url = 'http://pact-broker'
9
10
  task.consumer_version = Consumer::VERSION
10
- task.tag = "dev"
11
+ task.tags = ["dev"]
12
+ task.tag_with_git_branch = true
11
13
  end
12
14
 
13
15
  =end
@@ -16,7 +18,8 @@ module PactBroker
16
18
  module Client
17
19
  class PublicationTask < ::Rake::TaskLib
18
20
 
19
- attr_accessor :pattern, :pact_broker_base_url, :consumer_version, :tag, :write_method, :pact_broker_basic_auth
21
+ attr_accessor :pattern, :pact_broker_base_url, :consumer_version, :tag, :write_method, :tag_with_git_branch, :pact_broker_basic_auth
22
+ alias_method :tags=, :tag=
20
23
  alias_method :tags, :tag
21
24
 
22
25
  def initialize name = nil, &block
@@ -36,7 +39,7 @@ module PactBroker
36
39
  require 'pact_broker/client/publish_pacts'
37
40
  basic_auth_client_options = pact_broker_basic_auth ? {basic_auth: pact_broker_basic_auth} : {}
38
41
  pact_broker_client_options = basic_auth_client_options.merge(write_method ? {write: write_method} : {})
39
- success = PactBroker::Client::PublishPacts.new(pact_broker_base_url, FileList[pattern], consumer_version, [*tags], pact_broker_client_options).call
42
+ success = PactBroker::Client::PublishPacts.new(pact_broker_base_url, FileList[pattern], consumer_version, all_tags, pact_broker_client_options).call
40
43
  raise "One or more pacts failed to be published" unless success
41
44
  end
42
45
  end
@@ -46,6 +49,11 @@ module PactBroker
46
49
  @name ? "publish:#{@name}" : "publish"
47
50
  end
48
51
 
52
+ def all_tags
53
+ t = [*tags]
54
+ t << PactBroker::Client::Git.branch if tag_with_git_branch
55
+ t.compact.uniq
56
+ end
49
57
  end
50
58
  end
51
59
  end
@@ -1,5 +1,5 @@
1
1
  module PactBroker
2
2
  module Client
3
- VERSION = '1.11.0'
3
+ VERSION = '1.12.0'
4
4
  end
5
5
  end
@@ -0,0 +1,20 @@
1
+ echo '### publish'
2
+ echo ''
3
+ echo '```'
4
+ echo "$(bundle exec bin/pact-broker help publish)"
5
+ echo '```'
6
+ echo ''
7
+ echo '### create-version-tag'
8
+ echo ''
9
+ echo '```'
10
+ echo "$(bundle exec bin/pact-broker help create-version-tag)"
11
+ echo '```'
12
+ echo ''
13
+ echo '### can-i-deploy'
14
+ echo ''
15
+ echo '*This feature is in beta release, and backwards compatibility is NOT guaranteed.*'
16
+ echo 'You will need the latest version of the Pact Broker for this feature to work.'
17
+ echo ''
18
+ echo '```'
19
+ echo "$(bundle exec bin/pact-broker help can-i-deploy)"
20
+ echo '```'
@@ -10,12 +10,13 @@ module PactBroker::Client
10
10
  @consumer_version = "1.2.3"
11
11
  end
12
12
 
13
- let(:publish_pacts) { instance_double("PactBroker::ClientSupport::PublishPacts")}
13
+ let(:publish_pacts) { instance_double("PactBroker::ClientSupport::PublishPacts", call: true)}
14
14
  let(:pact_file_list) { ['spec/pact/consumer-provider.json'] }
15
15
 
16
16
  before do
17
17
  allow(PactBroker::Client::PublishPacts).to receive(:new).and_return(publish_pacts)
18
18
  allow(FileList).to receive(:[]).with(pattern).and_return(pact_file_list)
19
+ allow(PactBroker::Client::Git).to receive(:branch).and_return('foo')
19
20
  end
20
21
 
21
22
  let(:pattern) { "spec/pacts/*.json" }
@@ -59,6 +60,22 @@ module PactBroker::Client
59
60
  end
60
61
  end
61
62
 
63
+ context "when tag_with_git_branch is true" do
64
+ before :all do
65
+ PactBroker::Client::PublicationTask.new(:git_branch) do | task |
66
+ task.consumer_version = '1.2.3'
67
+ task.tag_with_git_branch = true
68
+ task.tags = ['bar']
69
+ end
70
+ end
71
+
72
+ it "invokes PublishPacts with the git branch name as a tag" do
73
+ expect(PactBroker::Client::PublishPacts).to receive(:new).with(anything, anything, anything, ['bar', 'foo'], anything).and_return(publish_pacts)
74
+
75
+ Rake::Task['pact:publish:git_branch'].execute
76
+ end
77
+ end
78
+
62
79
  describe "custom task" do
63
80
 
64
81
  before :all do
@@ -85,7 +102,6 @@ module PactBroker::Client
85
102
  end
86
103
 
87
104
  describe "timing of block execution" do
88
-
89
105
  before :all do
90
106
  PactBroker::Client::PublicationTask.new(:exception) do | task |
91
107
  raise 'A contrived exception'
@@ -96,8 +112,5 @@ module PactBroker::Client
96
112
  expect{ Rake::Task['pact:publish:exception'].execute }.to raise_error 'A contrived exception'
97
113
  end
98
114
  end
99
-
100
-
101
115
  end
102
-
103
116
  end
@@ -192,7 +192,7 @@
192
192
  "request": {
193
193
  "method": "get",
194
194
  "path": "/matrix",
195
- "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=4.5.6"
195
+ "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=4.5.6&latestby=cvpv"
196
196
  },
197
197
  "response": {
198
198
  "status": 200,
@@ -240,7 +240,55 @@
240
240
  "request": {
241
241
  "method": "get",
242
242
  "path": "/matrix",
243
- "query": "q[][pacticipant]=Foo%20Thing&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=4.5.6"
243
+ "query": "q[][pacticipant]=Foo%20Thing&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=4.5.6&latestby=cvpv"
244
+ },
245
+ "response": {
246
+ "status": 200,
247
+ "headers": {
248
+ },
249
+ "body": {
250
+ "summary": {
251
+ "deployable": true,
252
+ "reason": "some text"
253
+ },
254
+ "matrix": [
255
+ {
256
+ "consumer": {
257
+ "name": "Foo",
258
+ "version": {
259
+ "number": "4"
260
+ }
261
+ },
262
+ "provider": {
263
+ "name": "Bar",
264
+ "version": {
265
+ "number": "5"
266
+ }
267
+ },
268
+ "verificationResult": {
269
+ "verifiedAt": "2017-10-10T12:49:04+11:00",
270
+ "success": true
271
+ },
272
+ "pact": {
273
+ "createdAt": "2017-10-10T12:49:04+11:00"
274
+ }
275
+ }
276
+ ]
277
+ },
278
+ "matchingRules": {
279
+ "$.body": {
280
+ "match": "type"
281
+ }
282
+ }
283
+ }
284
+ },
285
+ {
286
+ "description": "a request for the compatibility matrix where only the version of Foo is specified",
287
+ "providerState": "the pact for Foo version 1.2.3 has been verified by Bar version 4.5.6 and version 5.6.7",
288
+ "request": {
289
+ "method": "get",
290
+ "path": "/matrix",
291
+ "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&latestby=cvp"
244
292
  },
245
293
  "response": {
246
294
  "status": 200,
@@ -288,7 +336,7 @@
288
336
  "request": {
289
337
  "method": "get",
290
338
  "path": "/matrix",
291
- "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=9.9.9"
339
+ "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=9.9.9&latestby=cvpv"
292
340
  },
293
341
  "response": {
294
342
  "status": 400,
@@ -314,7 +362,7 @@
314
362
  "request": {
315
363
  "method": "get",
316
364
  "path": "/matrix",
317
- "query": "q[][pacticipant]=Wiffle&q[][version]=1.2.3&q[][pacticipant]=Meep&q[][version]=9.9.9"
365
+ "query": "q[][pacticipant]=Wiffle&q[][version]=1.2.3&q[][pacticipant]=Meep&q[][version]=9.9.9&latestby=cvpv"
318
366
  },
319
367
  "response": {
320
368
  "status": 400,
@@ -341,7 +389,7 @@
341
389
  "request": {
342
390
  "method": "get",
343
391
  "path": "/matrix",
344
- "query": "q[][pacticipant]=Foo&q[][pacticipant]=Bar"
392
+ "query": "q[][pacticipant]=Foo&q[][pacticipant]=Bar&latestby=cvpv"
345
393
  },
346
394
  "response": {
347
395
  "status": 200,
@@ -409,7 +457,7 @@
409
457
  "request": {
410
458
  "method": "get",
411
459
  "path": "/matrix",
412
- "query": "q[][pacticipant]=Foo&q[][pacticipant]=Bar&success[]=true"
460
+ "query": "q[][pacticipant]=Foo&q[][pacticipant]=Bar&latestby=cvpv&success[]=true"
413
461
  },
414
462
  "response": {
415
463
  "status": 200,
@@ -457,7 +505,7 @@
457
505
  "request": {
458
506
  "method": "get",
459
507
  "path": "/matrix",
460
- "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][latest]=true&q[][tag]=prod"
508
+ "query": "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][latest]=true&q[][tag]=prod&latestby=cvpv"
461
509
  },
462
510
  "response": {
463
511
  "status": 200,
@@ -505,7 +553,7 @@
505
553
  "request": {
506
554
  "method": "get",
507
555
  "path": "/matrix",
508
- "query": "q[][pacticipant]=Foo&q[][version]=1.2.4&q[][pacticipant]=Bar&q[][latest]=true"
556
+ "query": "q[][pacticipant]=Foo&q[][version]=1.2.4&q[][pacticipant]=Bar&q[][latest]=true&latestby=cvpv"
509
557
  },
510
558
  "response": {
511
559
  "status": 200,
@@ -19,7 +19,7 @@ module PactBroker::Client
19
19
  with(
20
20
  method: :get,
21
21
  path: "/matrix",
22
- query: "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=4.5.6"
22
+ query: "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=4.5.6&latestby=cvpv"
23
23
  ).
24
24
  will_respond_with(
25
25
  status: 200,
@@ -42,7 +42,7 @@ module PactBroker::Client
42
42
  with(
43
43
  method: :get,
44
44
  path: "/matrix",
45
- query: "q[][pacticipant]=Foo%20Thing&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=4.5.6"
45
+ query: "q[][pacticipant]=Foo%20Thing&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=4.5.6&latestby=cvpv"
46
46
  ).
47
47
  will_respond_with(
48
48
  status: 200,
@@ -59,25 +59,30 @@ module PactBroker::Client
59
59
  end
60
60
  end
61
61
 
62
- # context "with only one version selector" do
63
- # before do
64
- # pact_broker.
65
- # given("the pact for Foo version 1.2.3 has been verified by Bar version 4.5.6").
66
- # upon_receiving("a request for the compatibility matrix where only the version of Foo is specified").
67
- # with(
68
- # method: :get,
69
- # path: "/matrix",
70
- # query: {
71
- # 'selectors[]' => ['Foo/version/1.2.3']
72
- # }
73
- # ).
74
- # will_respond_with(
75
- # status: 200,
76
- # headers: pact_broker_response_headers,
77
- # body: matrix_response_body
78
- # )
79
- # end
80
- # end
62
+ context "with only one version selector" do
63
+ before do
64
+ pact_broker.
65
+ given("the pact for Foo version 1.2.3 has been verified by Bar version 4.5.6 and version 5.6.7").
66
+ upon_receiving("a request for the compatibility matrix where only the version of Foo is specified").
67
+ with(
68
+ method: :get,
69
+ path: "/matrix",
70
+ query: "q[][pacticipant]=Foo&q[][version]=1.2.3&latestby=cvp"
71
+ ).
72
+ will_respond_with(
73
+ status: 200,
74
+ headers: pact_broker_response_headers,
75
+ body: matrix_response_body
76
+ )
77
+ end
78
+
79
+ let(:selectors) { [{ pacticipant: "Foo", version: "1.2.3" }] }
80
+
81
+ it 'returns the row with the lastest verification for version 1.2.3' do
82
+ matrix = pact_broker_client.matrix.get(selectors)
83
+ expect(matrix[:matrix].size).to eq 1
84
+ end
85
+ end
81
86
 
82
87
  context "when one or more of the versions does not exist" do
83
88
  before do
@@ -87,7 +92,7 @@ module PactBroker::Client
87
92
  with(
88
93
  method: :get,
89
94
  path: "/matrix",
90
- query: "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=9.9.9"
95
+ query: "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][version]=9.9.9&latestby=cvpv"
91
96
  ).
92
97
  will_respond_with(
93
98
  status: 400,
@@ -114,7 +119,7 @@ module PactBroker::Client
114
119
  with(
115
120
  method: :get,
116
121
  path: "/matrix",
117
- query: "q[][pacticipant]=Wiffle&q[][version]=1.2.3&q[][pacticipant]=Meep&q[][version]=9.9.9"
122
+ query: "q[][pacticipant]=Wiffle&q[][version]=1.2.3&q[][pacticipant]=Meep&q[][version]=9.9.9&latestby=cvpv"
118
123
  ).
119
124
  will_respond_with(
120
125
  status: 400,
@@ -142,7 +147,7 @@ module PactBroker::Client
142
147
  with(
143
148
  method: :get,
144
149
  path: "/matrix",
145
- query: "q[][pacticipant]=Foo&q[][pacticipant]=Bar"
150
+ query: "q[][pacticipant]=Foo&q[][pacticipant]=Bar&latestby=cvpv"
146
151
  ).
147
152
  will_respond_with(
148
153
  status: 200,
@@ -169,7 +174,7 @@ module PactBroker::Client
169
174
  with(
170
175
  method: :get,
171
176
  path: "/matrix",
172
- query: "q[][pacticipant]=Foo&q[][pacticipant]=Bar&success[]=true"
177
+ query: "q[][pacticipant]=Foo&q[][pacticipant]=Bar&latestby=cvpv&success[]=true"
173
178
  ).
174
179
  will_respond_with(
175
180
  status: 200,
@@ -195,7 +200,7 @@ module PactBroker::Client
195
200
  with(
196
201
  method: :get,
197
202
  path: "/matrix",
198
- query: "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][latest]=true&q[][tag]=prod"
203
+ query: "q[][pacticipant]=Foo&q[][version]=1.2.3&q[][pacticipant]=Bar&q[][latest]=true&q[][tag]=prod&latestby=cvpv"
199
204
  ).
200
205
  will_respond_with(
201
206
  status: 200,
@@ -221,7 +226,7 @@ module PactBroker::Client
221
226
  with(
222
227
  method: :get,
223
228
  path: "/matrix",
224
- query: "q[][pacticipant]=Foo&q[][version]=1.2.4&q[][pacticipant]=Bar&q[][latest]=true"
229
+ query: "q[][pacticipant]=Foo&q[][version]=1.2.4&q[][pacticipant]=Bar&q[][latest]=true&latestby=cvpv"
225
230
  ).
226
231
  will_respond_with(
227
232
  status: 200,
@@ -1,3 +1,3 @@
1
- CONSUMER | CONSUMER_VERSION | PROVIDER | PROVIDER_VERSION | SUCCESS
2
- ---------|------------------|----------|------------------|--------
3
- Foo | 4 | Bar | 5 | true
1
+ CONSUMER | C.VERSION | PROVIDER | P.VERSION | SUCCESS?
2
+ ---------|-----------|----------|-----------|---------
3
+ Foo | 4 | Bar | 5 | true
@@ -1,3 +1,3 @@
1
- CONSUMER | CONSUMER_VERSION | PROVIDER | PROVIDER_VERSION | SUCCESS
2
- ---------|------------------|----------|------------------|--------
3
- ??? | ??? | ??? | ??? | ???
1
+ CONSUMER | C.VERSION | PROVIDER | P.VERSION | SUCCESS?
2
+ ---------|-----------|----------|-----------|---------
3
+ ??? | ??? | ??? | ??? | ???
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.11.0
4
+ version: 1.12.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: 2017-11-01 00:00:00.000000000 Z
11
+ date: 2017-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -161,6 +161,7 @@ files:
161
161
  - lib/pact_broker/client/base_client.rb
162
162
  - lib/pact_broker/client/can_i_deploy.rb
163
163
  - lib/pact_broker/client/cli/broker.rb
164
+ - lib/pact_broker/client/cli/can_i_deploy_long_desc.txt
164
165
  - lib/pact_broker/client/cli/custom_thor.rb
165
166
  - lib/pact_broker/client/cli/version_selector_options_parser.rb
166
167
  - lib/pact_broker/client/create_tag.rb
@@ -184,6 +185,7 @@ files:
184
185
  - lib/pact_broker/client/versions.rb
185
186
  - lib/pact_broker_client.rb
186
187
  - pact-broker-client.gemspec
188
+ - script/generate-cli-usage.sh
187
189
  - script/publish-pact.sh
188
190
  - script/release.sh
189
191
  - spec/integration/can_i_deploy_spec.rb