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
@@ -0,0 +1,70 @@
|
|
1
|
+
require "pact_broker/domain/verification"
|
2
|
+
|
3
|
+
describe "Publishing a pact verification and provider version" do
|
4
|
+
let(:path) { "/pacts/provider/Provider/consumer/Consumer/pact-version/#{pact.pact_version_sha}/verification-results" }
|
5
|
+
let(:verification_content) { load_fixture("verification.json") }
|
6
|
+
let(:parsed_response_body) { JSON.parse(subject.body) }
|
7
|
+
let(:pact) { td.pact }
|
8
|
+
let(:rack_env) do
|
9
|
+
{
|
10
|
+
"CONTENT_TYPE" => "application/json",
|
11
|
+
"HTTP_ACCEPT" => "application/hal+json",
|
12
|
+
"pactbroker.database_connector" => lambda { |&block| block.call }
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
subject { post(path, verification_content, rack_env) }
|
17
|
+
|
18
|
+
before do
|
19
|
+
td.create_provider("Provider")
|
20
|
+
.create_consumer("Consumer")
|
21
|
+
.create_consumer_version("1.0.0")
|
22
|
+
.create_pact
|
23
|
+
.create_consumer_version("1.2.3")
|
24
|
+
.create_pact
|
25
|
+
.revise_pact
|
26
|
+
end
|
27
|
+
|
28
|
+
it "Responds with a 201 Created" do
|
29
|
+
expect(subject.status).to be 201
|
30
|
+
end
|
31
|
+
|
32
|
+
it "saves new verification" do
|
33
|
+
expect { subject }.to change { PactBroker::Domain::Verification.count }.by(1)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "saves the verification against the correct pact" do
|
37
|
+
subject
|
38
|
+
expect(PactBroker::Domain::Verification.order(:id).last.pact_version_sha).to eq pact.pact_version_sha
|
39
|
+
end
|
40
|
+
|
41
|
+
it "saves the test results" do
|
42
|
+
subject
|
43
|
+
expect(PactBroker::Domain::Verification.order(:id).last.test_results).to eq("some" => "results")
|
44
|
+
end
|
45
|
+
|
46
|
+
it "returns a link to itself that can be followed" do
|
47
|
+
get_verification_link = parsed_response_body["_links"]["self"]["href"]
|
48
|
+
get get_verification_link, nil, { "HTTP_ACCEPT" => "application/hal+json" }
|
49
|
+
expect(last_response.status).to be 200
|
50
|
+
expect(JSON.parse(subject.body)).to include JSON.parse(verification_content)
|
51
|
+
end
|
52
|
+
|
53
|
+
context "with a webhook configured", job: true do
|
54
|
+
before do
|
55
|
+
td.create_webhook(
|
56
|
+
method: "POST",
|
57
|
+
url: "http://example.org",
|
58
|
+
events: [{ name: PactBroker::Webhooks::WebhookEvent::VERIFICATION_PUBLISHED }]
|
59
|
+
)
|
60
|
+
end
|
61
|
+
let!(:request) do
|
62
|
+
stub_request(:post, "http://example.org").to_return(:status => 200)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "executes the webhook" do
|
66
|
+
subject
|
67
|
+
expect(request).to have_been_made
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -22,7 +22,7 @@
|
|
22
22
|
"status": 200,
|
23
23
|
"headers": {
|
24
24
|
"Content-Type": "application/hal+json;charset=utf-8",
|
25
|
-
"Content-Length": "
|
25
|
+
"Content-Length": "808"
|
26
26
|
},
|
27
27
|
"body": {
|
28
28
|
"_embedded": {
|
@@ -39,7 +39,7 @@
|
|
39
39
|
},
|
40
40
|
"_links": {
|
41
41
|
"self": {
|
42
|
-
"href": "http://example.org/pacts/provider/Provider/consumer/Consumer%202/pact-version/0f22f551a422b027066db7635cad8bd8a59ac869/metadata/
|
42
|
+
"href": "http://example.org/pacts/provider/Provider/consumer/Consumer%202/pact-version/0f22f551a422b027066db7635cad8bd8a59ac869/metadata/c1tdW3RdPXByb2Qmc1tdW2xdPXRydWUmc1tdW2N2XT0y",
|
43
43
|
"name": "Pact between Consumer 2 (4.5.6) and Provider"
|
44
44
|
}
|
45
45
|
}
|
data/spec/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema_combinations_spec.rb
CHANGED
@@ -5,6 +5,7 @@ module PactBroker
|
|
5
5
|
module Contracts
|
6
6
|
describe VerifiablePactsJSONQuerySchema do
|
7
7
|
ALL_PROPERTIES = {
|
8
|
+
mainBranch: true,
|
8
9
|
tag: "tag",
|
9
10
|
branch: "branch",
|
10
11
|
latest: true,
|
@@ -13,10 +14,12 @@ module PactBroker
|
|
13
14
|
environment: "environment",
|
14
15
|
deployed: true,
|
15
16
|
released: true,
|
17
|
+
deployedOrReleased: true,
|
16
18
|
consumer: "consumer"
|
17
19
|
}
|
18
20
|
|
19
21
|
VALID_KEY_COMBINATIONS = [
|
22
|
+
[:mainBranch],
|
20
23
|
[:tag],
|
21
24
|
[:tag, :latest],
|
22
25
|
[:tag, :latest, :fallbackTag],
|
@@ -29,12 +32,18 @@ module PactBroker
|
|
29
32
|
[:environment, :released],
|
30
33
|
[:deployed],
|
31
34
|
[:released],
|
35
|
+
[:deployedOrReleased],
|
36
|
+
[:environment, :deployedOrReleased]
|
32
37
|
]
|
33
38
|
|
34
39
|
VALID_KEY_COMBINATIONS.each do | valid_key_combination |
|
35
40
|
selector = ALL_PROPERTIES.slice(*valid_key_combination)
|
36
41
|
|
37
42
|
describe "with #{selector}" do
|
43
|
+
before do
|
44
|
+
allow(PactBroker::Deployments::EnvironmentService).to receive(:find_by_name).and_return(double("environment"))
|
45
|
+
end
|
46
|
+
|
38
47
|
it "is valid" do
|
39
48
|
params = { consumerVersionSelectors: [selector] }
|
40
49
|
expect(VerifiablePactsJSONQuerySchema.(params)).to be_empty
|
@@ -4,6 +4,11 @@ module PactBroker
|
|
4
4
|
module Api
|
5
5
|
module Contracts
|
6
6
|
describe VerifiablePactsJSONQuerySchema do
|
7
|
+
before do
|
8
|
+
allow(PactBroker::Deployments::EnvironmentService).to receive(:find_by_name).and_return(environment)
|
9
|
+
end
|
10
|
+
let(:environment) { double("environment") }
|
11
|
+
|
7
12
|
let(:params) do
|
8
13
|
{
|
9
14
|
providerVersionTags: provider_version_tags,
|
@@ -327,6 +332,16 @@ module PactBroker
|
|
327
332
|
|
328
333
|
its([:consumerVersionSelectors, 0]) { is_expected.to eq "cannot specify a branch with latest=false (at index 0)" }
|
329
334
|
end
|
335
|
+
|
336
|
+
context "when the environment does not exist" do
|
337
|
+
let(:environment) { nil }
|
338
|
+
|
339
|
+
let(:consumer_version_selectors) do
|
340
|
+
[{ environment: "prod" }]
|
341
|
+
end
|
342
|
+
|
343
|
+
its([:consumerVersionSelectors, 0]) { is_expected.to eq "environment with name 'prod' does not exist at index 0" }
|
344
|
+
end
|
330
345
|
end
|
331
346
|
end
|
332
347
|
end
|
@@ -113,6 +113,18 @@ module PactBroker
|
|
113
113
|
expect(subject.consumer_version_selectors.first.currently_deployed).to be true
|
114
114
|
end
|
115
115
|
end
|
116
|
+
|
117
|
+
context "when deployedOrReleased is set to true" do
|
118
|
+
let(:consumer_version_selectors) do
|
119
|
+
[{ "deployedOrReleased" => true }]
|
120
|
+
end
|
121
|
+
|
122
|
+
it "creates two selectors - one for deployed and one for released" do
|
123
|
+
expect(subject.consumer_version_selectors.size).to eq 2
|
124
|
+
expect(subject.consumer_version_selectors.first).to eq PactBroker::Pacts::Selector.for_currently_deployed
|
125
|
+
expect(subject.consumer_version_selectors.last).to eq PactBroker::Pacts::Selector.for_currently_supported
|
126
|
+
end
|
127
|
+
end
|
116
128
|
end
|
117
129
|
|
118
130
|
context "when parsing query string params" do
|
@@ -3,12 +3,33 @@ require "pact_broker/api/resources/dashboard"
|
|
3
3
|
module PactBroker
|
4
4
|
module Api
|
5
5
|
module Resources
|
6
|
-
|
7
6
|
describe Dashboard do
|
7
|
+
before do
|
8
|
+
td.create_pact_with_verification("Foo1", "1", "Bar", "2")
|
9
|
+
.create_pact_with_verification("Foo2", "1", "Bar", "2")
|
10
|
+
.create_pact_with_verification("Foo3", "1", "Bar", "2")
|
11
|
+
.create_pact_with_verification("Foo4", "1", "Bar", "2")
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:response_body_hash) { JSON.parse(subject.body) }
|
8
15
|
|
9
16
|
let(:path) { "/dashboard" }
|
10
|
-
subject { get path; last_response }
|
11
17
|
|
18
|
+
subject { get(path) }
|
19
|
+
|
20
|
+
it { is_expected.to be_a_hal_json_success_response }
|
21
|
+
|
22
|
+
it "returns a list of items" do
|
23
|
+
expect(response_body_hash["items"]).to be_a(Array)
|
24
|
+
end
|
25
|
+
|
26
|
+
context "with pagination" do
|
27
|
+
subject { get(path, { pageNumber: 1, pageSize: 1 }) }
|
28
|
+
|
29
|
+
it "only returns the items for the page" do
|
30
|
+
expect(response_body_hash["items"].size).to eq 1
|
31
|
+
end
|
32
|
+
end
|
12
33
|
end
|
13
34
|
end
|
14
35
|
end
|
@@ -5,7 +5,7 @@ module PactBroker
|
|
5
5
|
module Resources
|
6
6
|
describe LatestProviderPacts do
|
7
7
|
before do
|
8
|
-
allow(PactBroker::Pacts::Service).to receive(:
|
8
|
+
allow(PactBroker::Pacts::Service).to receive(:find_latest_pacts_for_provider).and_return(pacts)
|
9
9
|
allow(PactBroker::Api::Decorators::ProviderPactsDecorator).to receive(:new).and_return(decorator)
|
10
10
|
allow_any_instance_of(LatestProviderPacts).to receive(:resource_exists?).and_return(provider)
|
11
11
|
end
|
@@ -19,7 +19,7 @@ module PactBroker
|
|
19
19
|
|
20
20
|
context "with no tag" do
|
21
21
|
it "finds the pacts" do
|
22
|
-
expect(PactBroker::Pacts::Service).to receive(:
|
22
|
+
expect(PactBroker::Pacts::Service).to receive(:find_latest_pacts_for_provider).with("Bar", tag: nil)
|
23
23
|
subject
|
24
24
|
end
|
25
25
|
|
@@ -35,7 +35,7 @@ module PactBroker
|
|
35
35
|
let(:path) { "/pacts/provider/Bar/latest/prod" }
|
36
36
|
|
37
37
|
it "finds the pacts with a tag" do
|
38
|
-
expect(PactBroker::Pacts::Service).to receive(:
|
38
|
+
expect(PactBroker::Pacts::Service).to receive(:find_latest_pacts_for_provider).with("Bar", tag: "prod")
|
39
39
|
subject
|
40
40
|
end
|
41
41
|
|
@@ -5,7 +5,7 @@ module PactBroker
|
|
5
5
|
module Resources
|
6
6
|
describe ProviderPacts do
|
7
7
|
before do
|
8
|
-
allow(PactBroker::Pacts::Service).to receive(:
|
8
|
+
allow(PactBroker::Pacts::Service).to receive(:find_latest_pacts_for_provider).and_return(pacts)
|
9
9
|
allow(PactBroker::Api::Decorators::ProviderPactsDecorator).to receive(:new).and_return(decorator)
|
10
10
|
allow(PactBroker::Pacticipants::Service).to receive(:find_pacticipant_by_name).and_return(provider)
|
11
11
|
end
|
@@ -1,13 +1,9 @@
|
|
1
|
-
require "spec_helper"
|
2
1
|
require "pact_broker/api/resources/tag"
|
3
2
|
|
4
3
|
module PactBroker
|
5
4
|
module Api
|
6
|
-
|
7
5
|
module Resources
|
8
|
-
|
9
6
|
describe Tag do
|
10
|
-
|
11
7
|
let(:tag) { double("PactBroker::Domain::Tag") }
|
12
8
|
let(:tag_decorator) { instance_double("PactBroker::Api::Decorators::TagDecorator", :to_json => tag_json) }
|
13
9
|
let(:tag_json) { {"some" => "tag"}.to_json }
|
@@ -40,7 +36,6 @@ module PactBroker
|
|
40
36
|
end
|
41
37
|
|
42
38
|
context "when the tag doesn't exist" do
|
43
|
-
|
44
39
|
let(:tag) { nil }
|
45
40
|
|
46
41
|
it "returns a 404 Not Found" do
|
@@ -87,7 +82,6 @@ module PactBroker
|
|
87
82
|
subject
|
88
83
|
expect(last_response).to be_successful
|
89
84
|
end
|
90
|
-
|
91
85
|
end
|
92
86
|
|
93
87
|
context "when the tag does not exist" do
|
@@ -101,15 +95,16 @@ module PactBroker
|
|
101
95
|
end
|
102
96
|
|
103
97
|
describe "PUT" do
|
104
|
-
|
105
|
-
let(:tag_url) { "http://example.org/tag/url"}
|
106
|
-
|
107
98
|
before do
|
108
99
|
allow_any_instance_of(PactBroker::Api::Resources::Tag).to receive(:tag_url).and_return(tag_url)
|
109
100
|
allow(Tags::Service).to receive(:find).and_return(tag)
|
110
101
|
allow(PactBroker::Api::Decorators::TagDecorator).to receive(:new).and_return(tag_decorator)
|
102
|
+
allow_any_instance_of(described_class).to receive(:create_deployed_versions_for_tags?).and_return(create_deployed_versions_for_tags)
|
111
103
|
end
|
112
104
|
|
105
|
+
let(:tag_url) { "http://example.org/tag/url"}
|
106
|
+
let(:create_deployed_versions_for_tags) { false }
|
107
|
+
|
113
108
|
subject { put("/pacticipants/Condor/versions/1.3.0/tags/prod", nil, "CONTENT_LENGTH" => "0", "CONTENT_TYPE" => "application/json") }
|
114
109
|
|
115
110
|
it "returns a success response" do
|
@@ -118,7 +113,6 @@ module PactBroker
|
|
118
113
|
end
|
119
114
|
|
120
115
|
context "when the tag already exists" do
|
121
|
-
|
122
116
|
it "returns a 200" do
|
123
117
|
subject
|
124
118
|
expect(last_response.status).to be 200
|
@@ -153,13 +147,45 @@ module PactBroker
|
|
153
147
|
subject
|
154
148
|
expect(last_response.body).to eq tag_json
|
155
149
|
end
|
156
|
-
|
157
150
|
end
|
158
151
|
|
159
|
-
|
152
|
+
context "when create_deployed_versions_for_tags is true" do
|
153
|
+
before do
|
154
|
+
allow_any_instance_of(described_class).to receive(:environment_service).and_return(environment_service)
|
155
|
+
allow_any_instance_of(described_class).to receive(:deployed_version_service).and_return(deployed_version_service)
|
156
|
+
allow(environment_service).to receive(:find_by_name).and_return(environment)
|
157
|
+
allow(deployed_version_service).to receive(:next_uuid).and_return("uuid")
|
158
|
+
allow(tag).to receive(:version).and_return(version)
|
159
|
+
end
|
160
|
+
let(:environment_service) { class_double("PactBroker::Environments::Service").as_stubbed_const }
|
161
|
+
let(:deployed_version_service) { class_double("PactBroker::Deployments::DeployedVersionService").as_stubbed_const }
|
162
|
+
let(:environment) { nil }
|
163
|
+
let(:create_deployed_versions_for_tags) { true }
|
164
|
+
let(:version) { double("version") }
|
165
|
+
|
166
|
+
it "looks for a matching environment" do
|
167
|
+
expect(environment_service).to receive(:find_by_name).with("prod")
|
168
|
+
subject
|
169
|
+
end
|
160
170
|
|
161
|
-
|
171
|
+
context "when the tag name matches an existing environment" do
|
172
|
+
let(:environment) { double("environment") }
|
162
173
|
|
174
|
+
it "creates a deployed version" do
|
175
|
+
expect(deployed_version_service).to receive(:find_or_create).with(anything, version, environment, nil)
|
176
|
+
subject
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
context "when the tag name does not match an existing environment" do
|
181
|
+
it "does not create a deployed version" do
|
182
|
+
expect_any_instance_of(described_class).to_not receive(:deployed_version_service)
|
183
|
+
subject
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
163
189
|
end
|
164
190
|
end
|
165
191
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "pact_broker/db/data_migrations/set_interactions_counts"
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module DB
|
5
|
+
module DataMigrations
|
6
|
+
describe SetInteractionsCounts do
|
7
|
+
describe ".call" do
|
8
|
+
before do
|
9
|
+
td.create_consumer("Foo")
|
10
|
+
.create_provider("Bar")
|
11
|
+
.create_consumer_version("1")
|
12
|
+
.create_pact(json_content: { interactions: [1, 2] }.to_json )
|
13
|
+
.create_consumer_version("2")
|
14
|
+
.create_pact(json_content: { interactions: [1, 2, 3] }.to_json )
|
15
|
+
.create_provider("Bop")
|
16
|
+
.create_pact(json_content: { messages: [1] }.to_json )
|
17
|
+
PactBroker::Pacts::PactVersion.dataset.update(interactions_count: nil, messages_count: nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
subject { SetInteractionsCounts.call(PactBroker::Pacts::PactVersion.db) }
|
21
|
+
|
22
|
+
it "sets the interactions and messages counts" do
|
23
|
+
subject
|
24
|
+
pact_versions = PactBroker::Pacts::PactVersion.order(:id).all
|
25
|
+
expect(pact_versions[0].interactions_count).to eq nil
|
26
|
+
expect(pact_versions[0].messages_count).to eq nil
|
27
|
+
|
28
|
+
expect(pact_versions[1].interactions_count).to eq 3
|
29
|
+
expect(pact_versions[1].messages_count).to eq 0
|
30
|
+
|
31
|
+
expect(pact_versions[2].interactions_count).to eq 0
|
32
|
+
expect(pact_versions[2].messages_count).to eq 1
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "pact_broker/deployments/deployed_version_service"
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Deployments
|
5
|
+
describe DeployedVersionService do
|
6
|
+
describe ".create" do
|
7
|
+
before do
|
8
|
+
td.create_environment("test")
|
9
|
+
.create_consumer("foo")
|
10
|
+
.create_consumer_version("1")
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:version) { td.and_return(:consumer_version) }
|
14
|
+
let(:environment) { td.and_return(:environment) }
|
15
|
+
|
16
|
+
context "when the version is already currently deployed" do
|
17
|
+
it "returns the existing deployed version object" do
|
18
|
+
deployed_version_1 = DeployedVersionService.find_or_create("1234", version, environment, nil)
|
19
|
+
deployed_version_2 = DeployedVersionService.find_or_create("4321", version, environment, nil)
|
20
|
+
expect(deployed_version_1.uuid).to eq deployed_version_2.uuid
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when the version was previously deployed, but there was another version deployed in the meantime" do
|
25
|
+
before do
|
26
|
+
td.create_consumer_version("2")
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:version_1) { PactBroker::Domain::Version.order(:id).first }
|
30
|
+
let(:version_2) { PactBroker::Domain::Version.order(:id).last }
|
31
|
+
|
32
|
+
it "returns a new deployed version object" do
|
33
|
+
deployed_version_1 = DeployedVersionService.find_or_create("1234", version_1, environment, nil)
|
34
|
+
DeployedVersionService.find_or_create("4321", version_2, environment, nil)
|
35
|
+
deployed_version_3 = DeployedVersionService.find_or_create("4545", version_1, environment, nil)
|
36
|
+
expect(deployed_version_1.uuid).to_not eq deployed_version_3.uuid
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -4,6 +4,23 @@ module PactBroker
|
|
4
4
|
|
5
5
|
module Domain
|
6
6
|
describe Verification do
|
7
|
+
describe "latest_by_pact_version" do
|
8
|
+
before do
|
9
|
+
td.create_pact_with_hierarchy("Foo", "10", "Bar")
|
10
|
+
.create_verification(provider_version: "3", number: 1)
|
11
|
+
.create_verification(provider_version: "4", number: 2)
|
12
|
+
.create_pact_with_hierarchy("Foo2", "10", "Bar2")
|
13
|
+
.create_verification(provider_version: "30", number: 1)
|
14
|
+
.create_verification(provider_version: "31", number: 2)
|
15
|
+
end
|
16
|
+
|
17
|
+
subject { Verification.latest_by_pact_version.order(:id).all }
|
18
|
+
|
19
|
+
it "returns the latest by pact version" do
|
20
|
+
expect(subject.size).to eq 2
|
21
|
+
expect(subject.collect(&:provider_version_number).sort).to eq ["31", "4"]
|
22
|
+
end
|
23
|
+
end
|
7
24
|
describe "latest_verifications_for_all_consumer_version_tags" do
|
8
25
|
before do
|
9
26
|
td.create_pact_with_verification_and_tags("Foo", "1", ["fmain"], "Bar", "2")
|