pact_broker-client 1.73.0 → 1.75.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release_gem.yml +2 -2
  3. data/.github/workflows/test.yml +4 -1
  4. data/.github/workflows/trigger_pact_docs_update.yml +1 -1
  5. data/CHANGELOG.md +22 -0
  6. data/Gemfile +1 -0
  7. data/README.md +100 -35
  8. data/doc/pacts/markdown/Pact Broker Client - Pact Broker.md +45 -0
  9. data/doc/pacts/markdown/Pact Broker Client - Pactflow.md +1 -1
  10. data/example/scripts/publish-pact-rake.sh +10 -0
  11. data/example/scripts/publish-pact.sh +25 -1
  12. data/example/scripts/publish-provider-contract.sh +2 -1
  13. data/lib/pact_broker/client/branches/delete_branch.rb +64 -0
  14. data/lib/pact_broker/client/cli/branch_commands.rb +40 -0
  15. data/lib/pact_broker/client/cli/broker.rb +2 -1
  16. data/lib/pact_broker/client/cli/custom_thor.rb +2 -2
  17. data/lib/pact_broker/client/cli/environment_commands.rb +1 -1
  18. data/lib/pact_broker/client/cli/pact_commands.rb +35 -14
  19. data/lib/pact_broker/client/cli/version_commands.rb +2 -2
  20. data/lib/pact_broker/client/git.rb +20 -3
  21. data/lib/pact_broker/client/merge_pacts.rb +5 -2
  22. data/lib/pact_broker/client/publish_pacts_the_old_way.rb +1 -1
  23. data/lib/pact_broker/client/tasks/publication_task.rb +40 -23
  24. data/lib/pact_broker/client/version.rb +1 -1
  25. data/lib/pactflow/client/cli/provider_contract_commands.rb +1 -1
  26. data/lib/pactflow/client/provider_contracts/publish.rb +1 -1
  27. data/script/publish-provider-contract.sh +0 -1
  28. data/script/update-cli-usage-in-readme.rb +1 -0
  29. data/spec/fixtures/MyConsumer-MyProvider (1).json +37 -0
  30. data/spec/fixtures/MyConsumer-MyProvider.json +37 -0
  31. data/spec/integration/can_i_deploy_spec.rb +0 -9
  32. data/spec/lib/pact_broker/client/branches/delete_branch_spec.rb +103 -0
  33. data/spec/lib/pact_broker/client/cli/broker_publish_spec.rb +38 -21
  34. data/spec/lib/pact_broker/client/merge_pacts_spec.rb +26 -0
  35. data/spec/lib/pact_broker/client/publish_pacts_the_old_way_spec.rb +1 -3
  36. data/spec/lib/pact_broker/client/tasks/publication_task_spec.rb +54 -31
  37. data/spec/pacts/pact_broker_client-pact_broker.json +43 -0
  38. data/spec/pacts/pact_broker_client-pactflow.json +1 -1
  39. data/spec/service_providers/delete_branch_spec.rb +68 -0
  40. data/spec/service_providers/pact_helper.rb +1 -0
  41. data/spec/service_providers/pactflow_publish_provider_contract_spec.rb +1 -1
  42. data/spec/support/ssl_server.rb +1 -1
  43. data/tasks/pact.rake +79 -0
  44. metadata +14 -3
@@ -4,10 +4,12 @@ require 'pact_broker/client/git'
4
4
 
5
5
  module PactBroker::Client::CLI
6
6
  describe Broker do
7
- describe ".broker" do
7
+ describe '.broker' do
8
8
  before do
9
9
  allow(PactBroker::Client::PublishPacts).to receive(:call).and_return(result)
10
- allow(PactBroker::Client::Git).to receive(:branch).and_return("bar")
10
+ allow(PactBroker::Client::Git).to receive(:branch).and_return('bar')
11
+ allow(PactBroker::Client::Git).to receive(:commit).and_return('6.6.6')
12
+ allow(PactBroker::Client::Git).to receive(:build_url).and_return('build_url')
11
13
  subject.options = OpenStruct.new(minimum_valid_options)
12
14
  allow($stdout).to receive(:puts)
13
15
  end
@@ -30,7 +32,7 @@ module PactBroker::Client::CLI
30
32
  expect(PactBroker::Client::PublishPacts).to receive(:call).with(
31
33
  "http://pact-broker",
32
34
  ["spec/support/cli_test_pacts/foo.json"],
33
- { number: "1.2.3", tags: [], version_required: false },
35
+ { number: "1.2.3", tags: [] },
34
36
  {},
35
37
  { pact_broker_base_url: 'http://pact-broker' }
36
38
  )
@@ -151,7 +153,7 @@ module PactBroker::Client::CLI
151
153
  expect(PactBroker::Client::PublishPacts).to receive(:call).with(
152
154
  anything,
153
155
  anything,
154
- hash_including(branch: "main", version_required: true),
156
+ hash_including(branch: "main"),
155
157
  anything,
156
158
  anything
157
159
  )
@@ -159,50 +161,55 @@ module PactBroker::Client::CLI
159
161
  end
160
162
  end
161
163
 
162
- context "with --auto-detect-version-properties on by default" do
164
+ context "with --auto-detect-version-properties specified" do
163
165
  before do
164
166
  subject.options = OpenStruct.new(
165
- minimum_valid_options.merge(auto_detect_version_properties: true)
167
+ minimum_valid_options.merge(auto_detect_version_properties: true, consumer_app_version: nil)
166
168
  )
167
- allow(subject).to receive(:explict_auto_detect_version_properties).and_return(false)
168
169
  end
169
170
 
170
171
  it "determines the git branch name" do
171
- expect(PactBroker::Client::Git).to receive(:branch).with(raise_error: false)
172
+ expect(PactBroker::Client::Git).to receive(:branch).with(raise_error: true)
172
173
  invoke_broker
173
174
  end
174
175
 
175
- it "passes in the auto detected branch option with version_required: false" do
176
+ it "passes in the auto detected branch option" do
176
177
  expect(PactBroker::Client::PublishPacts).to receive(:call).with(
177
178
  anything,
178
179
  anything,
179
- hash_including(branch: "bar", version_required: false),
180
+ hash_including(branch: "bar"),
180
181
  anything,
181
182
  anything
182
183
  )
183
184
  invoke_broker
184
185
  end
185
- end
186
186
 
187
+ it 'determines the commit sha' do
188
+ expect(PactBroker::Client::Git).to receive(:commit).with(raise_error: true)
189
+ invoke_broker
190
+ end
187
191
 
188
- context "with --auto-detect-version-properties specified explicitly" do
189
- before do
190
- subject.options = OpenStruct.new(
191
- minimum_valid_options.merge(auto_detect_version_properties: true)
192
+ it 'passes in the auto detected commit sha option' do
193
+ expect(PactBroker::Client::PublishPacts).to receive(:call).with(
194
+ anything,
195
+ anything,
196
+ hash_including(number: '6.6.6'),
197
+ anything,
198
+ anything
192
199
  )
193
- allow(subject).to receive(:explict_auto_detect_version_properties).and_return(true)
200
+ invoke_broker
194
201
  end
195
202
 
196
- it "determines the git branch name" do
197
- expect(PactBroker::Client::Git).to receive(:branch).with(raise_error: true)
203
+ it 'determines the build URL' do
204
+ expect(PactBroker::Client::Git).to receive(:build_url)
198
205
  invoke_broker
199
206
  end
200
207
 
201
- it "passes in the auto detected branch option with version_required: true" do
208
+ it 'passes in the auto detected build URL' do
202
209
  expect(PactBroker::Client::PublishPacts).to receive(:call).with(
203
210
  anything,
204
211
  anything,
205
- hash_including(branch: "bar", version_required: true),
212
+ hash_including(build_url: 'build_url'),
206
213
  anything,
207
214
  anything
208
215
  )
@@ -220,7 +227,7 @@ module PactBroker::Client::CLI
220
227
  expect(PactBroker::Client::PublishPacts).to receive(:call).with(
221
228
  anything,
222
229
  anything,
223
- hash_including(branch: "specified-branch", version_required: true),
230
+ hash_including(branch: "specified-branch"),
224
231
  anything,
225
232
  anything
226
233
  )
@@ -248,6 +255,16 @@ module PactBroker::Client::CLI
248
255
  end
249
256
  end
250
257
 
258
+ context "with no consumer_app_version" do
259
+ before do
260
+ subject.options.consumer_app_version = nil
261
+ end
262
+
263
+ it "raises an error" do
264
+ expect { invoke_broker }.to raise_error ::Thor::RequiredArgumentMissingError, /--consumer-app-version/
265
+ end
266
+ end
267
+
251
268
  context "with basic auth options specified" do
252
269
  before do
253
270
  subject.options = OpenStruct.new(
@@ -166,6 +166,32 @@ module PactBroker
166
166
  expect(subject).to eq expected_merge
167
167
  end
168
168
  end
169
+
170
+ describe "with v3 pacts" do
171
+ let(:pact_hash_1) { JSON.parse(File.read("spec/fixtures/MyConsumer-MyProvider.json"), symbolize_names: true) }
172
+ let(:pact_hash_2) { JSON.parse(File.read("spec/fixtures/MyConsumer-MyProvider (1).json"), symbolize_names: true) }
173
+ let(:pact_hashes) { [pact_hash_1, pact_hash_2] }
174
+
175
+ subject { MergePacts.call(pact_hashes) }
176
+
177
+ context "when there are no conflicts and no duplicates" do
178
+ it "adds all the interactions to the merged file" do
179
+ expect(subject[:interactions].size).to eq 2
180
+ end
181
+ end
182
+
183
+ context "when there is a conflict" do
184
+ let(:pact_hash_2) do
185
+ hash = JSON.parse(File.read("spec/fixtures/MyConsumer-MyProvider.json"), symbolize_names: true)
186
+ hash[:interactions].first[:request][:path] = "/a-different-path"
187
+ hash
188
+ end
189
+
190
+ it "raises an error with a message that contains the provider states of the conflicting interactions" do
191
+ expect { subject }.to raise_error PactMergeError, /state 1/
192
+ end
193
+ end
194
+ end
169
195
  end
170
196
  end
171
197
  end
@@ -37,7 +37,6 @@ module PactBroker
37
37
  let(:tags) { nil }
38
38
  let(:branch) { nil }
39
39
  let(:build_url) { nil }
40
- let(:version_required) { false }
41
40
  let(:pact_hash) { { consumer: { name: 'Consumer'}, provider: { name: 'Provider' }, interactions: [] } }
42
41
  let(:pact_hash_2) { {consumer: { name: 'Foo' }, provider: { name: 'Bar' }, interactions: [] } }
43
42
  let(:pacts_client) { instance_double("PactBroker::ClientSupport::Pacts")}
@@ -48,8 +47,7 @@ module PactBroker
48
47
  number: consumer_version,
49
48
  branch: branch,
50
49
  tags: tags,
51
- build_url: build_url,
52
- version_required: version_required
50
+ build_url: build_url
53
51
  }
54
52
  end
55
53
  let(:pact_broker_client_options) do
@@ -5,7 +5,6 @@ require 'pact_broker/client/command_result'
5
5
 
6
6
  module PactBroker::Client
7
7
  describe PublicationTask do
8
-
9
8
  before do
10
9
  @consumer_version = "1.2.3"
11
10
  end
@@ -19,6 +18,8 @@ module PactBroker::Client
19
18
  allow(PactBroker::Client::PublishPacts).to receive(:new).and_return(publish_pacts)
20
19
  allow(FileList).to receive(:[]).with(pattern).and_return(pact_file_list)
21
20
  allow(PactBroker::Client::Git).to receive(:branch).and_return('foo')
21
+ allow(PactBroker::Client::Git).to receive(:commit).and_return('6.6.6')
22
+ allow(PactBroker::Client::Git).to receive(:build_url).and_return("build_url")
22
23
  allow($stdout).to receive(:puts)
23
24
  end
24
25
 
@@ -33,7 +34,7 @@ module PactBroker::Client
33
34
 
34
35
  context "when pacts are succesfully published" do
35
36
  it "invokes PublishPacts with the default values" do
36
- expect(PactBroker::Client::PublishPacts).to receive(:new).with('http://pact-broker', pact_file_list, { number: '1.2.3', branch: "foo", tags: [], version_required: false}, {}, {}).and_return(publish_pacts)
37
+ expect(PactBroker::Client::PublishPacts).to receive(:new).with('http://pact-broker', pact_file_list, { number: '1.2.3', branch: "foo", tags: [] }, {}, {}).and_return(publish_pacts)
37
38
  expect(publish_pacts).to receive(:call).and_return(result)
38
39
  Rake::Task['pact:publish'].execute
39
40
  end
@@ -57,7 +58,7 @@ module PactBroker::Client
57
58
  end
58
59
 
59
60
  it "invokes PublishPacts with the write method set" do
60
- expect(PactBroker::Client::PublishPacts).to receive(:new).with('http://pact-broker', pact_file_list, { number: "1.2.3", branch: "foo", tags: [], version_required: false }, {}, {write: :merge}).and_return(publish_pacts)
61
+ expect(PactBroker::Client::PublishPacts).to receive(:new).with('http://pact-broker', pact_file_list, { number: "1.2.3", branch: "foo", tags: [] }, {}, {write: :merge}).and_return(publish_pacts)
61
62
  expect(publish_pacts).to receive(:call).and_return(result)
62
63
  Rake::Task['pact:publish:merge'].execute
63
64
  end
@@ -87,81 +88,92 @@ module PactBroker::Client
87
88
  context "when auto_detect_version_properties is explicitly set to true" do
88
89
  before :all do
89
90
  PactBroker::Client::PublicationTask.new(:git_branch_auto_detect_true) do | task |
90
- task.consumer_version = '1.2.3'
91
91
  task.auto_detect_version_properties = true
92
92
  end
93
93
  end
94
94
 
95
- it "gets the git branch name" do
95
+ # Don't usually put 3 expects into the one it block, but if I separate them,
96
+ # only the first it block passes for some reason that I can't work out.
97
+ it "gets the commit, build_url and branch" do
98
+ expect(PactBroker::Client::Git).to receive(:commit).with(raise_error: true)
99
+ expect(PactBroker::Client::Git).to receive(:build_url)
96
100
  expect(PactBroker::Client::Git).to receive(:branch).with(raise_error: true)
97
101
  Rake::Task['pact:publish:git_branch_auto_detect_true'].execute
98
102
  end
99
103
 
100
- it "invokes PublishPacts with the branch name" do
101
- expect(PactBroker::Client::PublishPacts).to receive(:new).with(anything, anything, hash_including(branch: "foo"), anything, anything).and_return(publish_pacts)
104
+ it "invokes PublishPacts with the branch name and build URL" do
105
+ expect(PactBroker::Client::PublishPacts).to receive(:new).with(anything, anything, hash_including(number: "6.6.6", branch: "foo", build_url: "build_url"), anything, anything).and_return(publish_pacts)
102
106
  Rake::Task['pact:publish:git_branch_auto_detect_true'].execute
103
107
  end
104
108
  end
105
109
 
106
- context "when auto_detect_version_properties is explicitly set to true and the branch is specified" do
110
+ context "when auto_detect_version_properties is explicitly set to true and the auto detectable attributes are specified" do
107
111
  before :all do
108
- PactBroker::Client::PublicationTask.new(:git_branch_auto_detect_true_with_branch) do | task |
109
- task.consumer_version = '1.2.3'
112
+ PactBroker::Client::PublicationTask.new(:auto_detect_true_with_attributes_specified) do | task |
110
113
  task.auto_detect_version_properties = true
111
- task.branch = "main"
114
+ task.consumer_version = '1.2.3'
115
+ task.branch = "feat/foo"
116
+ task.consumer_version = "3"
117
+ task.build_url = "some_build"
112
118
  end
113
119
  end
114
120
 
115
- it "does not get the branch name" do
121
+ it "does not get the commit, branch or build URL from Git" do
122
+ expect(PactBroker::Client::Git).to_not receive(:commit)
123
+ expect(PactBroker::Client::Git).to_not receive(:build_url)
116
124
  expect(PactBroker::Client::Git).to_not receive(:branch)
117
- Rake::Task['pact:publish:git_branch_auto_detect_true_with_branch'].execute
125
+ Rake::Task['pact:publish:auto_detect_true_with_attributes_specified'].execute
118
126
  end
119
127
 
120
- it "invokes PublishPacts with the specified branch name" do
121
- expect(PactBroker::Client::PublishPacts).to receive(:new).with(anything, anything, hash_including(branch: "main"), anything, anything).and_return(publish_pacts)
122
- Rake::Task['pact:publish:git_branch_auto_detect_true_with_branch'].execute
128
+ it "invokes PublishPacts with the specified attributes" do
129
+ expect(PactBroker::Client::PublishPacts).to receive(:new).with(anything, anything, hash_including(number: "3", branch: "feat/foo", build_url: "some_build"), anything, anything).and_return(publish_pacts)
130
+ Rake::Task['pact:publish:auto_detect_true_with_attributes_specified'].execute
123
131
  end
124
132
  end
125
133
 
126
134
  context "when auto_detect_version_properties is explicitly set to false" do
127
135
  before :all do
128
- PactBroker::Client::PublicationTask.new(:git_branch_auto_detect_false) do | task |
129
- task.consumer_version = '1.2.3'
136
+ PactBroker::Client::PublicationTask.new(:auto_detect_false) do | task |
130
137
  task.auto_detect_version_properties = false
138
+ task.consumer_version = '1.2.3'
139
+ task.branch = "feat/foo"
140
+ task.consumer_version = "3"
141
+ task.build_url = "some_build"
131
142
  end
132
143
  end
133
144
 
134
- it "does not get the git branch name" do
145
+ it "does not get the commit, branch or build URL from Git" do
146
+ expect(PactBroker::Client::Git).to_not receive(:commit)
147
+ expect(PactBroker::Client::Git).to_not receive(:build_url)
135
148
  expect(PactBroker::Client::Git).to_not receive(:branch)
136
- Rake::Task['pact:publish:git_branch_auto_detect_false'].execute
149
+ Rake::Task['pact:publish:auto_detect_false'].execute
137
150
  end
138
151
 
139
- it "invokes PublishPacts without the branch name" do
140
- expect(PactBroker::Client::PublishPacts).to receive(:new).with(anything, anything, hash_not_including(branch: "foo"), anything, anything).and_return(publish_pacts)
141
- Rake::Task['pact:publish:git_branch_auto_detect_false'].execute
152
+ it "invokes PublishPacts with the specified attributes" do
153
+ expect(PactBroker::Client::PublishPacts).to receive(:new).with(anything, anything, hash_including(number: "3", branch: "feat/foo", build_url: "some_build"), anything, anything).and_return(publish_pacts)
154
+ Rake::Task['pact:publish:auto_detect_false'].execute
142
155
  end
143
156
  end
144
157
 
145
- context "when auto_detect_version_properties is left as its default" do
158
+ context "when auto_detect_version_properties is left as its default and the branch is not specified" do
146
159
  before :all do
147
- PactBroker::Client::PublicationTask.new(:git_branch_auto_detect_default) do | task |
160
+ PactBroker::Client::PublicationTask.new(:auto_detect_default) do | task |
148
161
  task.consumer_version = '1.2.3'
149
162
  end
150
163
  end
151
164
 
152
- it "gets the git branch name" do
165
+ it "gets the git branch name but won't raise an error if it can't be determined" do
153
166
  expect(PactBroker::Client::Git).to receive(:branch).with(raise_error: false)
154
- Rake::Task['pact:publish:git_branch_auto_detect_default'].execute
167
+ Rake::Task['pact:publish:auto_detect_default'].execute
155
168
  end
156
169
 
157
- it "invokes PublishPacts with the branch name" do
170
+ it "invokes PublishPacts with the branch name if found" do
158
171
  expect(PactBroker::Client::PublishPacts).to receive(:new).with(anything, anything, hash_including(branch: "foo"),anything, anything).and_return(publish_pacts)
159
- Rake::Task['pact:publish:git_branch_auto_detect_default'].execute
172
+ Rake::Task['pact:publish:auto_detect_default'].execute
160
173
  end
161
174
  end
162
175
 
163
176
  describe "custom task" do
164
-
165
177
  before :all do
166
178
  @pact_broker_base_url = "http://some-host"
167
179
  @pattern = "pact/*.json"
@@ -184,7 +196,7 @@ module PactBroker::Client
184
196
  expect(PactBroker::Client::PublishPacts).to receive(:new).with(
185
197
  @pact_broker_base_url,
186
198
  pact_file_list,
187
- { number: "1.2.3", tags: [@tag], branch: "foo", version_required: false},
199
+ { number: "1.2.3", tags: [@tag], branch: "foo" },
188
200
  {},
189
201
  { basic_auth: @pact_broker_basic_auth, token: @pact_broker_token }
190
202
  )
@@ -193,6 +205,17 @@ module PactBroker::Client
193
205
  end
194
206
  end
195
207
 
208
+ describe "with no consumer version" do
209
+ before :all do
210
+ PactBroker::Client::PublicationTask.new(:no_consumer_version) do
211
+ end
212
+ end
213
+
214
+ it "raises an error" do
215
+ expect { Rake::Task['pact:publish:no_consumer_version'].execute }.to raise_error PactBroker::Client::Error, /consumer version/
216
+ end
217
+ end
218
+
196
219
  describe "timing of block execution" do
197
220
  before :all do
198
221
  PactBroker::Client::PublicationTask.new(:exception) do | task |
@@ -6,6 +6,49 @@
6
6
  "name": "Pact Broker"
7
7
  },
8
8
  "interactions": [
9
+ {
10
+ "description": "a request for the index resource",
11
+ "providerState": "the pb:pacticipant-branch relation exists in the index resource",
12
+ "request": {
13
+ "method": "GET",
14
+ "path": "/",
15
+ "headers": {
16
+ "Accept": "application/hal+json"
17
+ }
18
+ },
19
+ "response": {
20
+ "status": 200,
21
+ "headers": {
22
+ "Content-Type": "application/hal+json;charset=utf-8"
23
+ },
24
+ "body": {
25
+ "_links": {
26
+ "pb:pacticipant-branch": {
27
+ "href": "http://localhost:1234/HAL-REL-PLACEHOLDER-PB-PACTICIPANT-BRANCH-{pacticipant}-{branch}"
28
+ }
29
+ }
30
+ },
31
+ "matchingRules": {
32
+ "$.body._links.pb:pacticipant-branch.href": {
33
+ "match": "regex",
34
+ "regex": "http:\\/\\/.*{pacticipant}.*{branch}"
35
+ }
36
+ }
37
+ }
38
+ },
39
+ {
40
+ "description": "a request to delete a pacticipant branch",
41
+ "providerState": "a branch named main exists for pacticipant Foo",
42
+ "request": {
43
+ "method": "DELETE",
44
+ "path": "/HAL-REL-PLACEHOLDER-PB-PACTICIPANT-BRANCH-Foo-main"
45
+ },
46
+ "response": {
47
+ "status": 204,
48
+ "headers": {
49
+ }
50
+ }
51
+ },
9
52
  {
10
53
  "description": "a request to list the latest pacts",
11
54
  "providerState": "a pact between Condor and the Pricing Service exists",
@@ -43,7 +43,7 @@
43
43
  "path": "/HAL-REL-PLACEHOLDER-PF-PUBLISH-PROVIDER-CONTRACT-Bar",
44
44
  "headers": {
45
45
  "Content-Type": "application/json",
46
- "Accept": "application/hal+json"
46
+ "Accept": "application/hal+json,application/problem+json"
47
47
  },
48
48
  "body": {
49
49
  "pacticipantVersionNumber": "1",
@@ -0,0 +1,68 @@
1
+ require "service_providers/pact_helper"
2
+ require "pact_broker/client/branches/delete_branch"
3
+
4
+ RSpec.describe "delete a branch", pact: true do
5
+ include_context "pact broker"
6
+ include PactBrokerPactHelperMethods
7
+
8
+ let(:params) do
9
+ {
10
+ pacticipant: "Foo",
11
+ branch: "main",
12
+ error_when_not_found: true
13
+ }
14
+ end
15
+
16
+ let(:options) do
17
+ {
18
+ verbose: verbose
19
+ }
20
+ end
21
+
22
+ let(:pact_broker_base_url) { pact_broker.mock_service_base_url }
23
+ let(:pact_broker_client_options) { { pact_broker_base_url: pact_broker_base_url } }
24
+ let(:response_headers) { { "Content-Type" => "application/hal+json"} }
25
+ let(:verbose) { false }
26
+
27
+ subject { PactBroker::Client::Branches::DeleteBranch.call(params, options, pact_broker_client_options) }
28
+
29
+ def mock_index
30
+ pact_broker
31
+ .given("the pb:pacticipant-branch relation exists in the index resource")
32
+ .upon_receiving("a request for the index resource")
33
+ .with(
34
+ method: "GET",
35
+ path: '/',
36
+ headers: get_request_headers).
37
+ will_respond_with(
38
+ status: 200,
39
+ headers: pact_broker_response_headers,
40
+ body: {
41
+ _links: {
42
+ :'pb:pacticipant-branch' => {
43
+ href: placeholder_url_term("pb:pacticipant-branch", ["pacticipant", "branch"], pact_broker)
44
+ }
45
+ }
46
+ }
47
+ )
48
+ end
49
+
50
+ def mock_branch_delete_request
51
+ pact_broker
52
+ .given("a branch named main exists for pacticipant Foo")
53
+ .upon_receiving("a request to delete a pacticipant branch")
54
+ .with(
55
+ method: "DELETE",
56
+ path: placeholder_path("pb:pacticipant-branch", ["Foo", "main"])
57
+ )
58
+ .will_respond_with(
59
+ status: 204
60
+ )
61
+ end
62
+
63
+ it "returns a success result" do
64
+ mock_index
65
+ mock_branch_delete_request
66
+ expect(subject.success).to be true
67
+ end
68
+ end
@@ -25,6 +25,7 @@ end
25
25
 
26
26
  module PactBrokerPactHelperMethods
27
27
 
28
+ # Use this for the path in the Pact request expectation.
28
29
  # @param [String] relation eg "pb:pacticipant"
29
30
  # @param [Array<String>] params eg ["Foo"]
30
31
  def placeholder_path(relation, params = [])
@@ -123,7 +123,7 @@ RSpec.describe "publishing a provider contract to PactFlow", pact: true do
123
123
  .with(
124
124
  method: :post,
125
125
  path: placeholder_path("pf:publish-provider-contract", ["Bar"]),
126
- headers: post_request_headers,
126
+ headers: post_request_headers.merge("Accept" => "application/hal+json,application/problem+json"),
127
127
  body: request_body
128
128
  ).will_respond_with(success_response)
129
129
  end
@@ -32,7 +32,7 @@ if __FILE__ == $0
32
32
  require "webrick"
33
33
  require "webrick/https"
34
34
  require "rack"
35
- require "rack/handler/webrick"
35
+ require "rackup/handler/webrick"
36
36
 
37
37
  opts = webrick_opts(4444)
38
38
 
data/tasks/pact.rake CHANGED
@@ -59,3 +59,82 @@ PactBroker::Client::PublicationTask.new(:pactflow_pact_foundation) do | task |
59
59
  task.pact_broker_token = ENV["PACT_BROKER_TOKEN_PACT_FOUNDATION"]
60
60
  task.build_url = PactBroker::Client::Git.build_url
61
61
  end
62
+ PactBroker::Client::PublicationTask.new(:pactflow_auto_on_nil_commit_nil_branch) do | task |
63
+ require 'pact_broker/client/version'
64
+ # publish with auto detected commit and branch
65
+ task.auto_detect_version_properties = true
66
+ task.branch = nil
67
+ task.consumer_version = nil
68
+ task.pact_broker_base_url = ENV['PACT_BROKER_BASE_URL']
69
+ task.pact_broker_token = ENV['PACT_BROKER_TOKEN']
70
+ task.build_url = PactBroker::Client::Git.build_url
71
+ end
72
+ PactBroker::Client::PublicationTask.new(:pactflow_auto_on_user_commit_user_branch) do | task |
73
+ require 'pact_broker/client/version'
74
+ # always accept user provided commit and branch
75
+ # even when auto_detect_version_properties enabled
76
+ task.auto_detect_version_properties = true
77
+ task.branch = 'user-provided-branch'
78
+ task.consumer_version = 'user-provided-version'
79
+ task.pact_broker_base_url = ENV['PACT_BROKER_BASE_URL']
80
+ task.pact_broker_token = ENV['PACT_BROKER_TOKEN']
81
+ task.build_url = PactBroker::Client::Git.build_url
82
+ end
83
+
84
+ PactBroker::Client::PublicationTask.new(:pactflow_auto_on_user_commit_nil_branch) do | task |
85
+ require 'pact_broker/client/version'
86
+ # auto detect branch, always accept user provided commit
87
+ # even where set to auto_detect_version_properties
88
+ task.auto_detect_version_properties = true
89
+ task.branch = nil
90
+ task.consumer_version = 'user-provided-version'
91
+ task.pact_broker_base_url = ENV['PACT_BROKER_BASE_URL']
92
+ task.pact_broker_token = ENV['PACT_BROKER_TOKEN']
93
+ task.build_url = PactBroker::Client::Git.build_url
94
+ end
95
+ PactBroker::Client::PublicationTask.new(:pactflow_auto_on_nil_commit_user_branch) do | task |
96
+ require 'pact_broker/client/version'
97
+ # auto detect commit, always accept user provided branch
98
+ # even where set to auto_detect_version_properties
99
+ task.auto_detect_version_properties = true
100
+ task.branch = 'user-provided-branch'
101
+ task.consumer_version = nil
102
+ task.pact_broker_base_url = ENV['PACT_BROKER_BASE_URL']
103
+ task.pact_broker_token = ENV['PACT_BROKER_TOKEN']
104
+ task.build_url = PactBroker::Client::Git.build_url
105
+ end
106
+
107
+ PactBroker::Client::PublicationTask.new(:pactflow_auto_off_user_commit_nil_branch) do | task |
108
+ require 'pact_broker/client/version'
109
+ # accept publish without branch, but has user provided commit
110
+ # auto_detect_version_properties off
111
+ task.auto_detect_version_properties = false
112
+ task.branch = nil
113
+ task.consumer_version = 'user-provided-version'
114
+ task.pact_broker_base_url = ENV['PACT_BROKER_BASE_URL']
115
+ task.pact_broker_token = ENV['PACT_BROKER_TOKEN']
116
+ task.build_url = PactBroker::Client::Git.build_url
117
+ end
118
+
119
+ PactBroker::Client::PublicationTask.new(:pactflow_auto_off_nil_commit_nil_branch) do | task |
120
+ require 'pact_broker/client/version'
121
+ # reject publish without user provided commit
122
+ # auto_detect_version_properties off
123
+ task.auto_detect_version_properties = false
124
+ task.branch = nil
125
+ task.consumer_version = nil
126
+ task.pact_broker_base_url = ENV['PACT_BROKER_BASE_URL']
127
+ task.pact_broker_token = ENV['PACT_BROKER_TOKEN']
128
+ task.build_url = PactBroker::Client::Git.build_url
129
+ end
130
+ PactBroker::Client::PublicationTask.new(:pactflow_auto_off_empty_string_commit_nil_branch) do | task |
131
+ require 'pact_broker/client/version'
132
+ # reject publish without user provided commit
133
+ # auto_detect_version_properties off
134
+ task.auto_detect_version_properties = false
135
+ task.branch = nil
136
+ task.consumer_version = ''
137
+ task.pact_broker_base_url = ENV['PACT_BROKER_BASE_URL']
138
+ task.pact_broker_token = ENV['PACT_BROKER_TOKEN']
139
+ task.build_url = PactBroker::Client::Git.build_url
140
+ end