pact_broker 2.35.0 → 2.36.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|