pact_broker-client 1.73.0 → 1.75.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.
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