pact_broker 2.35.0 → 2.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -0
- data/db/migrations/000029_create_latest_tagged_pact_publications.rb +2 -0
- data/lib/pact_broker/api.rb +3 -0
- data/lib/pact_broker/api/decorators/extended_pact_decorator.rb +42 -0
- data/lib/pact_broker/api/decorators/extended_verification_decorator.rb +16 -0
- data/lib/pact_broker/api/decorators/pact_decorator.rb +6 -3
- data/lib/pact_broker/api/decorators/verification_decorator.rb +4 -0
- data/lib/pact_broker/api/pact_broker_urls.rb +12 -0
- data/lib/pact_broker/api/resources/dashboard.rb +1 -3
- data/lib/pact_broker/api/resources/index.rb +5 -0
- data/lib/pact_broker/api/resources/latest_verification_for_pact.rb +19 -0
- data/lib/pact_broker/api/resources/latest_verifications_for_consumer_version.rb +0 -1
- data/lib/pact_broker/api/resources/metrics.rb +21 -0
- data/lib/pact_broker/api/resources/pact.rb +8 -1
- data/lib/pact_broker/api/resources/pact_versions.rb +0 -1
- data/lib/pact_broker/api/resources/verification.rb +14 -1
- data/lib/pact_broker/domain/pact.rb +1 -2
- data/lib/pact_broker/domain/verification.rb +5 -3
- data/lib/pact_broker/index/service.rb +16 -1
- data/lib/pact_broker/matrix/aggregated_row.rb +14 -1
- data/lib/pact_broker/matrix/repository.rb +29 -25
- data/lib/pact_broker/matrix/resolved_selector.rb +3 -1
- data/lib/pact_broker/matrix/row.rb +6 -2
- data/lib/pact_broker/metrics/service.rb +56 -0
- data/lib/pact_broker/pacts/all_pact_publications.rb +8 -1
- data/lib/pact_broker/pacts/pact_publication.rb +9 -2
- data/lib/pact_broker/services.rb +5 -0
- data/lib/pact_broker/ui/views/index/show-with-tags.haml +2 -2
- data/lib/pact_broker/ui/views/matrix/show.haml +2 -2
- data/lib/pact_broker/verifications/repository.rb +4 -0
- data/lib/pact_broker/verifications/service.rb +4 -0
- data/lib/pact_broker/version.rb +1 -1
- data/public/javascripts/clipboard.js +2 -2
- data/spec/features/get_latest_verification_for_pact_spec.rb +42 -0
- data/spec/features/get_pact_versions_spec.rb +0 -5
- data/spec/features/metrics_spec.rb +23 -0
- data/spec/lib/pact_broker/api/decorators/extended_pact_decorator_spec.rb +61 -0
- data/spec/lib/pact_broker/api/decorators/pact_decorator_spec.rb +2 -1
- data/spec/lib/pact_broker/api/decorators/verification_decorator_spec.rb +4 -1
- data/spec/lib/pact_broker/api/decorators/verification_summary_decorator_spec.rb +3 -1
- data/spec/lib/pact_broker/index/service_spec.rb +29 -4
- data/spec/lib/pact_broker/matrix/aggregated_row_spec.rb +23 -2
- data/spec/lib/pact_broker/matrix/deployment_status_summary_spec.rb +2 -0
- data/spec/lib/pact_broker/matrix/repository_query_limit_spec.rb +44 -0
- data/spec/lib/pact_broker/pacts/pact_publication_spec.rb +21 -3
- metadata +15 -2
@@ -5,7 +5,6 @@ module PactBroker
|
|
5
5
|
module Api
|
6
6
|
module Decorators
|
7
7
|
describe PactDecorator do
|
8
|
-
|
9
8
|
before do
|
10
9
|
allow(decorator).to receive(:templated_diff_url).and_return('templated-diff-url')
|
11
10
|
allow(decorator).to receive(:verification_publication_url).and_return('verification-publication-url')
|
@@ -25,7 +24,9 @@ module PactBroker
|
|
25
24
|
content_hash: content_hash,
|
26
25
|
created_at: created_at,
|
27
26
|
consumer: consumer,
|
27
|
+
consumer_name: consumer.name,
|
28
28
|
provider: provider,
|
29
|
+
provider_name: provider.name,
|
29
30
|
consumer_version: consumer_version,
|
30
31
|
consumer_version_number: '1234',
|
31
32
|
pact_version_sha: '9999',
|
@@ -19,7 +19,8 @@ module PactBroker
|
|
19
19
|
build_url: 'http://build-url',
|
20
20
|
pact_version_sha: '1234',
|
21
21
|
latest_pact_publication: pact_publication,
|
22
|
-
execution_date: DateTime.now
|
22
|
+
execution_date: DateTime.now,
|
23
|
+
provider_version_tags: provider_version_tags)
|
23
24
|
end
|
24
25
|
|
25
26
|
let(:pact_publication) do
|
@@ -31,6 +32,8 @@ module PactBroker
|
|
31
32
|
)
|
32
33
|
end
|
33
34
|
|
35
|
+
let(:provider_version_tags) { [instance_double(PactBroker::Tags::TagWithLatestFlag, name: 'prod', latest?: true)] }
|
36
|
+
|
34
37
|
let(:options) { { user_options: { base_url: 'http://example.org' } } }
|
35
38
|
|
36
39
|
let(:json) { VerificationDecorator.new(verification).to_json(options) }
|
@@ -20,12 +20,14 @@ module PactBroker
|
|
20
20
|
pact_version_sha: '1234',
|
21
21
|
latest_pact_publication: pact,
|
22
22
|
test_results: nil,
|
23
|
-
execution_date: DateTime.now
|
23
|
+
execution_date: DateTime.now,
|
24
|
+
provider_version_tags: provider_version_tags)
|
24
25
|
end
|
25
26
|
let(:pact_version) do
|
26
27
|
instance_double("PactBroker::Pacts::PactVersion", name: 'Name')
|
27
28
|
end
|
28
29
|
|
30
|
+
let(:provider_version_tags) { [instance_double(PactBroker::Tags::TagWithLatestFlag, name: 'prod', latest?: true)] }
|
29
31
|
let(:pact) { instance_double("PactBroker::Domain::Pact", name: "Some pact", consumer_name: "Foo", provider_name: "Bar", consumer_version_number: "1.2.3") }
|
30
32
|
let(:options) { {base_url: 'http://example.org', consumer_name: "Foo", consumer_version_number: "1.2.3", resource_url: "http://self"} }
|
31
33
|
|
@@ -233,10 +233,35 @@ module PactBroker
|
|
233
233
|
|
234
234
|
let(:options) { { tags: true } }
|
235
235
|
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
236
|
+
context "with tags=true" do
|
237
|
+
it "returns the tags for the pacts" do
|
238
|
+
expect(rows.last.tag_names.sort).to eq ["feat-x", "feat-y"]
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
context "with tags=false" do
|
243
|
+
let(:options) { { tags: false } }
|
244
|
+
|
245
|
+
it "does not return the tags for the pacts" do
|
246
|
+
expect(rows.last.tag_names.sort).to eq []
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
context "with dashboard=true" do
|
251
|
+
let(:options) { { dashboard: true } }
|
252
|
+
|
253
|
+
it "returns the latest verification as nil as the pact version itself has not been verified" do
|
254
|
+
expect(rows.last.provider_version_number).to be nil
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
context "with dashboard=false" do
|
259
|
+
let(:options) { { } }
|
260
|
+
|
261
|
+
it "returns the latest of the feat-x and feat-y verifications because we are summarising the entire integration (backwards compat for OSS index)" do
|
262
|
+
expect(rows.last.consumer_version_number).to eq "4"
|
263
|
+
expect(rows.last.provider_version_number).to eq "2"
|
264
|
+
end
|
240
265
|
end
|
241
266
|
end
|
242
267
|
end
|
@@ -3,7 +3,7 @@ require 'pact_broker/matrix/aggregated_row'
|
|
3
3
|
module PactBroker
|
4
4
|
module Matrix
|
5
5
|
describe AggregatedRow do
|
6
|
-
describe "
|
6
|
+
describe "latest_verification_for_pseudo_branch" do
|
7
7
|
let(:row_1) do
|
8
8
|
instance_double('PactBroker::Matrix::HeadRow',
|
9
9
|
consumer_name: "Foo",
|
@@ -27,7 +27,7 @@ module PactBroker
|
|
27
27
|
let(:rows) { [row_1, row_2] }
|
28
28
|
let(:aggregated_row) { AggregatedRow.new(rows) }
|
29
29
|
|
30
|
-
subject { aggregated_row.
|
30
|
+
subject { aggregated_row.latest_verification_for_pseudo_branch }
|
31
31
|
|
32
32
|
context "when the rows have verifications" do
|
33
33
|
it "returns the verification with the largest id" do
|
@@ -74,6 +74,27 @@ module PactBroker
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
77
|
+
|
78
|
+
describe "latest_verification_for_pact_version" do
|
79
|
+
let(:row_1) do
|
80
|
+
instance_double('PactBroker::Matrix::HeadRow',
|
81
|
+
verification: verification_1)
|
82
|
+
end
|
83
|
+
let(:row_2) do
|
84
|
+
instance_double('PactBroker::Matrix::HeadRow',
|
85
|
+
verification: verification_2)
|
86
|
+
end
|
87
|
+
let(:verification_1) { instance_double('PactBroker::Domain::Verification', id: 2) }
|
88
|
+
let(:verification_2) { instance_double('PactBroker::Domain::Verification', id: 1) }
|
89
|
+
let(:rows) { [row_1, row_2] }
|
90
|
+
let(:aggregated_row) { AggregatedRow.new(rows) }
|
91
|
+
|
92
|
+
subject { aggregated_row.latest_verification_for_pact_version }
|
93
|
+
|
94
|
+
it "returns the verification with the largest id" do
|
95
|
+
expect(subject.id).to eq 2
|
96
|
+
end
|
97
|
+
end
|
77
98
|
end
|
78
99
|
end
|
79
100
|
end
|
@@ -190,6 +190,8 @@ module PactBroker
|
|
190
190
|
pacticipant_name: "Bar",
|
191
191
|
pacticipant_version_id: 10,
|
192
192
|
pacticipant_version_number: "14131c5da3abf323ccf410b1b619edac76231243",
|
193
|
+
pact_publication_ids: [],
|
194
|
+
verification_ids: [],
|
193
195
|
latest: nil,
|
194
196
|
tag: nil,
|
195
197
|
type: :inferred
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'pact_broker/matrix/repository'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Matrix
|
5
|
+
describe Repository do
|
6
|
+
# See https://github.com/pact-foundation/pact_broker-client/issues/53
|
7
|
+
# The problem occurs when a pact has so many verifications for the same provider
|
8
|
+
# version that relevant rows do get returned in the result set because the specified limit
|
9
|
+
# causes them to be truncated.
|
10
|
+
# The most elegant solution is to create views have the data already grouped by
|
11
|
+
# consumer version/provider version, consumer version/provider, and consumer/provider,
|
12
|
+
# however, I don't have the time to work out how to make that view query efficient - I suspect
|
13
|
+
# it will require lots of full table scans, as it will have to work out the latest pact revision
|
14
|
+
# and latest verification for each pact publication and I'm not sure if it will have to do it
|
15
|
+
# for the entire table, or whether it will apply the consumer/provider filters...
|
16
|
+
# The quick and dirty solution is to do a pre-query to get the latest pact revision and latest
|
17
|
+
# verifications for the pact versions before we do the matrix query.
|
18
|
+
describe "Querying for can-i-deploy when there are more matrix rows than the specified query limit" do
|
19
|
+
before do
|
20
|
+
td.create_consumer("Foo")
|
21
|
+
.create_provider("Bar")
|
22
|
+
.create_consumer_version("1")
|
23
|
+
.create_pact
|
24
|
+
.create_verification(number: 1, provider_version: "2", tag_names: ['staging'])
|
25
|
+
.create_verification(number: 2, provider_version: "2")
|
26
|
+
.create_verification(number: 3, provider_version: "2")
|
27
|
+
.create_verification(number: 4, provider_version: "2")
|
28
|
+
.create_verification(number: 5, provider_version: "3")
|
29
|
+
.create_provider("Wiffle")
|
30
|
+
.create_pact
|
31
|
+
.create_verification(number: 1, provider_version: "6", tag_names: ['staging'])
|
32
|
+
end
|
33
|
+
|
34
|
+
let(:path) { "/matrix?q[][pacticipant]=Foo&q[][version]=1&tag=staging&latestby=cvp&limit=2" }
|
35
|
+
|
36
|
+
subject { get(path) }
|
37
|
+
|
38
|
+
it "does not remove relevant rows from the query due to the specified limit" do
|
39
|
+
expect(JSON.parse(subject.body)['summary']['deployable']).to be true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -64,7 +64,25 @@ module PactBroker
|
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
-
describe "#
|
67
|
+
describe "#consumer_version_tags" do
|
68
|
+
before do
|
69
|
+
td.create_pact_with_hierarchy("Foo", "1.2.3", "Bar")
|
70
|
+
.create_consumer_version_tag("no")
|
71
|
+
.create_consumer_version("3.4.5")
|
72
|
+
.create_consumer_version_tag("yes")
|
73
|
+
.create_pact
|
74
|
+
.create_consumer_version("5.6.7")
|
75
|
+
.create_consumer_version_tag("no")
|
76
|
+
end
|
77
|
+
|
78
|
+
let(:pact_publication) { PactPublication.find(id: td.pact.id) }
|
79
|
+
|
80
|
+
it "" do
|
81
|
+
expect(pact_publication.consumer_version_tags.collect(&:name)).to eq ["yes"]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "#head_tag_names" do
|
68
86
|
before do
|
69
87
|
td.create_pact_with_hierarchy("Foo", "1.2.3", "Bar")
|
70
88
|
.create_consumer_version_tag("no")
|
@@ -80,13 +98,13 @@ module PactBroker
|
|
80
98
|
|
81
99
|
context "when the pact is the latest for a tag" do
|
82
100
|
it "returns the relevant tag names" do
|
83
|
-
expect(pact_publication.
|
101
|
+
expect(pact_publication.head_tag_names).to eq ["yes"]
|
84
102
|
end
|
85
103
|
end
|
86
104
|
|
87
105
|
context "when the pact is not the latest for a tag" do
|
88
106
|
it "returns the relevant tag names" do
|
89
|
-
expect(pact_publication.
|
107
|
+
expect(pact_publication.head_tag_names).to eq ["yes"]
|
90
108
|
end
|
91
109
|
end
|
92
110
|
end
|
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.36.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: 2019-08-
|
13
|
+
date: 2019-08-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -784,6 +784,8 @@ files:
|
|
784
784
|
- lib/pact_broker/api/decorators/embedded_label_decorator.rb
|
785
785
|
- lib/pact_broker/api/decorators/embedded_tag_decorator.rb
|
786
786
|
- lib/pact_broker/api/decorators/embedded_version_decorator.rb
|
787
|
+
- lib/pact_broker/api/decorators/extended_pact_decorator.rb
|
788
|
+
- lib/pact_broker/api/decorators/extended_verification_decorator.rb
|
787
789
|
- lib/pact_broker/api/decorators/format_date_time.rb
|
788
790
|
- lib/pact_broker/api/decorators/integration_decorator.rb
|
789
791
|
- lib/pact_broker/api/decorators/integrations_decorator.rb
|
@@ -838,10 +840,12 @@ files:
|
|
838
840
|
- lib/pact_broker/api/resources/latest_pact.rb
|
839
841
|
- lib/pact_broker/api/resources/latest_pacts.rb
|
840
842
|
- lib/pact_broker/api/resources/latest_provider_pacts.rb
|
843
|
+
- lib/pact_broker/api/resources/latest_verification_for_pact.rb
|
841
844
|
- lib/pact_broker/api/resources/latest_verifications_for_consumer_version.rb
|
842
845
|
- lib/pact_broker/api/resources/matrix.rb
|
843
846
|
- lib/pact_broker/api/resources/matrix_badge.rb
|
844
847
|
- lib/pact_broker/api/resources/matrix_for_consumer_and_provider.rb
|
848
|
+
- lib/pact_broker/api/resources/metrics.rb
|
845
849
|
- lib/pact_broker/api/resources/pact.rb
|
846
850
|
- lib/pact_broker/api/resources/pact_content_diff.rb
|
847
851
|
- lib/pact_broker/api/resources/pact_triggered_webhooks.rb
|
@@ -974,6 +978,7 @@ files:
|
|
974
978
|
- lib/pact_broker/matrix/row.rb
|
975
979
|
- lib/pact_broker/matrix/service.rb
|
976
980
|
- lib/pact_broker/messages.rb
|
981
|
+
- lib/pact_broker/metrics/service.rb
|
977
982
|
- lib/pact_broker/pacticipants/find_potential_duplicate_pacticipant_names.rb
|
978
983
|
- lib/pact_broker/pacticipants/repository.rb
|
979
984
|
- lib/pact_broker/pacticipants/service.rb
|
@@ -1194,6 +1199,7 @@ files:
|
|
1194
1199
|
- spec/features/get_latest_tagged_pact_spec.rb
|
1195
1200
|
- spec/features/get_latest_untagged_pact_badge_spec.rb
|
1196
1201
|
- spec/features/get_latest_untagged_pact_spec.rb
|
1202
|
+
- spec/features/get_latest_verification_for_pact_spec.rb
|
1197
1203
|
- spec/features/get_matrix_badge_spec.rb
|
1198
1204
|
- spec/features/get_matrix_for_consumer_and_provider_spec.rb
|
1199
1205
|
- spec/features/get_matrix_spec.rb
|
@@ -1213,6 +1219,7 @@ files:
|
|
1213
1219
|
- spec/features/get_wip_provider_pacts_spec.rb
|
1214
1220
|
- spec/features/label_pacticipant_spec.rb
|
1215
1221
|
- spec/features/merge_pact_spec.rb
|
1222
|
+
- spec/features/metrics_spec.rb
|
1216
1223
|
- spec/features/publish_not_a_pact_spec.rb
|
1217
1224
|
- spec/features/publish_pact_spec.rb
|
1218
1225
|
- spec/features/publish_verification_spec.rb
|
@@ -1256,6 +1263,7 @@ files:
|
|
1256
1263
|
- spec/lib/pact_broker/api/decorators/embedded_label_decorator_spec.rb
|
1257
1264
|
- spec/lib/pact_broker/api/decorators/embedded_tag_decorator_spec.rb
|
1258
1265
|
- spec/lib/pact_broker/api/decorators/embedded_version_decorator_spec.rb
|
1266
|
+
- spec/lib/pact_broker/api/decorators/extended_pact_decorator_spec.rb
|
1259
1267
|
- spec/lib/pact_broker/api/decorators/integration_decorator_spec.rb
|
1260
1268
|
- spec/lib/pact_broker/api/decorators/integrations_decorator_spec.rb
|
1261
1269
|
- spec/lib/pact_broker/api/decorators/label_decorator_spec.rb
|
@@ -1353,6 +1361,7 @@ files:
|
|
1353
1361
|
- spec/lib/pact_broker/matrix/integration_spec.rb
|
1354
1362
|
- spec/lib/pact_broker/matrix/parse_query_spec.rb
|
1355
1363
|
- spec/lib/pact_broker/matrix/repository_dependency_spec.rb
|
1364
|
+
- spec/lib/pact_broker/matrix/repository_query_limit_spec.rb
|
1356
1365
|
- spec/lib/pact_broker/matrix/repository_spec.rb
|
1357
1366
|
- spec/lib/pact_broker/matrix/row_spec.rb
|
1358
1367
|
- spec/lib/pact_broker/matrix/service_spec.rb
|
@@ -1546,6 +1555,7 @@ test_files:
|
|
1546
1555
|
- spec/features/get_latest_tagged_pact_spec.rb
|
1547
1556
|
- spec/features/get_latest_untagged_pact_badge_spec.rb
|
1548
1557
|
- spec/features/get_latest_untagged_pact_spec.rb
|
1558
|
+
- spec/features/get_latest_verification_for_pact_spec.rb
|
1549
1559
|
- spec/features/get_matrix_badge_spec.rb
|
1550
1560
|
- spec/features/get_matrix_for_consumer_and_provider_spec.rb
|
1551
1561
|
- spec/features/get_matrix_spec.rb
|
@@ -1565,6 +1575,7 @@ test_files:
|
|
1565
1575
|
- spec/features/get_wip_provider_pacts_spec.rb
|
1566
1576
|
- spec/features/label_pacticipant_spec.rb
|
1567
1577
|
- spec/features/merge_pact_spec.rb
|
1578
|
+
- spec/features/metrics_spec.rb
|
1568
1579
|
- spec/features/publish_not_a_pact_spec.rb
|
1569
1580
|
- spec/features/publish_pact_spec.rb
|
1570
1581
|
- spec/features/publish_verification_spec.rb
|
@@ -1608,6 +1619,7 @@ test_files:
|
|
1608
1619
|
- spec/lib/pact_broker/api/decorators/embedded_label_decorator_spec.rb
|
1609
1620
|
- spec/lib/pact_broker/api/decorators/embedded_tag_decorator_spec.rb
|
1610
1621
|
- spec/lib/pact_broker/api/decorators/embedded_version_decorator_spec.rb
|
1622
|
+
- spec/lib/pact_broker/api/decorators/extended_pact_decorator_spec.rb
|
1611
1623
|
- spec/lib/pact_broker/api/decorators/integration_decorator_spec.rb
|
1612
1624
|
- spec/lib/pact_broker/api/decorators/integrations_decorator_spec.rb
|
1613
1625
|
- spec/lib/pact_broker/api/decorators/label_decorator_spec.rb
|
@@ -1705,6 +1717,7 @@ test_files:
|
|
1705
1717
|
- spec/lib/pact_broker/matrix/integration_spec.rb
|
1706
1718
|
- spec/lib/pact_broker/matrix/parse_query_spec.rb
|
1707
1719
|
- spec/lib/pact_broker/matrix/repository_dependency_spec.rb
|
1720
|
+
- spec/lib/pact_broker/matrix/repository_query_limit_spec.rb
|
1708
1721
|
- spec/lib/pact_broker/matrix/repository_spec.rb
|
1709
1722
|
- spec/lib/pact_broker/matrix/row_spec.rb
|
1710
1723
|
- spec/lib/pact_broker/matrix/service_spec.rb
|