pact_broker 2.40.0 → 2.41.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 +36 -0
- data/DEVELOPER_DOCUMENTATION.md +11 -0
- data/db/ddl_statements/head_pact_tags.rb +10 -0
- data/db/ddl_statements/latest_pact_consumer_version_orders.rb +16 -0
- data/db/ddl_statements/latest_pact_publications_by_consumer_versions.rb +16 -0
- data/db/ddl_statements/latest_tagged_pact_consumer_version_orders.rb +23 -0
- data/db/ddl_statements/latest_verification_ids_for_consumer_version_tags.rb +15 -0
- data/db/ddl_statements/{latest_verification_ids_for_pact_versions_v001.rb → latest_verification_ids_for_pact_versions.rb} +0 -0
- data/db/migrations/000028_create_all_pact_publications.rb +1 -0
- data/db/migrations/20180311_optimise_head_matrix.rb +1 -9
- data/db/migrations/20180722_recreate_views.rb +6 -19
- data/db/migrations/20191028_optimise_latest_tagged_pact_cv_orders.rb +13 -0
- data/db/migrations/20191030_optimise_latest_pact_publications_by_consumer_versions_.rb +13 -0
- data/db/migrations/20191031_optimise_latest_verification_ids_for_consumer_version_tags.rb +13 -0
- data/db/migrations/20191101_create_head_pact_tags.rb +11 -0
- data/lib/db.rb +1 -0
- data/lib/pact_broker/api/contracts/dry_validation_predicates.rb +15 -0
- data/lib/pact_broker/api/contracts/dry_validation_workarounds.rb +38 -0
- data/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema.rb +34 -0
- data/lib/pact_broker/api/contracts/verifiable_pacts_query_schema.rb +12 -20
- data/lib/pact_broker/api/decorators/matrix_decorator.rb +25 -6
- data/lib/pact_broker/api/decorators/relationships_csv_decorator.rb +4 -12
- data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +5 -2
- data/lib/pact_broker/api/decorators/verifiable_pacts_query_decorator.rb +21 -9
- data/lib/pact_broker/api/renderers/integrations_dot_renderer.rb +1 -1
- data/lib/pact_broker/api/resources/base_resource.rb +1 -1
- data/lib/pact_broker/api/resources/can_i_deploy.rb +2 -9
- data/lib/pact_broker/api/resources/matrix.rb +2 -8
- data/lib/pact_broker/api/resources/matrix_for_consumer_and_provider.rb +1 -0
- data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +36 -7
- data/lib/pact_broker/app.rb +1 -0
- data/lib/pact_broker/db/data_migrations/migrate_webhook_headers.rb +1 -1
- data/lib/pact_broker/db/seed_example_data.rb +8 -5
- data/lib/pact_broker/diagnostic/resources/base_resource.rb +0 -8
- data/lib/pact_broker/domain/index_item.rb +47 -16
- data/lib/pact_broker/domain/pact.rb +12 -4
- data/lib/pact_broker/domain/version.rb +2 -0
- data/lib/pact_broker/hash_refinements.rb +48 -0
- data/lib/pact_broker/index/page.rb +12 -0
- data/lib/pact_broker/index/service.rb +156 -21
- data/lib/pact_broker/integrations/integration.rb +22 -0
- data/lib/pact_broker/locale/en.yml +2 -0
- data/lib/pact_broker/logging.rb +0 -1
- data/lib/pact_broker/matrix/aggregated_row.rb +3 -9
- data/lib/pact_broker/matrix/deployment_status_summary.rb +5 -5
- data/lib/pact_broker/matrix/head_row.rb +2 -0
- data/lib/pact_broker/matrix/quick_row.rb +7 -7
- data/lib/pact_broker/matrix/repository.rb +2 -4
- data/lib/pact_broker/pacticipants/repository.rb +1 -1
- data/lib/pact_broker/pacts/pact_publication.rb +27 -4
- data/lib/pact_broker/pacts/repository.rb +41 -18
- data/lib/pact_broker/pacts/service.rb +23 -3
- data/lib/pact_broker/pacts/verifiable_pact.rb +8 -2
- data/lib/pact_broker/pacts/verifiable_pact_messages.rb +14 -8
- data/lib/pact_broker/string_refinements.rb +36 -1
- data/lib/pact_broker/tags/head_pact_tags.rb +12 -0
- data/lib/pact_broker/tags/tag_with_latest_flag.rb +0 -1
- data/lib/pact_broker/test/test_data_builder.rb +1 -1
- data/lib/pact_broker/ui/controllers/index.rb +23 -2
- data/lib/pact_broker/ui/view_models/index_item.rb +7 -1
- data/lib/pact_broker/ui/view_models/index_items.rb +10 -8
- data/lib/pact_broker/ui/view_models/matrix_line.rb +14 -21
- data/lib/pact_broker/ui/view_models/matrix_tag.rb +6 -8
- data/lib/pact_broker/ui/views/index/_pagination.haml +31 -0
- data/lib/pact_broker/ui/views/index/show-with-tags.haml +6 -3
- data/lib/pact_broker/ui/views/index/show.haml +5 -2
- data/lib/pact_broker/ui/views/matrix/show.haml +6 -9
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/webhooks/webhook.rb +2 -2
- data/lib/pact_broker/webhooks/webhook_execution_result.rb +3 -18
- data/public/javascripts/matrix.js +26 -1
- data/public/javascripts/pagination.js +1127 -0
- data/public/stylesheets/index.css +13 -0
- data/public/stylesheets/matrix.css +10 -1
- data/spec/features/get_provider_pacts_for_verification_spec.rb +44 -9
- data/spec/features/pending_pacts_spec.rb +1 -1
- data/spec/features/wip_pacts_spec.rb +138 -0
- data/spec/integration/app_spec.rb +1 -1
- data/spec/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema_spec.rb +90 -0
- data/spec/lib/pact_broker/api/contracts/verifiable_pacts_query_schema_spec.rb +26 -4
- data/spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb +36 -2
- data/spec/lib/pact_broker/api/decorators/verifiable_pact_decorator_spec.rb +24 -1
- data/spec/lib/pact_broker/api/decorators/verifiable_pacts_query_decorator_spec.rb +62 -18
- data/spec/lib/pact_broker/api/resources/base_resource_spec.rb +10 -0
- data/spec/lib/pact_broker/api/resources/provider_pacts_for_verification_spec.rb +75 -6
- data/spec/lib/pact_broker/hash_refinements_spec.rb +24 -0
- data/spec/lib/pact_broker/index/service_spec.rb +38 -2
- data/spec/lib/pact_broker/integrations/integration_spec.rb +79 -41
- data/spec/lib/pact_broker/pacts/pact_publication_spec.rb +2 -0
- data/spec/lib/pact_broker/pacts/repository_find_wip_pact_versions_for_provider_spec.rb +17 -2
- data/spec/lib/pact_broker/pacts/service_spec.rb +56 -0
- data/spec/lib/pact_broker/pacts/verifiable_pact_messages_spec.rb +12 -1
- data/spec/lib/pact_broker/ui/controllers/index_spec.rb +28 -6
- data/spec/lib/pact_broker/ui/view_models/index_items_spec.rb +8 -29
- data/spec/lib/pact_broker/ui/view_models/matrix_line_spec.rb +41 -0
- metadata +24 -3
@@ -142,3 +142,16 @@ div.getting-started {
|
|
142
142
|
td.to-be-deleted {
|
143
143
|
background-color: #f2dede !important
|
144
144
|
}
|
145
|
+
|
146
|
+
div.pagination {
|
147
|
+
width: 100%;
|
148
|
+
text-align: center;
|
149
|
+
}
|
150
|
+
|
151
|
+
nav.paginationjs {
|
152
|
+
display: inline-block;
|
153
|
+
}
|
154
|
+
|
155
|
+
div.pagination div.nav-footer {
|
156
|
+
color: gray;
|
157
|
+
}
|
@@ -18,4 +18,13 @@ div.tag-parent {
|
|
18
18
|
|
19
19
|
div.tag {
|
20
20
|
display: inline-block;
|
21
|
-
}
|
21
|
+
}
|
22
|
+
|
23
|
+
span.pre-verified-icon {
|
24
|
+
color: #337ab7;
|
25
|
+
}
|
26
|
+
|
27
|
+
/* Need to make the tooltip wide enough to show the full SHA */
|
28
|
+
td.pact-published .tooltip-inner {
|
29
|
+
max-width: 300px;
|
30
|
+
}
|
@@ -1,7 +1,13 @@
|
|
1
1
|
describe "Get provider pacts for verification" do
|
2
2
|
let(:last_response_body) { JSON.parse(subject.body, symbolize_names: true) }
|
3
3
|
let(:pacts) { last_response_body[:_embedded][:'pacts'] }
|
4
|
-
|
4
|
+
let(:query) do
|
5
|
+
{
|
6
|
+
consumer_version_selectors: [ { tag: "prod", latest: "true" }]
|
7
|
+
}
|
8
|
+
end
|
9
|
+
|
10
|
+
subject { get(path, query) }
|
5
11
|
|
6
12
|
context "when the provider exists" do
|
7
13
|
before do
|
@@ -16,24 +22,53 @@ describe "Get provider pacts for verification" do
|
|
16
22
|
.create_pact
|
17
23
|
end
|
18
24
|
|
19
|
-
|
20
|
-
let(:path) { "/pacts/provider/Provider/for-verification" }
|
25
|
+
let(:path) { "/pacts/provider/Provider/for-verification" }
|
21
26
|
|
27
|
+
context "when using GET" do
|
22
28
|
it "returns a 200 HAL JSON response" do
|
23
29
|
expect(subject).to be_a_hal_json_success_response
|
24
30
|
end
|
25
31
|
|
26
32
|
it "returns a list of links to the pacts" do
|
27
|
-
expect(pacts.size).to eq
|
33
|
+
expect(pacts.size).to eq 1
|
34
|
+
end
|
35
|
+
|
36
|
+
context "when the provider does not exist" do
|
37
|
+
let(:path) { "/pacts/provider/ProviderThatDoesNotExist/for-verification" }
|
38
|
+
|
39
|
+
it "returns a 404 response" do
|
40
|
+
expect(subject).to be_a_404_response
|
41
|
+
end
|
28
42
|
end
|
29
43
|
end
|
30
|
-
end
|
31
44
|
|
32
|
-
|
33
|
-
|
45
|
+
context "when using POST" do
|
46
|
+
let(:request_body) do
|
47
|
+
{
|
48
|
+
consumerVersionSelectors: [ { tag: "prod", latest: true }]
|
49
|
+
}
|
50
|
+
end
|
34
51
|
|
35
|
-
|
36
|
-
|
52
|
+
let(:request_headers) do
|
53
|
+
{
|
54
|
+
'CONTENT_TYPE' => 'application/json',
|
55
|
+
'HTTP_ACCEPT' => 'application/hal+json'
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
subject { post(path, request_body.to_json, request_headers) }
|
60
|
+
|
61
|
+
it "returns a list of links to the pacts" do
|
62
|
+
expect(pacts.size).to eq 1
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when the provider does not exist" do
|
66
|
+
let(:path) { "/pacts/provider/ProviderThatDoesNotExist/for-verification" }
|
67
|
+
|
68
|
+
it "returns a 404 response" do
|
69
|
+
expect(subject).to be_a_404_response
|
70
|
+
end
|
71
|
+
end
|
37
72
|
end
|
38
73
|
end
|
39
74
|
end
|
@@ -20,7 +20,7 @@ RSpec.describe "the pending lifecycle of a pact (with no tags)" do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def get_pacts_for_verification
|
23
|
-
|
23
|
+
post("/pacts/provider/Bar/for-verification", { includePendingStatus: true }.to_json, request_headers)
|
24
24
|
end
|
25
25
|
|
26
26
|
def pact_url_from(pacts_for_verification_response)
|
@@ -0,0 +1,138 @@
|
|
1
|
+
RSpec.describe "the lifecycle of a WIP pact" do
|
2
|
+
let(:pact_content_1) { { interactions: [{ some: 'interaction'}] }.to_json }
|
3
|
+
let(:pact_content_2) { { interactions: [{ some: 'other interaction'}] }.to_json }
|
4
|
+
let(:request_headers) { { "CONTENT_TYPE" => "application/json", "HTTP_ACCEPT" => "application/hal+json"} }
|
5
|
+
let(:provider_version_number) { "2" }
|
6
|
+
let(:failed_verification_results) do
|
7
|
+
{
|
8
|
+
providerApplicationVersion: provider_version_number,
|
9
|
+
success: false
|
10
|
+
}.to_json
|
11
|
+
end
|
12
|
+
let(:successful_verification_results) do
|
13
|
+
{
|
14
|
+
providerApplicationVersion: provider_version_number,
|
15
|
+
success: true
|
16
|
+
}.to_json
|
17
|
+
end
|
18
|
+
let(:pacts_for_verification_request_body) do
|
19
|
+
{
|
20
|
+
consumerVersionSelectors: [ { tag: "master", latest: true } ],
|
21
|
+
providerVersionTags: ["master"],
|
22
|
+
includeWipPactsSince: start_date
|
23
|
+
}.to_json
|
24
|
+
end
|
25
|
+
let(:start_date) { (Date.today - 1).to_datetime }
|
26
|
+
|
27
|
+
def publish_pact_with_master_tag
|
28
|
+
put("/pacts/provider/Bar/consumer/Foo/version/1", pact_content_1, request_headers)
|
29
|
+
put("/pacticipants/Foo/versions/1/tags/master", nil, request_headers)
|
30
|
+
end
|
31
|
+
|
32
|
+
def publish_pact_with_feature_tag
|
33
|
+
put("/pacts/provider/Bar/consumer/Foo/version/2", pact_content_2, request_headers)
|
34
|
+
put("/pacticipants/Foo/versions/2/tags/feat-x", nil, request_headers)
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_pacts_for_verification
|
38
|
+
post("/pacts/provider/Bar/for-verification", pacts_for_verification_request_body, request_headers)
|
39
|
+
end
|
40
|
+
|
41
|
+
def wip_pact_url_from(pacts_for_verification_response)
|
42
|
+
wip_pacts_from(pacts_for_verification_response).first["_links"]["self"]["href"]
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_pact(pact_url)
|
46
|
+
get pact_url, nil, request_headers
|
47
|
+
end
|
48
|
+
|
49
|
+
def verification_results_url_from(pact_response)
|
50
|
+
JSON.parse(pact_response.body)["_links"]["pb:publish-verification-results"]["href"]
|
51
|
+
end
|
52
|
+
|
53
|
+
def publish_verification_results_with_tag_master(verification_results_url, results)
|
54
|
+
post(verification_results_url, results, request_headers)
|
55
|
+
put("/pacticipants/Bar/versions/#{provider_version_number}/tags/master", nil, request_headers)
|
56
|
+
end
|
57
|
+
|
58
|
+
def pending_status_from(pacts_for_verification_response)
|
59
|
+
JSON.parse(pacts_for_verification_response.body)["_embedded"]["pacts"][0]["verificationProperties"]["pending"]
|
60
|
+
end
|
61
|
+
|
62
|
+
def wip_pacts_from(pacts_for_verification_response)
|
63
|
+
JSON.parse(pacts_for_verification_response.body)["_embedded"]["pacts"].select do | pact |
|
64
|
+
pact["verificationProperties"]["wip"]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "when the includeWipPactsSince date is specified" do
|
69
|
+
context "a pact published afer the specified date, with a tag that is not specified explictly in the 'pacts for verification' request" do
|
70
|
+
describe "when it is first published" do
|
71
|
+
it "is included in the list of pacts to verify as a WIP pact" do
|
72
|
+
publish_pact_with_master_tag
|
73
|
+
publish_pact_with_feature_tag
|
74
|
+
|
75
|
+
pacts_for_verification_response = get_pacts_for_verification
|
76
|
+
expect(wip_pacts_from(pacts_for_verification_response).size).to eq 1
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "when it is verified unsuccessfully" do
|
81
|
+
it "is still included as a WIP pact" do
|
82
|
+
# CONSUMER BUILD
|
83
|
+
# publish pact
|
84
|
+
publish_pact_with_master_tag
|
85
|
+
publish_pact_with_feature_tag
|
86
|
+
|
87
|
+
# PROVIDER BUILD
|
88
|
+
# fetch pacts to verify
|
89
|
+
pacts_for_verification_response = get_pacts_for_verification
|
90
|
+
pact_url = wip_pact_url_from(pacts_for_verification_response)
|
91
|
+
pact_response = get_pact(pact_url)
|
92
|
+
|
93
|
+
# verify pact... failure...
|
94
|
+
|
95
|
+
# publish failure verification results
|
96
|
+
verification_results_url = verification_results_url_from(pact_response)
|
97
|
+
publish_verification_results_with_tag_master(verification_results_url, failed_verification_results)
|
98
|
+
|
99
|
+
# ANOTHER PROVIDER BUILD
|
100
|
+
# get pacts for verification
|
101
|
+
pacts_for_verification_response = get_pacts_for_verification
|
102
|
+
# still pending
|
103
|
+
expect(wip_pacts_from(pacts_for_verification_response).size).to eq 1
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "when it is verified successfully" do
|
108
|
+
it "is no longer included in the list of pacts to verify" do
|
109
|
+
# CONSUMER BUILD
|
110
|
+
publish_pact_with_master_tag
|
111
|
+
publish_pact_with_feature_tag
|
112
|
+
|
113
|
+
# PROVIDER BUILD
|
114
|
+
# fetch pacts to verify
|
115
|
+
pacts_for_verification_response = get_pacts_for_verification
|
116
|
+
pact_url = wip_pact_url_from(pacts_for_verification_response)
|
117
|
+
pact_response = get_pact(pact_url)
|
118
|
+
|
119
|
+
# verify pact... success!
|
120
|
+
|
121
|
+
# publish failure verification results
|
122
|
+
verification_results_url = verification_results_url_from(pact_response)
|
123
|
+
publish_verification_results_with_tag_master(verification_results_url, successful_verification_results)
|
124
|
+
|
125
|
+
|
126
|
+
# ANOTHER PROVIDER BUILD 2
|
127
|
+
# get pacts for verification
|
128
|
+
# publish successful verification results
|
129
|
+
pacts_for_verification_response = get_pacts_for_verification
|
130
|
+
# not wip any more
|
131
|
+
expect(wip_pacts_from(pacts_for_verification_response).size).to eq 0
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'pact_broker/api/contracts/verifiable_pacts_json_query_schema'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Api
|
5
|
+
module Contracts
|
6
|
+
describe VerifiablePactsJSONQuerySchema do
|
7
|
+
let(:params) do
|
8
|
+
{
|
9
|
+
providerVersionTags: provider_version_tags,
|
10
|
+
consumerVersionSelectors: consumer_version_selectors
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:provider_version_tags) { %w[master] }
|
15
|
+
|
16
|
+
let(:consumer_version_selectors) do
|
17
|
+
[{
|
18
|
+
tag: "master",
|
19
|
+
latest: true
|
20
|
+
}]
|
21
|
+
end
|
22
|
+
|
23
|
+
subject { VerifiablePactsJSONQuerySchema.(params) }
|
24
|
+
|
25
|
+
context "when the params are valid" do
|
26
|
+
it "has no errors" do
|
27
|
+
expect(subject).to eq({})
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "when providerVersionTags is not an array" do
|
32
|
+
let(:provider_version_tags) { true }
|
33
|
+
|
34
|
+
it { is_expected.to have_key(:providerVersionTags) }
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when consumerVersionSelectors is not an array" do
|
38
|
+
let(:consumer_version_selectors) { true }
|
39
|
+
|
40
|
+
it { is_expected.to have_key(:consumerVersionSelectors) }
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when the consumer_version_selector is missing a tag" do
|
44
|
+
let(:consumer_version_selectors) do
|
45
|
+
[{}]
|
46
|
+
end
|
47
|
+
|
48
|
+
it "flattens the messages" do
|
49
|
+
expect(subject[:consumerVersionSelectors].first).to eq "tag is missing at index 0"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "when the consumerVersionSelectors is missing the latest" do
|
54
|
+
let(:consumer_version_selectors) do
|
55
|
+
[{
|
56
|
+
tag: "master"
|
57
|
+
}]
|
58
|
+
end
|
59
|
+
|
60
|
+
it { is_expected.to have_key(:consumerVersionSelectors) }
|
61
|
+
end
|
62
|
+
|
63
|
+
context "when includeWipPactsSince key exists" do
|
64
|
+
let(:include_wip_pacts_since) { nil }
|
65
|
+
let(:params) do
|
66
|
+
{
|
67
|
+
includeWipPactsSince: include_wip_pacts_since
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
context "when it is nil" do
|
72
|
+
it { is_expected.to have_key(:includeWipPactsSince) }
|
73
|
+
end
|
74
|
+
|
75
|
+
context "when it is not a date" do
|
76
|
+
let(:include_wip_pacts_since) { "foo" }
|
77
|
+
|
78
|
+
it { is_expected.to have_key(:includeWipPactsSince) }
|
79
|
+
end
|
80
|
+
|
81
|
+
context "when it is a valid date" do
|
82
|
+
let(:include_wip_pacts_since) { "2013-02-13T20:04:45.000+11:00" }
|
83
|
+
|
84
|
+
it { is_expected.to_not have_key(:includeWipPactsSince) }
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -4,7 +4,6 @@ module PactBroker
|
|
4
4
|
module Api
|
5
5
|
module Contracts
|
6
6
|
describe VerifiablePactsQuerySchema do
|
7
|
-
|
8
7
|
let(:params) do
|
9
8
|
{
|
10
9
|
provider_version_tags: provider_version_tags,
|
@@ -45,15 +44,38 @@ module PactBroker
|
|
45
44
|
end
|
46
45
|
end
|
47
46
|
|
48
|
-
context "
|
47
|
+
context "when the consumer_version_selectors is missing the latest" do
|
49
48
|
let(:consumer_version_selectors) do
|
50
49
|
[{
|
51
50
|
tag: "master"
|
52
51
|
}]
|
53
52
|
end
|
54
53
|
|
55
|
-
it
|
56
|
-
|
54
|
+
it { is_expected.to have_key(:consumer_version_selectors) }
|
55
|
+
end
|
56
|
+
|
57
|
+
context "when include_wip_pacts_since key exists" do
|
58
|
+
let(:include_wip_pacts_since) { nil }
|
59
|
+
let(:params) do
|
60
|
+
{
|
61
|
+
include_wip_pacts_since: include_wip_pacts_since
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when it is nil" do
|
66
|
+
it { is_expected.to have_key(:include_wip_pacts_since) }
|
67
|
+
end
|
68
|
+
|
69
|
+
context "when it is not a date" do
|
70
|
+
let(:include_wip_pacts_since) { "foo" }
|
71
|
+
|
72
|
+
it { is_expected.to have_key(:include_wip_pacts_since) }
|
73
|
+
end
|
74
|
+
|
75
|
+
context "when it is a valid date" do
|
76
|
+
let(:include_wip_pacts_since) { "2013-02-13T20:04:45.000+11:00" }
|
77
|
+
|
78
|
+
it { is_expected.to_not have_key(:include_wip_pacts_since) }
|
57
79
|
end
|
58
80
|
end
|
59
81
|
end
|
@@ -16,6 +16,8 @@ module PactBroker
|
|
16
16
|
{
|
17
17
|
consumer_name: "Consumer",
|
18
18
|
consumer_version_number: "1.0.0",
|
19
|
+
consumer_version_tags: consumer_version_tags,
|
20
|
+
provider_version_tags: provider_version_tags,
|
19
21
|
pact_version_sha: "1234",
|
20
22
|
pact_created_at: pact_created_at,
|
21
23
|
provider_version_number: "4.5.6",
|
@@ -33,6 +35,7 @@ module PactBroker
|
|
33
35
|
{
|
34
36
|
consumer_name: "Consumer",
|
35
37
|
consumer_version_number: "1.0.0",
|
38
|
+
consumer_version_tags: [],
|
36
39
|
pact_version_sha: "1234",
|
37
40
|
pact_created_at: pact_created_at,
|
38
41
|
provider_version_number: nil,
|
@@ -59,7 +62,14 @@ module PactBroker
|
|
59
62
|
self: {
|
60
63
|
href: 'http://example.org/pacticipants/Consumer/versions/1.0.0'
|
61
64
|
}
|
62
|
-
}
|
65
|
+
},
|
66
|
+
tags: [
|
67
|
+
{
|
68
|
+
name: 'prod',
|
69
|
+
latest: true
|
70
|
+
|
71
|
+
}
|
72
|
+
]
|
63
73
|
}
|
64
74
|
}
|
65
75
|
end
|
@@ -73,7 +83,19 @@ module PactBroker
|
|
73
83
|
}
|
74
84
|
},
|
75
85
|
version: {
|
76
|
-
number: '4.5.6'
|
86
|
+
number: '4.5.6',
|
87
|
+
_links: {
|
88
|
+
self: {
|
89
|
+
href: 'http://example.org/pacticipants/Provider/versions/4.5.6'
|
90
|
+
}
|
91
|
+
},
|
92
|
+
tags: [
|
93
|
+
{
|
94
|
+
name: 'master',
|
95
|
+
latest: false
|
96
|
+
}
|
97
|
+
]
|
98
|
+
|
77
99
|
}
|
78
100
|
}
|
79
101
|
end
|
@@ -101,6 +123,18 @@ module PactBroker
|
|
101
123
|
}
|
102
124
|
end
|
103
125
|
|
126
|
+
let(:consumer_version_tags) do
|
127
|
+
[
|
128
|
+
double('tag', name: 'prod', latest?: true)
|
129
|
+
]
|
130
|
+
end
|
131
|
+
|
132
|
+
let(:provider_version_tags) do
|
133
|
+
[
|
134
|
+
double('tag', name: 'master', latest?: false)
|
135
|
+
]
|
136
|
+
end
|
137
|
+
|
104
138
|
let(:query_results){ PactBroker::Matrix::QueryResultsWithDeploymentStatusSummary.new([row_1, row_2], selectors, options, resolved_selectors, integrations, deployment_status_summary)}
|
105
139
|
let(:selectors) { nil }
|
106
140
|
let(:integrations){ [] }
|