pact_broker 2.88.0 → 2.89.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/release_gem.yml +1 -1
- data/.github/workflows/trigger_pact_docs_update.yml +1 -0
- data/CHANGELOG.md +14 -0
- data/docs/CONFIGURATION.md +1 -1
- data/lib/pact_broker/api/contracts/pacts_for_verification_json_query_schema.rb +14 -4
- data/lib/pact_broker/api/decorators/deployed_version_decorator.rb +2 -1
- data/lib/pact_broker/api/decorators/pacts_for_verification_query_decorator.rb +18 -0
- data/lib/pact_broker/api/resources/currently_deployed_versions_for_environment.rb +3 -1
- data/lib/pact_broker/api/resources/deployed_versions_for_version_and_environment.rb +4 -3
- data/lib/pact_broker/api/resources/pact.rb +1 -1
- data/lib/pact_broker/api/resources/publish_contracts.rb +27 -4
- data/lib/pact_broker/config/runtime_configuration_database_methods.rb +1 -1
- data/lib/pact_broker/contracts/contracts_publication_results.rb +2 -7
- data/lib/pact_broker/contracts/notice.rb +8 -0
- data/lib/pact_broker/contracts/service.rb +25 -0
- data/lib/pact_broker/doc/views/index/publish-contracts.markdown +32 -2
- data/lib/pact_broker/doc/views/provider-pacts-for-verification.markdown +2 -0
- data/lib/pact_broker/locale/en.yml +1 -1
- data/lib/pact_broker/pacts/content.rb +18 -0
- data/lib/pact_broker/pacts/create_formatted_diff.rb +9 -2
- data/lib/pact_broker/pacts/selector.rb +35 -21
- data/lib/pact_broker/pacts/sort_content.rb +1 -0
- data/lib/pact_broker/verifications/required_verification.rb +5 -2
- data/lib/pact_broker/verifications/service.rb +14 -7
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/versions/selector.rb +32 -0
- data/lib/pact_broker/versions/selectors.rb +20 -0
- data/lib/pact_broker/webhooks/pact_and_verification_parameters.rb +2 -2
- data/lib/pact_broker/webhooks/trigger_service.rb +9 -1
- data/script/docs/generate-configuration-docs.rb +9 -9
- data/script/github-issues/add-branch-support/issue-text.txt +7 -0
- data/script/github-issues/add-branch-support/issues.txt +0 -0
- data/script/github-issues/add-branch-support/raise-issue-in-client-repos.sh +10 -0
- data/script/github-issues/add-branch-support-for-provider-versions/issue-text.txt +9 -0
- data/script/github-issues/add-branch-support-for-provider-versions/issues.txt +6 -0
- data/script/github-issues/add-branch-support-for-provider-versions/raise-issue-in-client-repos.sh +10 -0
- data/script/github-issues/branch-consumer-version-selector/issue-text.txt +52 -0
- data/script/github-issues/branch-consumer-version-selector/issues.txt +9 -0
- data/script/github-issues/branch-consumer-version-selector/raise-issue-in-client-repos.sh +10 -0
- data/script/{issues → github-issues}/consumer-version-selectors-docs/issue-text.txt +0 -0
- data/script/{issues → github-issues}/consumer-version-selectors-docs/issues.txt +0 -0
- data/script/{issues → github-issues}/consumer-version-selectors-docs/raise-issue-in-client-repos.sh +0 -0
- data/script/github-issues/deployed-and-released-selectors-docs/issue-text.txt +26 -0
- data/script/github-issues/deployed-and-released-selectors-docs/issues.txt +9 -0
- data/script/github-issues/deployed-and-released-selectors-docs/raise-issue-in-client-repos.sh +10 -0
- data/script/github-issues/include-pending-by-default/issue-text.txt +5 -0
- data/script/github-issues/include-pending-by-default/issues.txt +10 -0
- data/script/github-issues/include-pending-by-default/raise-issue-in-client-repos.sh +10 -0
- data/spec/features/get_currently_deployed_versions_for_environment_spec.rb +23 -6
- data/spec/features/publish_pact_all_in_one_spec.rb +19 -0
- data/spec/features/record_deployment_spec.rb +17 -4
- data/spec/lib/pact_broker/api/contracts/pacts_for_verification_json_query_schema_combinations_spec.rb +5 -3
- data/spec/lib/pact_broker/api/contracts/pacts_for_verification_json_query_schema_spec.rb +10 -0
- data/spec/lib/pact_broker/api/decorators/pacts_for_verification_query_decorator_spec.rb +10 -0
- data/spec/lib/pact_broker/contracts/service_spec.rb +64 -0
- data/spec/lib/pact_broker/verifications/service_spec.rb +18 -12
- data/spec/lib/pact_broker/webhooks/trigger_service_spec.rb +67 -3
- metadata +22 -5
@@ -125,6 +125,16 @@ module PactBroker
|
|
125
125
|
expect(subject.consumer_version_selectors.last).to eq PactBroker::Pacts::Selector.for_currently_supported
|
126
126
|
end
|
127
127
|
end
|
128
|
+
|
129
|
+
context "when matchingBranch is true" do
|
130
|
+
let(:consumer_version_selectors) do
|
131
|
+
[{ "matchingBranch" => true }]
|
132
|
+
end
|
133
|
+
|
134
|
+
it "sets the branch and latest and matching branch properties" do
|
135
|
+
expect(subject.consumer_version_selectors).to contain_exactly(have_attributes(branch: "main", matching_branch: true, latest: true))
|
136
|
+
end
|
137
|
+
end
|
128
138
|
end
|
129
139
|
|
130
140
|
context "when parsing query string params" do
|
@@ -124,6 +124,70 @@ module PactBroker
|
|
124
124
|
end
|
125
125
|
end
|
126
126
|
end
|
127
|
+
|
128
|
+
describe "#conflict_errors" do
|
129
|
+
let(:contracts_to_publish) do
|
130
|
+
ContractsToPublish.from_hash(
|
131
|
+
pacticipant_name: "Foo",
|
132
|
+
pacticipant_version_number: "1",
|
133
|
+
tags: ["a", "b"],
|
134
|
+
branch: branch,
|
135
|
+
contracts: contracts
|
136
|
+
)
|
137
|
+
end
|
138
|
+
|
139
|
+
let(:on_conflict) { "overwrite" }
|
140
|
+
let(:branch) { "main" }
|
141
|
+
let(:contracts) { [contract_1] }
|
142
|
+
let(:contract_1) do
|
143
|
+
ContractToPublish.from_hash(
|
144
|
+
consumer_name: "Foo",
|
145
|
+
provider_name: "Bar",
|
146
|
+
decoded_content: decoded_contract,
|
147
|
+
specification: "pact",
|
148
|
+
on_conflict: on_conflict
|
149
|
+
)
|
150
|
+
end
|
151
|
+
|
152
|
+
let(:contract_hash) { { consumer: { name: "Foo" }, provider: { name: "Bar" }, interactions: [{a: "b"}] } }
|
153
|
+
let(:decoded_contract) { contract_hash.to_json }
|
154
|
+
|
155
|
+
subject { Service.conflict_notices(contracts_to_publish) }
|
156
|
+
|
157
|
+
context "when a pact already exists" do
|
158
|
+
before do
|
159
|
+
allow(PactBroker.configuration).to receive(:allow_dangerous_contract_modification).and_return(allow_dangerous_contract_modification)
|
160
|
+
td.create_pact_with_hierarchy("Foo", "1", "Bar", existing_json_content)
|
161
|
+
end
|
162
|
+
|
163
|
+
let(:existing_json_content) { td.random_json_content("Foo", "Bar") }
|
164
|
+
|
165
|
+
context "when allow_dangerous_contract_modification=false and the pact content is different" do
|
166
|
+
let(:allow_dangerous_contract_modification) { false }
|
167
|
+
|
168
|
+
it "returns errors" do
|
169
|
+
expect(subject).to_not be_empty
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
context "when allow_dangerous_contract_modification=false and the pact content is the same" do
|
174
|
+
let(:allow_dangerous_contract_modification) { false }
|
175
|
+
let(:existing_json_content) { decoded_contract }
|
176
|
+
|
177
|
+
it { is_expected.to be_empty }
|
178
|
+
end
|
179
|
+
|
180
|
+
context "when allow_dangerous_contract_modification=true and the pact content is different" do
|
181
|
+
let(:allow_dangerous_contract_modification) { true }
|
182
|
+
|
183
|
+
it { is_expected.to be_empty }
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
context "when no pacts exist" do
|
188
|
+
it { is_expected.to be_empty }
|
189
|
+
end
|
190
|
+
end
|
127
191
|
end
|
128
192
|
end
|
129
193
|
end
|
@@ -112,12 +112,15 @@ module PactBroker
|
|
112
112
|
end
|
113
113
|
|
114
114
|
it "returns the required verification for the main branch" do
|
115
|
-
expect(subject).to
|
116
|
-
|
115
|
+
expect(subject).to contain_exactly(
|
116
|
+
have_attributes(
|
117
117
|
provider_version: td.find_version("Bar", "1"),
|
118
|
+
provider_version_selectors: contain_exactly(
|
119
|
+
have_attributes(resolved_branch_name: "main", main_branch: true)
|
120
|
+
),
|
118
121
|
provider_version_descriptions: ["latest from main branch"]
|
119
122
|
)
|
120
|
-
|
123
|
+
)
|
121
124
|
end
|
122
125
|
end
|
123
126
|
|
@@ -153,6 +156,7 @@ module PactBroker
|
|
153
156
|
expect(subject).to eq [
|
154
157
|
RequiredVerification.new(
|
155
158
|
provider_version: td.find_version("Bar", "1"),
|
159
|
+
provider_version_selectors: PactBroker::Versions::Selectors.new(PactBroker::Versions::Selector.for_currently_deployed),
|
156
160
|
provider_version_descriptions: ["deployed in test"]
|
157
161
|
)
|
158
162
|
]
|
@@ -193,6 +197,7 @@ module PactBroker
|
|
193
197
|
expect(subject).to eq [
|
194
198
|
RequiredVerification.new(
|
195
199
|
provider_version: td.find_version("Bar", "1"),
|
200
|
+
provider_version_selectors: PactBroker::Versions::Selectors.new(PactBroker::Versions::Selector.for_currently_supported),
|
196
201
|
provider_version_descriptions: ["released in test"]
|
197
202
|
)
|
198
203
|
]
|
@@ -231,15 +236,16 @@ module PactBroker
|
|
231
236
|
end
|
232
237
|
|
233
238
|
it "deduplicates the required versions" do
|
234
|
-
expect(subject).to eq
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
239
|
+
expect(subject.size).to eq 1
|
240
|
+
expect(subject.first.provider_version).to eq td.find_version("Bar", "1")
|
241
|
+
expect(subject.first.provider_version_selectors[0]).to have_attributes(main_branch: true, resolved_branch_name: "main")
|
242
|
+
expect(subject.first.provider_version_selectors[1]).to eq PactBroker::Versions::Selector.for_currently_deployed
|
243
|
+
expect(subject.first.provider_version_selectors[2]).to eq PactBroker::Versions::Selector.for_currently_supported
|
244
|
+
expect(subject.first.provider_version_descriptions).to eq [
|
245
|
+
"latest from main branch",
|
246
|
+
"deployed in test",
|
247
|
+
"released in test"
|
248
|
+
]
|
243
249
|
end
|
244
250
|
end
|
245
251
|
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require "pact_broker/webhooks/trigger_service"
|
2
|
+
require "pact_broker/versions/selectors"
|
3
|
+
require "pact_broker/versions/selector"
|
2
4
|
|
3
5
|
module PactBroker
|
4
6
|
module Webhooks
|
@@ -59,7 +61,8 @@ module PactBroker
|
|
59
61
|
let(:pact) { instance_double(PactBroker::Domain::Pact, consumer: consumer, provider: provider, consumer_version: consumer_version)}
|
60
62
|
let(:consumer_version) { PactBroker::Domain::Version.new(number: "1.2.3") }
|
61
63
|
let(:consumer) { PactBroker::Domain::Pacticipant.new(name: "Consumer") }
|
62
|
-
let(:provider) { PactBroker::Domain::Pacticipant.new(name: "Provider") }
|
64
|
+
let(:provider) { PactBroker::Domain::Pacticipant.new(name: "Provider", main_branch: provider_main_branch) }
|
65
|
+
let(:provider_main_branch) { "main" }
|
63
66
|
let(:webhooks) { [webhook]}
|
64
67
|
let(:webhook) do
|
65
68
|
instance_double(PactBroker::Domain::Webhook,
|
@@ -127,10 +130,14 @@ module PactBroker
|
|
127
130
|
let(:required_verifications) { [required_verification] }
|
128
131
|
let(:required_verification) do
|
129
132
|
instance_double("PactBroker::Verifications::RequiredVerification",
|
130
|
-
provider_version: double("version", number: "1"),
|
133
|
+
provider_version: double("version", number: "1", branch_versions: branch_versions),
|
134
|
+
provider_version_selectors: provider_version_selectors,
|
131
135
|
provider_version_descriptions: ["foo"]
|
132
136
|
)
|
133
137
|
end
|
138
|
+
let(:provider_version_selectors) { [instance_double("PactBroker::Versions::ResolvedSelector", latest_for_main_branch?: latest_for_main_branch, resolved_branch_name: "the-main-branch")] }
|
139
|
+
let(:latest_for_main_branch) { true }
|
140
|
+
let(:branch_versions) { [instance_double("PactBroker::Versions::BranchVersion", branch_name: "main")] }
|
134
141
|
|
135
142
|
it "creates a triggered webhook for each required verification" do
|
136
143
|
expect(webhook_repository).to receive(:create_triggered_webhook).with(
|
@@ -140,7 +147,7 @@ module PactBroker
|
|
140
147
|
verification,
|
141
148
|
TriggerService::RESOURCE_CREATION,
|
142
149
|
PactBroker::Webhooks::WebhookEvent::CONTRACT_REQUIRING_VERIFICATION_PUBLISHED,
|
143
|
-
expected_event_context.merge(provider_version_number: "1", provider_version_descriptions: ["foo"])
|
150
|
+
expected_event_context.merge(provider_version_number: "1", provider_version_branch: "the-main-branch", provider_version_descriptions: ["foo"])
|
144
151
|
)
|
145
152
|
subject
|
146
153
|
end
|
@@ -149,6 +156,63 @@ module PactBroker
|
|
149
156
|
expect(subject.size).to eq 1
|
150
157
|
end
|
151
158
|
|
159
|
+
context "when a version is required because it was the main branch" do
|
160
|
+
it "uses the main branch" do
|
161
|
+
expect(webhook_repository).to receive(:create_triggered_webhook).with(
|
162
|
+
anything,
|
163
|
+
anything,
|
164
|
+
anything,
|
165
|
+
anything,
|
166
|
+
anything,
|
167
|
+
anything,
|
168
|
+
hash_including(provider_version_branch: "the-main-branch")
|
169
|
+
)
|
170
|
+
subject
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
context "when a version was required but not because it was for the main branch" do
|
175
|
+
let(:latest_for_main_branch) { false }
|
176
|
+
|
177
|
+
context "when there are multiple branches" do
|
178
|
+
let(:branch_versions) do
|
179
|
+
[
|
180
|
+
instance_double("PactBroker::Versions::BranchVersion", branch_name: "foo"),
|
181
|
+
instance_double("PactBroker::Versions::BranchVersion", branch_name: "bar")
|
182
|
+
]
|
183
|
+
end
|
184
|
+
it "uses the last branch" do
|
185
|
+
expect(webhook_repository).to receive(:create_triggered_webhook).with(
|
186
|
+
anything,
|
187
|
+
anything,
|
188
|
+
anything,
|
189
|
+
anything,
|
190
|
+
anything,
|
191
|
+
anything,
|
192
|
+
hash_including(provider_version_branch: "bar")
|
193
|
+
)
|
194
|
+
subject
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
context "when there are no branches" do
|
199
|
+
let(:branch_versions) { [] }
|
200
|
+
|
201
|
+
it "uses nil" do
|
202
|
+
expect(webhook_repository).to receive(:create_triggered_webhook).with(
|
203
|
+
anything,
|
204
|
+
anything,
|
205
|
+
anything,
|
206
|
+
anything,
|
207
|
+
anything,
|
208
|
+
anything,
|
209
|
+
hash_including(provider_version_branch: nil)
|
210
|
+
)
|
211
|
+
subject
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
152
216
|
context "when there are no required verifications" do
|
153
217
|
let(:required_verifications) { [] }
|
154
218
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.89.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bethany Skurrie
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2021-10-
|
13
|
+
date: 2021-10-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -1113,6 +1113,8 @@ files:
|
|
1113
1113
|
- lib/pact_broker/versions/latest_version.rb
|
1114
1114
|
- lib/pact_broker/versions/parse_semantic_version.rb
|
1115
1115
|
- lib/pact_broker/versions/repository.rb
|
1116
|
+
- lib/pact_broker/versions/selector.rb
|
1117
|
+
- lib/pact_broker/versions/selectors.rb
|
1116
1118
|
- lib/pact_broker/versions/sequence.rb
|
1117
1119
|
- lib/pact_broker/versions/service.rb
|
1118
1120
|
- lib/pact_broker/webhooks/check_host_whitelist.rb
|
@@ -1277,11 +1279,26 @@ files:
|
|
1277
1279
|
- script/foo-bar.json
|
1278
1280
|
- script/generate-certificates-for-webooks-certificate-spec.rb
|
1279
1281
|
- script/generate-erd
|
1282
|
+
- script/github-issues/add-branch-support-for-provider-versions/issue-text.txt
|
1283
|
+
- script/github-issues/add-branch-support-for-provider-versions/issues.txt
|
1284
|
+
- script/github-issues/add-branch-support-for-provider-versions/raise-issue-in-client-repos.sh
|
1285
|
+
- script/github-issues/add-branch-support/issue-text.txt
|
1286
|
+
- script/github-issues/add-branch-support/issues.txt
|
1287
|
+
- script/github-issues/add-branch-support/raise-issue-in-client-repos.sh
|
1288
|
+
- script/github-issues/branch-consumer-version-selector/issue-text.txt
|
1289
|
+
- script/github-issues/branch-consumer-version-selector/issues.txt
|
1290
|
+
- script/github-issues/branch-consumer-version-selector/raise-issue-in-client-repos.sh
|
1291
|
+
- script/github-issues/consumer-version-selectors-docs/issue-text.txt
|
1292
|
+
- script/github-issues/consumer-version-selectors-docs/issues.txt
|
1293
|
+
- script/github-issues/consumer-version-selectors-docs/raise-issue-in-client-repos.sh
|
1294
|
+
- script/github-issues/deployed-and-released-selectors-docs/issue-text.txt
|
1295
|
+
- script/github-issues/deployed-and-released-selectors-docs/issues.txt
|
1296
|
+
- script/github-issues/deployed-and-released-selectors-docs/raise-issue-in-client-repos.sh
|
1297
|
+
- script/github-issues/include-pending-by-default/issue-text.txt
|
1298
|
+
- script/github-issues/include-pending-by-default/issues.txt
|
1299
|
+
- script/github-issues/include-pending-by-default/raise-issue-in-client-repos.sh
|
1280
1300
|
- script/import-pg-database.sh
|
1281
1301
|
- script/insert-self-signed-certificate-from-url.rb
|
1282
|
-
- script/issues/consumer-version-selectors-docs/issue-text.txt
|
1283
|
-
- script/issues/consumer-version-selectors-docs/issues.txt
|
1284
|
-
- script/issues/consumer-version-selectors-docs/raise-issue-in-client-repos.sh
|
1285
1302
|
- script/prod/clean-up.sql
|
1286
1303
|
- script/prod/migrate-latest-pacts.sh
|
1287
1304
|
- script/prod/redact-data.sql
|