pact_broker 2.80.0 → 2.81.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -2
- data/CHANGELOG.md +21 -0
- data/db/ddl_statements/latest_verifications_for_pact_versions.rb +28 -0
- data/db/migrations/20210711_add_consumer_version_order_to_pact_publication.rb +12 -0
- data/db/migrations/20210712_add_interaction_count_to_pact_versions.rb +8 -0
- data/lib/db.rb +4 -0
- data/lib/pact_broker/api.rb +8 -10
- data/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema.rb +25 -5
- data/lib/pact_broker/api/contracts/verifiable_pacts_query_schema.rb +0 -1
- data/lib/pact_broker/api/decorators/verifiable_pacts_query_decorator.rb +24 -0
- data/lib/pact_broker/api/resources/dashboard.rb +4 -1
- data/lib/pact_broker/api/resources/deployed_versions_for_version_and_environment.rb +3 -7
- data/lib/pact_broker/api/resources/index.rb +10 -12
- data/lib/pact_broker/api/resources/latest_provider_pacts.rb +1 -1
- data/lib/pact_broker/api/resources/pagination_methods.rb +14 -0
- data/lib/pact_broker/api/resources/tag.rb +14 -0
- data/lib/pact_broker/configuration.rb +4 -1
- data/lib/pact_broker/db/data_migrations/set_consumer_version_order_for_pact_publications.rb +28 -0
- data/lib/pact_broker/db/data_migrations/set_interactions_counts.rb +41 -0
- data/lib/pact_broker/db/migrate_data.rb +2 -0
- data/lib/pact_broker/db/seed_example_data.rb +5 -0
- data/lib/pact_broker/deployments/deployed_version_service.rb +13 -9
- data/lib/pact_broker/domain/verification.rb +40 -0
- data/lib/pact_broker/domain/version.rb +4 -0
- data/lib/pact_broker/index/service.rb +4 -5
- data/lib/pact_broker/integrations/integration.rb +27 -6
- data/lib/pact_broker/logging.rb +10 -0
- data/lib/pact_broker/matrix/unresolved_selector.rb +1 -1
- data/lib/pact_broker/metrics/service.rb +17 -0
- data/lib/pact_broker/pacts/all_pact_publications.rb +4 -2
- data/lib/pact_broker/pacts/content.rb +2 -2
- data/lib/pact_broker/pacts/metadata.rb +11 -5
- data/lib/pact_broker/pacts/pact_publication.rb +41 -6
- data/lib/pact_broker/pacts/pact_publication_dataset_module.rb +55 -11
- data/lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb +20 -0
- data/lib/pact_broker/pacts/pact_version.rb +14 -15
- data/lib/pact_broker/pacts/pacts_for_verification_repository.rb +86 -31
- data/lib/pact_broker/pacts/parse.rb +1 -0
- data/lib/pact_broker/pacts/repository.rb +51 -41
- data/lib/pact_broker/pacts/selector.rb +18 -2
- data/lib/pact_broker/pacts/service.rb +13 -22
- data/lib/pact_broker/pacts/verifiable_pact_messages.rb +11 -0
- data/lib/pact_broker/repositories/helpers.rb +4 -0
- data/lib/pact_broker/repositories/scopes.rb +15 -0
- data/lib/pact_broker/test/test_data_builder.rb +2 -1
- data/lib/pact_broker/ui/helpers/matrix_helper.rb +1 -0
- data/lib/pact_broker/ui/views/index/show-with-tags.haml +1 -1
- data/lib/pact_broker/ui/views/matrix/show.haml +2 -0
- data/lib/pact_broker/verifications/latest_verification_for_pact_version.rb +2 -2
- data/lib/pact_broker/verifications/repository.rb +9 -10
- data/lib/pact_broker/version.rb +1 -1
- data/public/javascripts/matrix.js +3 -0
- data/spec/features/create_tag_spec.rb +10 -0
- data/spec/features/execute_webhook_spec.rb +1 -3
- data/spec/features/get_integrations_spec.rb +2 -2
- data/spec/features/get_provider_pacts_for_verification_spec.rb +5 -3
- data/spec/features/metadata_spec.rb +66 -0
- data/spec/features/publish_verification_results_and_version_spec.rb +70 -0
- data/spec/fixtures/approvals/get_provider_pacts_for_verification.approved.json +2 -2
- data/spec/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema_combinations_spec.rb +9 -0
- data/spec/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema_spec.rb +15 -0
- data/spec/lib/pact_broker/api/decorators/verifiable_pacts_query_decorator_spec.rb +12 -0
- data/spec/lib/pact_broker/api/resources/dashboard_spec.rb +23 -2
- data/spec/lib/pact_broker/api/resources/latest_provider_pacts_spec.rb +3 -3
- data/spec/lib/pact_broker/api/resources/provider_pacts_spec.rb +1 -1
- data/spec/lib/pact_broker/api/resources/tag_spec.rb +39 -13
- data/spec/lib/pact_broker/db/data_migrations/set_interactions_counts_spec.rb +38 -0
- data/spec/lib/pact_broker/deployments/deployed_version_service_spec.rb +42 -0
- data/spec/lib/pact_broker/domain/verification_spec.rb +17 -0
- data/spec/lib/pact_broker/index/service_spec.rb +28 -16
- data/spec/lib/pact_broker/integrations/integration_spec.rb +21 -10
- data/spec/lib/pact_broker/metrics/service_spec.rb +25 -0
- data/spec/lib/pact_broker/pacts/content_spec.rb +1 -1
- data/spec/lib/pact_broker/pacts/metadata_spec.rb +95 -29
- data/spec/lib/pact_broker/pacts/pact_publication_selector_dataset_module_spec.rb +39 -0
- data/spec/lib/pact_broker/pacts/pact_version_spec.rb +68 -12
- data/spec/lib/pact_broker/pacts/repository_find_wip_pact_versions_for_provider_branch_spec.rb +1 -1
- data/spec/lib/pact_broker/pacts/repository_find_wip_pact_versions_for_provider_spec.rb +1 -1
- data/spec/lib/pact_broker/pacts/repository_spec.rb +59 -52
- data/spec/lib/pact_broker/pacts/verifiable_pact_messages_spec.rb +9 -0
- data/spec/lib/pact_broker/verifications/latest_verification_for_pact_version_spec.rb +18 -0
- data/spec/support/shared_context.rb +0 -1
- metadata +20 -3
@@ -363,29 +363,41 @@ module PactBroker
|
|
363
363
|
end
|
364
364
|
|
365
365
|
describe "find_index_items_for_api" do
|
366
|
-
before do
|
367
|
-
td.create_pact_with_hierarchy("Foo", "1", "Bar")
|
368
|
-
.create_consumer_version_tag("feat-x")
|
369
|
-
.create_verification(provider_version: "1", comment: "latest feat-x verif")
|
370
|
-
.create_consumer_version("2")
|
371
|
-
.create_consumer_version_tag("feat-y")
|
372
|
-
.create_pact
|
373
|
-
.create_verification(provider_version: "2", comment: "latest feat-y verif")
|
374
|
-
.create_consumer_version("3")
|
375
|
-
.create_consumer_version_tag("feat-x")
|
376
|
-
.create_consumer_version_tag("feat-y")
|
377
|
-
.create_pact
|
378
|
-
.create_consumer_version("4")
|
379
|
-
.create_pact
|
380
|
-
end
|
381
|
-
|
382
366
|
let(:rows) { subject.find_index_items_for_api(consumer_name: td.consumer.name, provider_name: td.provider.name) }
|
383
367
|
|
384
368
|
context "when the pact has not yet been verified" do
|
369
|
+
before do
|
370
|
+
td.create_pact_with_hierarchy("Foo", "1", "Bar")
|
371
|
+
.create_consumer_version_tag("feat-x")
|
372
|
+
.create_verification(provider_version: "1", comment: "latest feat-x verif")
|
373
|
+
.create_consumer_version("2")
|
374
|
+
.create_consumer_version_tag("feat-y")
|
375
|
+
.create_pact
|
376
|
+
.create_verification(provider_version: "2", comment: "latest feat-y verif")
|
377
|
+
.create_consumer_version("3")
|
378
|
+
.create_consumer_version_tag("feat-x")
|
379
|
+
.create_consumer_version_tag("feat-y")
|
380
|
+
.create_pact
|
381
|
+
.create_consumer_version("4")
|
382
|
+
.create_pact
|
383
|
+
end
|
385
384
|
it "returns the latest verification as nil (unlike the pseudo branch code for the server side rendered UI)" do
|
386
385
|
expect(rows.last.provider_version_number).to be nil
|
387
386
|
end
|
388
387
|
end
|
388
|
+
|
389
|
+
context "when a version is currently deployed" do
|
390
|
+
before do
|
391
|
+
td.create_environment("test")
|
392
|
+
.create_pact_with_hierarchy("Foo", "1", "Bar")
|
393
|
+
.create_deployed_version_for_consumer_version
|
394
|
+
.create_pact_with_hierarchy("Foo", "2", "Bar")
|
395
|
+
end
|
396
|
+
|
397
|
+
it "includes the deployed versions" do
|
398
|
+
expect(rows.size).to eq 2
|
399
|
+
end
|
400
|
+
end
|
389
401
|
end
|
390
402
|
end
|
391
403
|
end
|
@@ -5,7 +5,9 @@ module PactBroker
|
|
5
5
|
describe Integration do
|
6
6
|
describe "relationships" do
|
7
7
|
before do
|
8
|
-
td.set_now(DateTime.new(
|
8
|
+
td.set_now(DateTime.new(2018, 1, 7))
|
9
|
+
.create_pact_with_hierarchy("Zoo", "1", "Yab")
|
10
|
+
.set_now(DateTime.new(2019, 1, 1))
|
9
11
|
.create_pact_with_hierarchy("Foo", "1", "Bar")
|
10
12
|
.set_now(DateTime.new(2019, 1, 2))
|
11
13
|
.create_consumer_version("2")
|
@@ -16,13 +18,20 @@ module PactBroker
|
|
16
18
|
.create_verification(provider_version: "4", number: 2)
|
17
19
|
end
|
18
20
|
|
19
|
-
it "has a relationship to the latest pact" do
|
20
|
-
|
21
|
-
expect(
|
21
|
+
it "has a relationship to the latest pact (eager)" do
|
22
|
+
integrations = Integration.eager(:latest_pact).order(:consumer_name, :provider_name).all
|
23
|
+
expect(integrations.first.latest_pact.consumer_version_number).to eq "2"
|
24
|
+
expect(integrations.last.latest_pact.consumer_version_number).to eq "1"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "has a relationship to the latest pact (not eager)" do
|
28
|
+
integrations = Integration.order(:consumer_name, :provider_name).all
|
29
|
+
expect(integrations.first.latest_pact.consumer_version_number).to eq "2"
|
30
|
+
expect(integrations.last.latest_pact.consumer_version_number).to eq "1"
|
22
31
|
end
|
23
32
|
|
24
33
|
it "has a relationship to the latest verification via the latest pact" do
|
25
|
-
integration = Integration.eager(latest_pact: :latest_verification).all.first
|
34
|
+
integration = Integration.eager(latest_pact: :latest_verification).order(:consumer_name, :provider_name).all.first
|
26
35
|
expect(integration.latest_pact.latest_verification.provider_version_number).to eq "4"
|
27
36
|
end
|
28
37
|
|
@@ -31,14 +40,16 @@ module PactBroker
|
|
31
40
|
end
|
32
41
|
|
33
42
|
it "has a latest verification - this may not be the same as the latest verification for the latest pact" do
|
34
|
-
integration = Integration.eager(:latest_verification).all.first
|
43
|
+
integration = Integration.eager(:latest_verification).order(:consumer_name, :provider_name).all.first
|
35
44
|
expect(integration.latest_verification.provider_version_number).to eq "4"
|
36
45
|
end
|
37
46
|
|
38
47
|
describe "latest_pact_or_verification_publication_date" do
|
48
|
+
let(:first_integration) { Integration.order(:consumer_name, :provider_name).first }
|
49
|
+
|
39
50
|
context "when the last publication is a verification" do
|
40
51
|
it "returns the verification execution date" do
|
41
|
-
expect(
|
52
|
+
expect(first_integration.latest_pact_or_verification_publication_date.to_datetime).to eq first_integration.latest_verification_publication_date.to_datetime
|
42
53
|
end
|
43
54
|
end
|
44
55
|
|
@@ -51,7 +62,7 @@ module PactBroker
|
|
51
62
|
|
52
63
|
it "returns the pact publication date" do
|
53
64
|
date = td.in_utc { DateTime.new(2019, 1, 5) }
|
54
|
-
expect(
|
65
|
+
expect(first_integration.latest_pact_or_verification_publication_date.to_datetime).to eq date
|
55
66
|
end
|
56
67
|
end
|
57
68
|
end
|
@@ -69,7 +80,7 @@ module PactBroker
|
|
69
80
|
end
|
70
81
|
|
71
82
|
it "returns a list of triggered webhooks" do
|
72
|
-
integrations = Integration.eager(:latest_triggered_webhooks).all
|
83
|
+
integrations = Integration.eager(:latest_triggered_webhooks).order(:consumer_name, :provider_name).all
|
73
84
|
expect(integrations.first.latest_triggered_webhooks.count).to eq 1
|
74
85
|
end
|
75
86
|
end
|
@@ -88,7 +99,7 @@ module PactBroker
|
|
88
99
|
end
|
89
100
|
|
90
101
|
it "returns all the webhooks" do
|
91
|
-
integrations = Integration.eager(:webhooks).all
|
102
|
+
integrations = Integration.eager(:webhooks).order(:consumer_name, :provider_name).all
|
92
103
|
expect(integrations.first.webhooks.count).to eq 3
|
93
104
|
end
|
94
105
|
end
|
@@ -6,6 +6,31 @@ module PactBroker
|
|
6
6
|
describe "#metrics" do
|
7
7
|
subject { Service.metrics }
|
8
8
|
|
9
|
+
describe "interactions latestCount" do
|
10
|
+
before do
|
11
|
+
td.create_consumer
|
12
|
+
.create_provider
|
13
|
+
.create_consumer_version
|
14
|
+
.create_pact(json_content: { interactions: [1, 2], messages: [1] }.to_json)
|
15
|
+
.create_consumer
|
16
|
+
.create_provider
|
17
|
+
.create_consumer_version
|
18
|
+
.create_pact(json_content: { interactions: [1, 2], messages: [1] }.to_json)
|
19
|
+
.create_consumer
|
20
|
+
.create_provider
|
21
|
+
.create_consumer_version
|
22
|
+
.create_pact(json_content: { foo: "bar" }.to_json)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "includes a count of the number of interactions in the overall latest pacts" do
|
26
|
+
expect(subject[:interactions]).to eq({
|
27
|
+
latestInteractionsCount: 4,
|
28
|
+
latestMessagesCount: 2,
|
29
|
+
latestInteractionsAndMessagesCount: 6
|
30
|
+
})
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
9
34
|
describe "verificationResultsPerPactVersion" do
|
10
35
|
before do
|
11
36
|
td.create_pact_with_hierarchy
|
@@ -7,7 +7,7 @@ module PactBroker
|
|
7
7
|
let(:selectors) do
|
8
8
|
Selectors.new([ResolvedSelector.new({ latest: true, consumer: "consumer", tag: "tag" }, consumer_version)])
|
9
9
|
end
|
10
|
-
let(:consumer_version) { double("version", number: "2") }
|
10
|
+
let(:consumer_version) { double("version", number: "2", id: 1) }
|
11
11
|
let(:verifiable_pact) { double("PactBroker::Pacts::VerifiablePact", wip: wip, selectors: selectors) }
|
12
12
|
let(:wip) { false }
|
13
13
|
|
@@ -19,7 +19,7 @@ module PactBroker
|
|
19
19
|
{
|
20
20
|
"l" => true,
|
21
21
|
"t" => "tag",
|
22
|
-
"
|
22
|
+
"cv" => 1
|
23
23
|
}
|
24
24
|
]
|
25
25
|
})
|
@@ -34,38 +34,104 @@ module PactBroker
|
|
34
34
|
end
|
35
35
|
|
36
36
|
describe "parse_metadata" do
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
37
|
+
context "with a consumer version id" do
|
38
|
+
before do
|
39
|
+
allow(PactBroker::Domain::Version).to receive(:find).with(id: 1).and_return(consumer_version)
|
40
|
+
end
|
41
|
+
|
42
|
+
let(:consumer_version) { double("version", number: "2", id: 1) }
|
43
|
+
|
44
|
+
let(:incoming_metadata) do
|
45
|
+
{
|
46
|
+
"cv" => 1,
|
47
|
+
"cvt" => ["tag"],
|
48
|
+
"w" => true,
|
49
|
+
"s" => [
|
50
|
+
{
|
51
|
+
"l" => true,
|
52
|
+
"t" => "tag",
|
53
|
+
"cv" => 1
|
54
|
+
}
|
55
|
+
]
|
56
|
+
}
|
57
|
+
end
|
51
58
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
59
|
+
let(:parsed_metadata) do
|
60
|
+
{
|
61
|
+
:consumer_version_number => "2",
|
62
|
+
:consumer_version_tags => ["tag"],
|
63
|
+
:wip => true,
|
64
|
+
:consumer_version_selectors => [
|
65
|
+
{
|
66
|
+
:latest => true,
|
67
|
+
:tag => "tag",
|
68
|
+
:consumer_version_number => "2"
|
69
|
+
}
|
70
|
+
]
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
it "expands the key names" do
|
75
|
+
expect(Metadata.parse_metadata(incoming_metadata)).to eq parsed_metadata
|
76
|
+
end
|
77
|
+
|
78
|
+
context "when the version can't be found" do
|
79
|
+
let(:consumer_version) { nil }
|
80
|
+
|
81
|
+
let(:parsed_metadata) do
|
58
82
|
{
|
59
|
-
:
|
60
|
-
:
|
61
|
-
:
|
83
|
+
:consumer_version_number => nil,
|
84
|
+
:consumer_version_tags => ["tag"],
|
85
|
+
:wip => true,
|
86
|
+
:consumer_version_selectors => [
|
87
|
+
{
|
88
|
+
:latest => true,
|
89
|
+
:tag => "tag",
|
90
|
+
:consumer_version_number => nil
|
91
|
+
}
|
92
|
+
]
|
62
93
|
}
|
63
|
-
|
64
|
-
|
94
|
+
end
|
95
|
+
|
96
|
+
it "sets the consumer version number to nil" do
|
97
|
+
expect(Metadata.parse_metadata(incoming_metadata)).to eq parsed_metadata
|
98
|
+
end
|
99
|
+
end
|
65
100
|
end
|
66
101
|
|
67
|
-
|
68
|
-
|
102
|
+
context "with a consumer version number (support the old format for previously created URLs)" do
|
103
|
+
let(:incoming_metadata) do
|
104
|
+
{
|
105
|
+
"cvn" => "2",
|
106
|
+
"cvt" => ["tag"],
|
107
|
+
"w" => true,
|
108
|
+
"s" => [
|
109
|
+
{
|
110
|
+
"l" => true,
|
111
|
+
"t" => "tag"
|
112
|
+
}
|
113
|
+
]
|
114
|
+
}
|
115
|
+
end
|
116
|
+
|
117
|
+
let(:parsed_metadata) do
|
118
|
+
{
|
119
|
+
:consumer_version_number => "2",
|
120
|
+
:consumer_version_tags => ["tag"],
|
121
|
+
:wip => true,
|
122
|
+
:consumer_version_selectors => [
|
123
|
+
{
|
124
|
+
:latest => true,
|
125
|
+
:tag => "tag"
|
126
|
+
}
|
127
|
+
]
|
128
|
+
}
|
129
|
+
end
|
130
|
+
|
131
|
+
it "expands the key names" do
|
132
|
+
expect(Metadata.parse_metadata(incoming_metadata)).to eq parsed_metadata
|
133
|
+
end
|
134
|
+
|
69
135
|
end
|
70
136
|
end
|
71
137
|
end
|
@@ -7,6 +7,45 @@ module PactBroker
|
|
7
7
|
|
8
8
|
subject { PactPublication.for_provider_and_consumer_version_selector(provider, consumer_version_selector).all }
|
9
9
|
|
10
|
+
context "for main branch" do
|
11
|
+
let(:consumer_version_selector) { Selector.for_main_branch }
|
12
|
+
let(:provider) { td.find_pacticipant("Bar") }
|
13
|
+
|
14
|
+
before do
|
15
|
+
td.create_provider("Bar")
|
16
|
+
.create_consumer("Foo", main_branch: "main")
|
17
|
+
.create_consumer_version("1", branch: "main")
|
18
|
+
.create_pact
|
19
|
+
.create_consumer_version("2", branch: "main")
|
20
|
+
.create_pact
|
21
|
+
.create_consumer_version("3", branch: "not-main")
|
22
|
+
.create_pact
|
23
|
+
.create_consumer("Bob", main_branch: "develop")
|
24
|
+
.create_consumer_version("3", branch: "develop")
|
25
|
+
.create_pact
|
26
|
+
.create_consumer_version("5", branch: "develop")
|
27
|
+
.create_pact
|
28
|
+
.create_consumer_version("6", branch: "not-develop")
|
29
|
+
.create_pact
|
30
|
+
.create_provider("NotBar")
|
31
|
+
.create_pact
|
32
|
+
.create_consumer("Waffle")
|
33
|
+
.create_consumer_version("7")
|
34
|
+
.create_pact
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns the latest pact for the main branch of every consumer" do
|
38
|
+
expect(subject.size).to eq 2
|
39
|
+
expect(subject.sort_by(&:id).first.consumer.name).to eq "Foo"
|
40
|
+
expect(subject.sort_by(&:id).first.consumer_version.branch).to eq "main"
|
41
|
+
expect(subject.sort_by(&:id).first.consumer_version.number).to eq "2"
|
42
|
+
|
43
|
+
expect(subject.sort_by(&:id).last.consumer.name).to eq "Bob"
|
44
|
+
expect(subject.sort_by(&:id).last.consumer_version.branch).to eq "develop"
|
45
|
+
expect(subject.sort_by(&:id).last.consumer_version.number).to eq "5"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
10
49
|
context "for environment" do
|
11
50
|
before do
|
12
51
|
td.create_environment("test")
|
@@ -6,8 +6,7 @@ module PactBroker
|
|
6
6
|
|
7
7
|
describe "pacticipant names" do
|
8
8
|
subject(:pact_version) do
|
9
|
-
|
10
|
-
.create_consumer("consumer")
|
9
|
+
td.create_consumer("consumer")
|
11
10
|
.create_provider("provider")
|
12
11
|
.create_consumer_version("1.0.1")
|
13
12
|
.create_pact
|
@@ -18,12 +17,50 @@ module PactBroker
|
|
18
17
|
its(:provider_name) { is_expected.to eq("provider") }
|
19
18
|
end
|
20
19
|
|
21
|
-
describe "
|
20
|
+
describe "consumer_versions" do
|
21
|
+
subject(:pact_version) do
|
22
|
+
td.create_consumer("consumer")
|
23
|
+
.create_provider("provider")
|
24
|
+
.create_consumer_version("1")
|
25
|
+
.create_pact
|
26
|
+
.create_consumer_version("2")
|
27
|
+
.republish_same_pact
|
28
|
+
.create_consumer_version("3")
|
29
|
+
.create_pact
|
30
|
+
|
31
|
+
PactVersion.order(:id).first
|
32
|
+
end
|
33
|
+
|
34
|
+
it "returns the consuemr versions" do
|
35
|
+
expect(subject.consumer_versions.collect(&:number).sort).to eq ["1", "2"]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "latest_consumer_version" do
|
40
|
+
before do
|
41
|
+
td.create_consumer("consumer")
|
42
|
+
.create_provider("provider")
|
43
|
+
.create_consumer_version("1")
|
44
|
+
.create_pact
|
45
|
+
.create_consumer_version("2")
|
46
|
+
.republish_same_pact
|
47
|
+
.create_consumer_version("3")
|
48
|
+
.create_pact
|
49
|
+
.create_consumer_version("4")
|
50
|
+
.republish_same_pact
|
51
|
+
end
|
22
52
|
|
53
|
+
it "does not work eager loading because the Version needs a latest_by_pact_version method, but we don't need it for now", skip: true do
|
54
|
+
pact_versions = PactVersion.eager(:latest_consumer_version).order(:id).all
|
55
|
+
expect(pact_versions.first.latest_consumer_version.number).to eq 2
|
56
|
+
expect(pact_versions.last.latest_consumer_version.number).to eq 4
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "#latest_pact_publication" do
|
23
61
|
context "when the latest pact publication is not an overwritten one" do
|
24
62
|
before do
|
25
|
-
|
26
|
-
.create_provider("Bar")
|
63
|
+
td.create_provider("Bar")
|
27
64
|
.create_consumer("Foo")
|
28
65
|
.create_consumer_version("1.2.100")
|
29
66
|
.create_pact
|
@@ -48,7 +85,6 @@ module PactBroker
|
|
48
85
|
end
|
49
86
|
|
50
87
|
context "when the only pact publication with the given sha is an overwritten one" do
|
51
|
-
let(:td) { TestDataBuilder.new }
|
52
88
|
let!(:first_version) do
|
53
89
|
td.create_provider("Bar")
|
54
90
|
.create_consumer("Foo")
|
@@ -64,6 +100,7 @@ module PactBroker
|
|
64
100
|
pact_version = PactBroker::Pacts::PactVersion.find(sha: first_version.pact_version_sha)
|
65
101
|
latest_pact_publication = pact_version.latest_pact_publication
|
66
102
|
expect(latest_pact_publication.revision_number).to eq 1
|
103
|
+
expect(latest_pact_publication.id).to eq PactBroker::Pacts::PactPublication.order(:id).first.id
|
67
104
|
end
|
68
105
|
end
|
69
106
|
end
|
@@ -96,16 +133,35 @@ module PactBroker
|
|
96
133
|
describe "#latest_verification" do
|
97
134
|
before do
|
98
135
|
td.create_pact_with_hierarchy
|
136
|
+
.create_verification(provider_version: "4", number: 1)
|
137
|
+
.create_verification(provider_version: "5", number: 2)
|
138
|
+
.create_verification(provider_version: "6", number: 3)
|
139
|
+
.create_pact_with_hierarchy
|
99
140
|
.create_verification
|
100
|
-
.create_verification(number: 2)
|
101
|
-
.create_verification(number: 3)
|
141
|
+
.create_verification(provider_version: "1", number: 2)
|
142
|
+
.create_verification(provider_version: "2", number: 3)
|
102
143
|
end
|
103
|
-
let(:pact_version) { PactVersion.last }
|
104
144
|
|
105
|
-
|
145
|
+
describe "lazy loading" do
|
146
|
+
let(:pact_version) { PactVersion.last }
|
147
|
+
|
148
|
+
subject { pact_version.latest_verification }
|
106
149
|
|
107
|
-
|
108
|
-
|
150
|
+
it "returns the latest verification by verification id" do
|
151
|
+
expect(subject.number).to eq 3
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe "eager loading" do
|
156
|
+
let(:first_pact_latest_verification) { PactVersion.eager(:latest_verification).order(:id).all.first.associations[:latest_verification] }
|
157
|
+
let(:last_pact_latest_verification) { PactVersion.eager(:latest_verification).order(:id).all.last.associations[:latest_verification] }
|
158
|
+
|
159
|
+
it "returns the latest verification by verification id" do
|
160
|
+
expect(first_pact_latest_verification.number).to eq 3
|
161
|
+
expect(first_pact_latest_verification.provider_version_number).to eq "6"
|
162
|
+
expect(last_pact_latest_verification.number).to eq 3
|
163
|
+
expect(last_pact_latest_verification.provider_version_number).to eq "2"
|
164
|
+
end
|
109
165
|
end
|
110
166
|
end
|
111
167
|
|