pact_broker 2.51.0 → 2.52.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 +26 -0
- data/db/migrations/20200318_add_created_at_to_latest_pact_publications.rb +9 -0
- data/db/migrations/20200319_add_created_at_to_latest_verifications.rb +9 -0
- data/lib/pact_broker/api/contracts/dry_validation_predicates.rb +4 -0
- data/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema.rb +26 -1
- data/lib/pact_broker/api/contracts/verifiable_pacts_query_schema.rb +2 -0
- data/lib/pact_broker/api/decorators/matrix_text_decorator.rb +1 -1
- data/lib/pact_broker/api/decorators/verifiable_pacts_query_decorator.rb +1 -0
- data/lib/pact_broker/api/pact_broker_urls.rb +11 -0
- data/lib/pact_broker/api/renderers/html_pact_renderer.rb +1 -1
- data/lib/pact_broker/db/data_migrations/set_created_at_for_latest_pact_publications.rb +25 -0
- data/lib/pact_broker/db/data_migrations/set_created_at_for_latest_verifications.rb +24 -0
- data/lib/pact_broker/db/migrate_data.rb +2 -0
- data/lib/pact_broker/matrix/every_row.rb +11 -5
- data/lib/pact_broker/matrix/parse_query.rb +6 -0
- data/lib/pact_broker/matrix/query_builder.rb +28 -16
- data/lib/pact_broker/matrix/query_results_with_deployment_status_summary.rb +15 -4
- data/lib/pact_broker/matrix/quick_row.rb +49 -65
- data/lib/pact_broker/matrix/repository.rb +2 -12
- data/lib/pact_broker/matrix/resolved_selector.rb +1 -1
- data/lib/pact_broker/matrix/service.rb +1 -1
- data/lib/pact_broker/pacts/pact_publication.rb +8 -0
- data/lib/pact_broker/pacts/repository.rb +10 -11
- data/lib/pact_broker/pacts/selector.rb +21 -0
- data/lib/pact_broker/pacts/verifiable_pact_messages.rb +5 -1
- data/lib/pact_broker/test/test_data_builder.rb +6 -0
- data/lib/pact_broker/ui/view_models/matrix_line.rb +8 -0
- data/lib/pact_broker/ui/views/matrix/show.haml +4 -4
- data/lib/pact_broker/verifications/repository.rb +2 -1
- data/lib/pact_broker/version.rb +1 -1
- data/lib/rack/pact_broker/request_target.rb +1 -1
- data/pact_broker.gemspec +1 -1
- data/public/javascripts/matrix.js +20 -8
- data/script/docker/db-restore.sh +1 -1
- data/spec/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema_spec.rb +43 -2
- data/spec/lib/pact_broker/api/contracts/verifiable_pacts_query_schema_spec.rb +13 -0
- data/spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb +11 -2
- data/spec/lib/pact_broker/api/renderers/html_pact_renderer_spec.rb +2 -1
- data/spec/lib/pact_broker/matrix/every_row_spec.rb +0 -10
- data/spec/lib/pact_broker/matrix/quick_row_spec.rb +11 -11
- data/spec/lib/pact_broker/matrix/repository_dependency_spec.rb +1 -1
- data/spec/lib/pact_broker/matrix/repository_spec.rb +9 -9
- data/spec/lib/pact_broker/pacts/repository_find_for_verification_spec.rb +43 -1
- data/spec/lib/pact_broker/pacts/repository_spec.rb +9 -0
- data/spec/lib/pact_broker/pacts/selector_spec.rb +5 -2
- data/spec/lib/pact_broker/pacts/verifiable_pact_messages_spec.rb +6 -0
- data/spec/lib/pact_broker/verifications/repository_spec.rb +21 -0
- metadata +10 -12
@@ -12,7 +12,7 @@ module PactBroker
|
|
12
12
|
ENV['TZ'] = "Australia/Melbourne"
|
13
13
|
PactBroker.configuration.enable_public_badge_access = true
|
14
14
|
allow(PactBroker::Api::PactBrokerUrls).to receive(:pact_url).with('http://base', pact).and_return(pact_url)
|
15
|
-
allow(PactBroker::Api::PactBrokerUrls).to receive(:
|
15
|
+
allow(PactBroker::Api::PactBrokerUrls).to receive(:matrix_for_pact_url).with(pact, 'http://base').and_return(matrix_url)
|
16
16
|
allow_any_instance_of(HtmlPactRenderer).to receive(:logger).and_return(logger)
|
17
17
|
|
18
18
|
Timecop.freeze(created_at + 3)
|
@@ -95,6 +95,7 @@ module PactBroker
|
|
95
95
|
before do
|
96
96
|
allow(pact).to receive(:content_hash).and_return(content_hash)
|
97
97
|
end
|
98
|
+
|
98
99
|
let(:json_content) { '[1]' }
|
99
100
|
let(:content_hash) { [1] }
|
100
101
|
|
@@ -8,13 +8,6 @@ module PactBroker
|
|
8
8
|
let(:bar) { PactBroker::Domain::Pacticipant.where(name: "Bar").single_record }
|
9
9
|
let(:wiffle) { PactBroker::Domain::Pacticipant.where(name: "Wiffle").single_record }
|
10
10
|
|
11
|
-
describe "ALL_COLUMNS" do
|
12
|
-
it "has the same first column as QuickRow - this is required so that they both sort the same" do
|
13
|
-
expect(EveryRow::ALL_COLUMNS.first).to eq QuickRow::LAST_ACTION_DATE
|
14
|
-
expect(EveryRow::ALL_COLUMNS.first).to eq QuickRow::ALL_COLUMNS.first
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
11
|
describe "matching_selectors" do
|
19
12
|
before do
|
20
13
|
td.create_pact_with_verification("Foo", "1", "Bar", "2")
|
@@ -58,7 +51,6 @@ module PactBroker
|
|
58
51
|
EveryRow
|
59
52
|
.select_all_columns
|
60
53
|
.join_verifications
|
61
|
-
.join_pacticipants_and_pacticipant_versions
|
62
54
|
.eager_all_the_things
|
63
55
|
.all
|
64
56
|
end
|
@@ -99,7 +91,6 @@ module PactBroker
|
|
99
91
|
EveryRow
|
100
92
|
.select_all_columns
|
101
93
|
.join_verifications
|
102
|
-
.join_pacticipants_and_pacticipant_versions
|
103
94
|
.all
|
104
95
|
end
|
105
96
|
|
@@ -129,7 +120,6 @@ module PactBroker
|
|
129
120
|
EveryRow
|
130
121
|
.select_all_columns
|
131
122
|
.join_verifications_for(query_ids)
|
132
|
-
.join_pacticipants_and_pacticipant_versions
|
133
123
|
.all
|
134
124
|
end
|
135
125
|
|
@@ -38,20 +38,20 @@ module PactBroker
|
|
38
38
|
before do
|
39
39
|
td.create_consumer("Foo")
|
40
40
|
.create_provider("Bar")
|
41
|
-
.create_consumer_version("10"
|
42
|
-
.create_pact
|
43
|
-
.create_verification(provider_version: "2", created_at:
|
44
|
-
.create_consumer_version("3"
|
45
|
-
.create_pact
|
46
|
-
.create_verification(provider_version: "2")
|
41
|
+
.create_consumer_version("10")
|
42
|
+
.create_pact(created_at: day_1)
|
43
|
+
.create_verification(provider_version: "2", created_at: day_3)
|
44
|
+
.create_consumer_version("3")
|
45
|
+
.create_pact(created_at: day_2)
|
46
|
+
.create_verification(provider_version: "2", created_at: day_3)
|
47
47
|
end
|
48
48
|
|
49
|
-
let(:
|
50
|
-
let(:
|
51
|
-
let(:
|
49
|
+
let(:day_1) { DateTime.now + 1 }
|
50
|
+
let(:day_2) { DateTime.now + 2 }
|
51
|
+
let(:day_3) { DateTime.now + 3 }
|
52
52
|
|
53
|
-
|
54
|
-
|
53
|
+
it "orders by the pact publication id desc" do
|
54
|
+
expect(subject.first.last_action_date).to eq subject.last.last_action_date
|
55
55
|
expect(subject.first.consumer_version_number).to eq "3"
|
56
56
|
expect(subject.last.consumer_version_number).to eq "10"
|
57
57
|
end
|
@@ -359,8 +359,8 @@ module PactBroker
|
|
359
359
|
|
360
360
|
it "returns a row for each verification for that version" do
|
361
361
|
expect(subject.size).to eq 2
|
362
|
-
expect(subject.collect
|
363
|
-
expect(subject.collect
|
362
|
+
expect(subject.collect(&:consumer_version_number).sort).to eq ["1.2.3", "1.2.3"]
|
363
|
+
expect(subject.collect(&:provider_version_number).sort).to eq ["4.5.6", "6.7.8"]
|
364
364
|
end
|
365
365
|
end
|
366
366
|
|
@@ -376,8 +376,8 @@ module PactBroker
|
|
376
376
|
let(:selectors) { build_selectors("A" => nil) }
|
377
377
|
|
378
378
|
it "returns a row for each verification for the pacticipant" do
|
379
|
-
expect(subject.collect
|
380
|
-
provider_version_numbers = subject.collect
|
379
|
+
expect(subject.collect(&:consumer_name).uniq).to eq ["A"]
|
380
|
+
provider_version_numbers = subject.collect(&:provider_version_number)
|
381
381
|
expect(provider_version_numbers).to include nil
|
382
382
|
expect(provider_version_numbers).to include "4.5.6"
|
383
383
|
end
|
@@ -398,8 +398,8 @@ module PactBroker
|
|
398
398
|
|
399
399
|
it "returns a row for each verification for that version" do
|
400
400
|
expect(subject.size).to eq 2
|
401
|
-
expect(subject.collect
|
402
|
-
expect(subject.collect
|
401
|
+
expect(subject.collect(&:consumer_version_number).sort).to eq ["1.2.3", "3.4.5"]
|
402
|
+
expect(subject.collect(&:provider_version_number).sort).to eq ["4.5.6", "4.5.6"]
|
403
403
|
end
|
404
404
|
end
|
405
405
|
|
@@ -422,8 +422,8 @@ module PactBroker
|
|
422
422
|
|
423
423
|
it "returns a row for each verification for that version" do
|
424
424
|
expect(subject.size).to eq 3
|
425
|
-
expect(subject.collect
|
426
|
-
expect(subject.collect
|
425
|
+
expect(subject.collect(&:consumer_version_number).sort).to eq ["1.2.3", "3.4.5", "3.4.5"]
|
426
|
+
expect(subject.collect(&:provider_version_number).sort).to eq ["4.5.6", "4.5.6", "6.7.8"]
|
427
427
|
end
|
428
428
|
end
|
429
429
|
|
@@ -565,7 +565,7 @@ module PactBroker
|
|
565
565
|
|
566
566
|
it "returns all matching rows" do
|
567
567
|
# postgres orders differently, and ruby array sort blows up with a nil string
|
568
|
-
provider_version_numbers = subject.collect
|
568
|
+
provider_version_numbers = subject.collect(&:provider_version_number)
|
569
569
|
expect(provider_version_numbers).to include nil
|
570
570
|
expect(provider_version_numbers).to include "2.0.0"
|
571
571
|
expect(provider_version_numbers.size).to eq 2
|
@@ -72,6 +72,17 @@ module PactBroker
|
|
72
72
|
it "sets the latest_consumer_version_tag_names" do
|
73
73
|
expect(find_by_consumer_version_number("foo-latest-prod-version").selectors.collect(&:tag)).to eq ['prod']
|
74
74
|
end
|
75
|
+
|
76
|
+
context "when a consumer name is specified", pending: "not yet implemented, but will do" do
|
77
|
+
let(:consumer_version_selectors) do
|
78
|
+
Selectors.new(Selector.all_for_tag_and_consumer('prod', 'Foo'))
|
79
|
+
end
|
80
|
+
|
81
|
+
it "only returns the pacts for that consumer" do
|
82
|
+
expect(subject.size).to eq 3
|
83
|
+
expect(find_by_consumer_version_number("foo-latest-prod-version").selectors).to eq [Selector.all_for_tag_and_consumer('prod', 'Foo')]
|
84
|
+
end
|
85
|
+
end
|
75
86
|
end
|
76
87
|
|
77
88
|
context "when all versions with a given tag are requested" do
|
@@ -99,7 +110,38 @@ module PactBroker
|
|
99
110
|
td.create_consumer_version("prod-version-3", tag_names: %w[prod])
|
100
111
|
.republish_same_pact
|
101
112
|
expect(subject.size).to be 2
|
102
|
-
expect(subject.collect(&:consumer_version_number)).to eq %w[prod-version-1 prod-version-3]
|
113
|
+
expect(subject.collect(&:consumer_version_number).sort).to eq %w[prod-version-1 prod-version-3]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context "when all versions with a given tag for a given consumer are requested" do
|
118
|
+
before do
|
119
|
+
td.create_pact_with_hierarchy("Foo2", "prod-version-1", "Bar2")
|
120
|
+
.create_consumer_version_tag("prod")
|
121
|
+
.create_consumer_version("not-prod-version", tag_names: %w[master])
|
122
|
+
.create_pact
|
123
|
+
.create_consumer_version("prod-version-2", tag_names: %w[prod])
|
124
|
+
.create_pact
|
125
|
+
.create_consumer("Foo3")
|
126
|
+
.create_consumer_version("prod-version-3", tag_names: %w[prod])
|
127
|
+
.create_pact
|
128
|
+
end
|
129
|
+
|
130
|
+
let(:consumer_version_selectors) { Selectors.new(pact_selector_1) }
|
131
|
+
let(:pact_selector_1) { Selector.all_for_tag_and_consumer('prod', "Foo2") }
|
132
|
+
|
133
|
+
subject { Repository.new.find_for_verification("Bar2", consumer_version_selectors) }
|
134
|
+
|
135
|
+
it "returns all the versions with the specified tag and consumer" do
|
136
|
+
expect(subject.size).to be 2
|
137
|
+
expect(find_by_consumer_version_number("prod-version-1")).to_not be nil
|
138
|
+
expect(find_by_consumer_version_number("prod-version-2")).to_not be nil
|
139
|
+
expect(find_by_consumer_version_number("prod-version-3")).to be nil
|
140
|
+
end
|
141
|
+
|
142
|
+
it "sets the selectors" do
|
143
|
+
expect(find_by_consumer_version_number("prod-version-1").selectors.first.tag).to eq 'prod'
|
144
|
+
expect(find_by_consumer_version_number("prod-version-1").selectors.first.consumer).to eq 'Foo2'
|
103
145
|
end
|
104
146
|
end
|
105
147
|
|
@@ -53,6 +53,15 @@ module PactBroker
|
|
53
53
|
expect(subject.created_at).to be_datey
|
54
54
|
end
|
55
55
|
|
56
|
+
it "creates a LatestPactPublicationIdForConsumerVersion" do
|
57
|
+
expect{ subject }.to change { LatestPactPublicationIdForConsumerVersion.count }.by(1)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "sets the created_at of the LatestPactPublicationIdForConsumerVersion to the same as the consumer version, because that's how pacts are ordered" do
|
61
|
+
subject
|
62
|
+
expect(LatestPactPublicationIdForConsumerVersion.first.created_at).to eq PactBroker::Domain::Version.find(number: subject.consumer_version_number).created_at
|
63
|
+
end
|
64
|
+
|
56
65
|
context "when a pact already exists with exactly the same content" do
|
57
66
|
let(:another_version) { Versions::Repository.new.create number: '2.0.0', pacticipant_id: consumer.id }
|
58
67
|
|
@@ -8,15 +8,18 @@ module PactBroker
|
|
8
8
|
let(:overall_latest_2) { Selector.overall_latest }
|
9
9
|
let(:latest_for_tag_prod) { Selector.latest_for_tag('prod') }
|
10
10
|
let(:latest_for_tag_dev) { Selector.latest_for_tag('dev') }
|
11
|
+
let(:all_prod_for_consumer_1) { Selector.all_for_tag_and_consumer('prod', 'Foo') }
|
12
|
+
let(:all_prod_for_consumer_2) { Selector.all_for_tag_and_consumer('prod', 'Bar') }
|
13
|
+
let(:all_dev_for_consumer_1) { Selector.all_for_tag_and_consumer('dev', 'Bar') }
|
11
14
|
let(:all_prod) { Selector.all_for_tag('prod') }
|
12
15
|
let(:all_dev) { Selector.all_for_tag('dev') }
|
13
16
|
|
14
17
|
let(:unsorted_selectors) do
|
15
|
-
[all_prod, all_dev, latest_for_tag_prod, overall_latest_1, overall_latest_1, latest_for_tag_dev]
|
18
|
+
[all_prod, all_dev, all_dev_for_consumer_1, latest_for_tag_prod, overall_latest_1, overall_latest_1, latest_for_tag_dev, all_prod_for_consumer_2, all_prod_for_consumer_1]
|
16
19
|
end
|
17
20
|
|
18
21
|
let(:expected_sorted_selectors) do
|
19
|
-
[overall_latest_1, overall_latest_1, latest_for_tag_dev, latest_for_tag_prod, all_dev, all_prod]
|
22
|
+
[overall_latest_1, overall_latest_1, latest_for_tag_dev, latest_for_tag_prod, all_dev_for_consumer_1, all_prod_for_consumer_2, all_prod_for_consumer_1, all_dev, all_prod]
|
20
23
|
end
|
21
24
|
|
22
25
|
it "sorts the selectors" do
|
@@ -67,6 +67,12 @@ module PactBroker
|
|
67
67
|
|
68
68
|
its(:inclusion_reason) { is_expected.to include "The pact at http://pact is being verified because it matches the following configured selection criterion: pacts for all consumer versions tagged 'prod'"}
|
69
69
|
end
|
70
|
+
|
71
|
+
context "when the pact is one of all versions for a tag and consumer" do
|
72
|
+
let(:selectors) { Selectors.new(Selector.all_for_tag_and_consumer('prod', 'Foo')) }
|
73
|
+
|
74
|
+
its(:inclusion_reason) { is_expected.to include "The pact at http://pact is being verified because it matches the following configured selection criterion: pacts for all Foo versions tagged 'prod'"}
|
75
|
+
end
|
70
76
|
end
|
71
77
|
|
72
78
|
describe "#pending_reason" do
|
@@ -3,6 +3,27 @@ require 'pact_broker/verifications/repository'
|
|
3
3
|
module PactBroker
|
4
4
|
module Verifications
|
5
5
|
describe Repository do
|
6
|
+
describe "#create" do
|
7
|
+
let(:verification) do
|
8
|
+
PactBroker::Domain::Verification.new(success: true)
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:provider_version_number) { "2" }
|
12
|
+
let(:pact) do
|
13
|
+
td.create_pact_with_hierarchy("Foo", "1", "Bar").and_return(:pact)
|
14
|
+
end
|
15
|
+
|
16
|
+
subject { Repository.new.create verification, provider_version_number, pact}
|
17
|
+
|
18
|
+
it "creates a LatestVerificationIdForPactVersionAndProviderVersion" do
|
19
|
+
expect { subject }.to change { LatestVerificationIdForPactVersionAndProviderVersion.count }.by(1)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "sets the created_at of the LatestVerificationIdForPactVersionAndProviderVersion to the same as the verification" do
|
23
|
+
expect(subject.created_at).to eq LatestVerificationIdForPactVersionAndProviderVersion.first.created_at
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
6
27
|
describe "#find" do
|
7
28
|
let!(:pact) do
|
8
29
|
builder = TestDataBuilder.new
|
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.52.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: 2020-03-
|
13
|
+
date: 2020-03-25 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -30,22 +30,16 @@ dependencies:
|
|
30
30
|
name: json
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- - "
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: '1.8'
|
36
|
-
- - "<"
|
33
|
+
- - "~>"
|
37
34
|
- !ruby/object:Gem::Version
|
38
|
-
version: '3
|
35
|
+
version: '2.3'
|
39
36
|
type: :runtime
|
40
37
|
prerelease: false
|
41
38
|
version_requirements: !ruby/object:Gem::Requirement
|
42
39
|
requirements:
|
43
|
-
- - "
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '1.8'
|
46
|
-
- - "<"
|
40
|
+
- - "~>"
|
47
41
|
- !ruby/object:Gem::Version
|
48
|
-
version: '3
|
42
|
+
version: '2.3'
|
49
43
|
- !ruby/object:Gem::Dependency
|
50
44
|
name: roar
|
51
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -765,6 +759,8 @@ files:
|
|
765
759
|
- db/migrations/20191030_optimise_latest_pact_publications_by_consumer_versions_.rb
|
766
760
|
- db/migrations/20191031_optimise_latest_verification_ids_for_consumer_version_tags.rb
|
767
761
|
- db/migrations/20191101_create_head_pact_tags.rb
|
762
|
+
- db/migrations/20200318_add_created_at_to_latest_pact_publications.rb
|
763
|
+
- db/migrations/20200319_add_created_at_to_latest_verifications.rb
|
768
764
|
- db/migrations/migration_helper.rb
|
769
765
|
- db/test/backwards_compatibility/.rspec
|
770
766
|
- db/test/backwards_compatibility/Appraisals
|
@@ -952,6 +948,8 @@ files:
|
|
952
948
|
- lib/pact_broker/db/data_migrations/helpers.rb
|
953
949
|
- lib/pact_broker/db/data_migrations/migrate_webhook_headers.rb
|
954
950
|
- lib/pact_broker/db/data_migrations/set_consumer_ids_for_pact_publications.rb
|
951
|
+
- lib/pact_broker/db/data_migrations/set_created_at_for_latest_pact_publications.rb
|
952
|
+
- lib/pact_broker/db/data_migrations/set_created_at_for_latest_verifications.rb
|
955
953
|
- lib/pact_broker/db/data_migrations/set_latest_version_sequence_value.rb
|
956
954
|
- lib/pact_broker/db/data_migrations/set_pacticipant_ids_for_verifications.rb
|
957
955
|
- lib/pact_broker/db/data_migrations/set_webhooks_enabled.rb
|