pact_broker 2.83.0 → 2.84.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 +19 -0
- data/Dockerfile +1 -1
- data/db/migrations/20210816_create_branches_tables.rb +40 -0
- data/db/migrations/20210831_add_index_to_pact_publications.rb +7 -0
- data/db/migrations/20210908_add_auto_created.rb +24 -0
- data/issue-reproduction/Dockerfile-pact-broker +1 -1
- data/lib/pact_broker/api/contracts/{verifiable_pacts_json_query_schema.rb → pacts_for_verification_json_query_schema.rb} +1 -1
- data/lib/pact_broker/api/contracts/{verifiable_pacts_query_schema.rb → pacts_for_verification_query_string_schema.rb} +1 -1
- data/lib/pact_broker/api/decorators/branch_version_decorator.rb +20 -0
- data/lib/pact_broker/api/decorators/dashboard_decorator.rb +4 -2
- data/lib/pact_broker/api/decorators/embedded_branch_version_decorator.rb +21 -0
- data/lib/pact_broker/api/decorators/embedded_tag_decorator.rb +0 -5
- data/lib/pact_broker/api/decorators/matrix_decorator.rb +11 -2
- data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +8 -0
- data/lib/pact_broker/api/decorators/{verifiable_pacts_query_decorator.rb → pacts_for_verification_query_decorator.rb} +2 -2
- data/lib/pact_broker/api/decorators/version_decorator.rb +1 -1
- data/lib/pact_broker/api/pact_broker_urls.rb +8 -0
- data/lib/pact_broker/api/resources/branch_version.rb +48 -0
- data/lib/pact_broker/api/resources/index.rb +6 -0
- data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +6 -6
- data/lib/pact_broker/api/resources/version.rb +0 -8
- data/lib/pact_broker/api.rb +1 -0
- data/lib/pact_broker/config/runtime_configuration.rb +12 -0
- data/lib/pact_broker/contracts/service.rb +1 -1
- data/lib/pact_broker/db/data_migrations/create_branches.rb +97 -0
- data/lib/pact_broker/db/data_migrations/set_pacticipant_main_branch.rb +2 -0
- data/lib/pact_broker/db/migrate_data.rb +1 -1
- data/lib/pact_broker/db/models.rb +6 -0
- data/lib/pact_broker/deployments/deployed_version.rb +4 -0
- data/lib/pact_broker/deployments/deployed_version_service.rb +4 -3
- data/lib/pact_broker/deployments/environment.rb +4 -0
- data/lib/pact_broker/deployments/environment_service.rb +13 -8
- data/lib/pact_broker/doc/views/index/pacticipant-branch-version.markdown +14 -0
- data/lib/pact_broker/doc/views/webhooks.markdown +1 -0
- data/lib/pact_broker/domain/index_item.rb +15 -17
- data/lib/pact_broker/domain/pacticipant.rb +11 -0
- data/lib/pact_broker/domain/tag.rb +1 -2
- data/lib/pact_broker/domain/verification.rb +16 -13
- data/lib/pact_broker/domain/version.rb +87 -33
- data/lib/pact_broker/index/service.rb +8 -4
- data/lib/pact_broker/locale/en.yml +1 -0
- data/lib/pact_broker/matrix/quick_row.rb +6 -6
- data/lib/pact_broker/metrics/service.rb +7 -1
- data/lib/pact_broker/pacts/pact_publication.rb +22 -25
- data/lib/pact_broker/pacts/pact_publication_dataset_module.rb +74 -33
- data/lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb +18 -13
- data/lib/pact_broker/pacts/pact_publication_wip_dataset_module.rb +16 -4
- data/lib/pact_broker/pacts/pact_version.rb +11 -0
- data/lib/pact_broker/pacts/pacts_for_verification_repository.rb +3 -3
- data/lib/pact_broker/pacts/selected_pact.rb +2 -2
- data/lib/pact_broker/pacts/selector.rb +98 -33
- data/lib/pact_broker/repositories.rb +5 -0
- data/lib/pact_broker/services.rb +9 -0
- data/lib/pact_broker/test/http_test_data_builder.rb +32 -7
- data/lib/pact_broker/test/test_data_builder.rb +25 -24
- data/lib/pact_broker/ui/view_models/index_item.rb +11 -0
- data/lib/pact_broker/ui/view_models/matrix_branch.rb +39 -0
- data/lib/pact_broker/ui/view_models/matrix_line.rb +11 -16
- data/lib/pact_broker/ui/views/index/show-with-tags.haml +12 -11
- data/lib/pact_broker/ui/views/matrix/show.haml +8 -8
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/versions/branch.rb +29 -0
- data/lib/pact_broker/versions/branch_head.rb +45 -0
- data/lib/pact_broker/versions/branch_service.rb +24 -0
- data/lib/pact_broker/versions/branch_version.rb +64 -0
- data/lib/pact_broker/versions/branch_version_repository.rb +34 -0
- data/lib/pact_broker/versions/eager_loaders.rb +0 -42
- data/lib/pact_broker/versions/repository.rb +25 -12
- data/lib/pact_broker/versions/service.rb +3 -22
- data/lib/pact_broker/webhooks/pact_and_verification_parameters.rb +11 -2
- data/lib/sequel/plugins/insert_ignore.rb +4 -0
- data/lib/sequel/plugins/upsert.rb +4 -0
- data/public/javascripts/index.js +129 -34
- data/scaffolding/templates/decorator.rb.erb +3 -1
- data/scaffolding/templates/migration.erb +1 -1
- data/scaffolding/templates/model.erb +2 -2
- data/scaffolding/templates/repository.rb.erb +2 -2
- data/scaffolding/templates/repository_spec.rb.erb +1 -1
- data/scaffolding/templates/resource.erb +2 -2
- data/scaffolding/templates/resource_spec.rb.erb +1 -1
- data/scaffolding/templates/service.rb.erb +3 -3
- data/scaffolding/templates/service_spec.rb.erb +1 -1
- data/script/data/branches.rb +35 -0
- data/script/data/issue-494.rb +25 -0
- data/spec/features/create_branch_version_spec.rb +29 -0
- data/spec/features/create_tag_spec.rb +1 -1
- data/spec/features/create_version_spec.rb +2 -4
- data/spec/features/get_branch_version_spec.rb +12 -0
- data/spec/features/publish_pact_all_in_one_spec.rb +0 -1
- data/spec/features/update_version_spec.rb +0 -55
- data/spec/fixtures/approvals/modifiable_resources.approved.json +3 -0
- data/spec/fixtures/approvals/publish_contract_nothing_exists.approved.json +1 -2
- data/spec/fixtures/approvals/publish_contract_nothing_exists_with_webhook.approved.json +1 -2
- data/spec/fixtures/approvals/publish_contract_verification_already_exists.approved.json +1 -2
- data/spec/fixtures/dashboard.json +4 -2
- data/spec/integration/ui/index_spec.rb +0 -2
- data/spec/integration/ui/matrix_spec.rb +0 -1
- data/spec/lib/pact_broker/api/contracts/{verifiable_pacts_json_query_schema_combinations_spec.rb → pacts_for_verification_json_query_schema_combinations_spec.rb} +6 -6
- data/spec/lib/pact_broker/api/contracts/{verifiable_pacts_json_query_schema_spec.rb → pacts_for_verification_json_query_schema_spec.rb} +3 -3
- data/spec/lib/pact_broker/api/contracts/{verifiable_pacts_query_schema_spec.rb → pacts_for_verification_query_string_schema_spec.rb} +3 -3
- data/spec/lib/pact_broker/api/decorators/dashboard_decorator_spec.rb +7 -7
- data/spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb +19 -4
- data/spec/lib/pact_broker/api/decorators/{verifiable_pacts_query_decorator_spec.rb → pacts_for_verification_query_decorator_spec.rb} +3 -3
- data/spec/lib/pact_broker/api/decorators/version_decorator_spec.rb +7 -3
- data/spec/lib/pact_broker/contracts/service_spec.rb +24 -3
- data/spec/lib/pact_broker/db/data_migrations/create_branches_spec.rb +57 -0
- data/spec/lib/pact_broker/domain/index_item_spec.rb +1 -1
- data/spec/lib/pact_broker/domain/version_spec.rb +1 -35
- data/spec/lib/pact_broker/metrics/service_spec.rb +4 -1
- data/spec/lib/pact_broker/pacts/pact_publication_dataset_module_spec.rb +109 -10
- data/spec/lib/pact_broker/pacts/pact_publication_selector_dataset_module_spec.rb +3 -2
- data/spec/lib/pact_broker/pacts/pact_publication_spec.rb +5 -5
- data/spec/lib/pact_broker/pacts/repository_find_for_currently_deployed_spec.rb +2 -2
- data/spec/lib/pact_broker/pacts/repository_find_for_currently_supported_releases_spec.rb +2 -2
- data/spec/lib/pact_broker/pacts/selector_spec.rb +45 -3
- data/spec/lib/pact_broker/pacts/verifiable_pact_messages_spec.rb +5 -5
- data/spec/lib/pact_broker/relationships/groupify_spec.rb +0 -5
- data/spec/lib/pact_broker/ui/view_models/index_item_spec.rb +15 -3
- data/spec/lib/pact_broker/verifications/repository_spec.rb +1 -1
- data/spec/lib/pact_broker/versions/branch_service_spec.rb +71 -0
- data/spec/lib/pact_broker/versions/branch_version_repository_spec.rb +81 -0
- data/spec/lib/pact_broker/versions/branch_version_spec.rb +27 -0
- data/spec/lib/pact_broker/versions/repository_spec.rb +91 -6
- data/spec/lib/pact_broker/versions/service_spec.rb +4 -3
- data/spec/lib/pact_broker/webhooks/render_spec.rb +6 -0
- data/spec/lib/sequel/plugins/upsert_spec.rb +11 -5
- data/spec/migrations/44_add_provider_version_to_verification_spec.rb +6 -9
- metadata +42 -15
- data/lib/pact_broker/versions/lazy_loaders.rb +0 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d104329cabc691c2ec288acee11837621c8970181a6dddf7d4bf7e4c5d3f48fe
|
|
4
|
+
data.tar.gz: d7c5c2a75605aa5f947495670d995d5d5500f487dff86ae676da3bd883c55510
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7a973402c0c004acd5f94cc0c04efec0ded2039f43dfd3e2ca7ba014b853f958345b2ada02c05af05748416dbe466596920d8112c34efd71a5533c212ab6002c
|
|
7
|
+
data.tar.gz: 9bf006fa32ad47353df1bb9704a8da05205de57da618273ca0c0cb3b487c570951caa1e0ab3624177aa82a12c329d63aeba11c07c87b1eaa1e368956edd72250
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
<a name="v2.84.0"></a>
|
|
2
|
+
### v2.84.0 (2021-09-10)
|
|
3
|
+
|
|
4
|
+
#### Features
|
|
5
|
+
|
|
6
|
+
* use the first tag as the branch when publishing pacts using the contracts/publish endpoint ([7b903c1d](/../../commit/7b903c1d))
|
|
7
|
+
* support multiple branches per version (#495) ([acff2fcc](/../../commit/acff2fcc))
|
|
8
|
+
* Support deleting all pacts for a specific tag in the UI (#480) ([10dda8ae](/../../commit/10dda8ae))
|
|
9
|
+
* add webhook template parameter for GItlab verification statuses (#493) ([390ae0d8](/../../commit/390ae0d8))
|
|
10
|
+
|
|
11
|
+
* **pacts for verification**
|
|
12
|
+
* include pending status for responses by default when includePendingStatus is not specified ([748d3b87](/../../commit/748d3b87))
|
|
13
|
+
|
|
14
|
+
#### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* when the latest version for a tag does not have a pact, do not return a pact for the 'latest tag' selector ([374c77ce](/../../commit/374c77ce))
|
|
17
|
+
* issue-reproduction/Dockerfile-pact-broker to reduce vulnerabilities (#491) ([9692b465](/../../commit/9692b465))
|
|
18
|
+
* Dockerfile to reduce vulnerabilities (#496) ([57c190ef](/../../commit/57c190ef))
|
|
19
|
+
|
|
1
20
|
<a name="v2.83.0"></a>
|
|
2
21
|
### v2.83.0 (2021-08-19)
|
|
3
22
|
|
data/Dockerfile
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
Sequel.migration do
|
|
2
|
+
change do
|
|
3
|
+
create_table(:branches, charset: "utf8") do
|
|
4
|
+
primary_key :id
|
|
5
|
+
String :name
|
|
6
|
+
foreign_key :pacticipant_id, :pacticipants, null: false, on_delete: :cascade
|
|
7
|
+
DateTime :created_at, null: false
|
|
8
|
+
DateTime :updated_at, null: false
|
|
9
|
+
index [:pacticipant_id, :name], unique: true, name: :branches_pacticipant_id_name_index
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
create_table(:branch_versions, charset: "utf8") do
|
|
13
|
+
primary_key :id
|
|
14
|
+
foreign_key :branch_id, :branches, null: false, foreign_key_constraint_name: :branch_versions_branches_fk, on_delete: :cascade
|
|
15
|
+
foreign_key :version_id, :versions, null: false, foreign_key_constraint_name: :branch_versions_versions_fk, on_delete: :cascade
|
|
16
|
+
Integer :version_order, null: false
|
|
17
|
+
Integer :pacticipant_id, null: false
|
|
18
|
+
String :branch_name, null: false
|
|
19
|
+
DateTime :created_at, null: false
|
|
20
|
+
DateTime :updated_at, null: false
|
|
21
|
+
index [:branch_id, :version_id], unique: true, name: :branch_versions_branch_id_version_id_index
|
|
22
|
+
index [:version_id], name: :branch_versions_version_id_index
|
|
23
|
+
index [:branch_name], name: :branch_versions_branch_name_index
|
|
24
|
+
# Can probably drop this index when the "latest pact" logic changes
|
|
25
|
+
index [:pacticipant_id, :branch_id, :version_order], name: :branch_versions_pacticipant_id_branch_id_version_order_index
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
create_table(:branch_heads) do
|
|
29
|
+
foreign_key :branch_id, :branches, null: false, on_delete: :cascade
|
|
30
|
+
foreign_key :branch_version_id, :branch_versions, null: false, on_delete: :cascade
|
|
31
|
+
Integer :version_id, null: false
|
|
32
|
+
Integer :pacticipant_id, null: false
|
|
33
|
+
String :branch_name, null: false
|
|
34
|
+
index [:branch_id], unique: true, name: :branch_heads_branch_id_index
|
|
35
|
+
index [:branch_name], name: :branch_heads_branch_name_index
|
|
36
|
+
index [:pacticipant_id], name: :branch_heads_pacticipant_id_index
|
|
37
|
+
index [:version_id], name: :branch_heads_version_id_index
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Sequel.migration do
|
|
2
|
+
up do
|
|
3
|
+
alter_table(:branch_versions) do
|
|
4
|
+
add_column(:auto_created, TrueClass, default: false)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
alter_table(:deployed_versions) do
|
|
8
|
+
add_column(:auto_created, TrueClass, default: false)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
from(:branch_versions).update(auto_created: true)
|
|
12
|
+
from(:deployed_versions).update(auto_created: true)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
down do
|
|
16
|
+
alter_table(:branch_versions) do
|
|
17
|
+
drop_column(:auto_created)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
alter_table(:deployed_versions) do
|
|
21
|
+
drop_column(:auto_created)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -5,7 +5,7 @@ require "pact_broker/api/contracts/dry_validation_predicates"
|
|
|
5
5
|
module PactBroker
|
|
6
6
|
module Api
|
|
7
7
|
module Contracts
|
|
8
|
-
class
|
|
8
|
+
class PactsForVerificationQueryStringSchema
|
|
9
9
|
extend DryValidationWorkarounds
|
|
10
10
|
using PactBroker::HashRefinements
|
|
11
11
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require "pact_broker/api/decorators/base_decorator"
|
|
2
|
+
require "pact_broker/api/decorators/timestamps"
|
|
3
|
+
|
|
4
|
+
module PactBroker
|
|
5
|
+
module Api
|
|
6
|
+
module Decorators
|
|
7
|
+
class BranchVersionDecorator < BaseDecorator
|
|
8
|
+
|
|
9
|
+
link :self do | user_options |
|
|
10
|
+
{
|
|
11
|
+
title: "Branch version",
|
|
12
|
+
href: branch_version_url(represented, user_options.fetch(:base_url))
|
|
13
|
+
}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
include Timestamps
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -58,7 +58,8 @@ module PactBroker
|
|
|
58
58
|
name: index_item.consumer_name,
|
|
59
59
|
version: {
|
|
60
60
|
number: index_item.consumer_version_number,
|
|
61
|
-
branch: index_item.
|
|
61
|
+
branch: index_item.consumer_version_branches.last,
|
|
62
|
+
headBranchNames: index_item.consumer_version_branches,
|
|
62
63
|
_links: {
|
|
63
64
|
self: {
|
|
64
65
|
href: version_url(base_url, index_item.consumer_version)
|
|
@@ -87,7 +88,8 @@ module PactBroker
|
|
|
87
88
|
if index_item.latest_verification
|
|
88
89
|
hash[:version] = {
|
|
89
90
|
number: index_item.provider_version_number,
|
|
90
|
-
branch: index_item.
|
|
91
|
+
branch: index_item.provider_version_branches.last,
|
|
92
|
+
headBranchNames: index_item.provider_version_branches
|
|
91
93
|
}
|
|
92
94
|
end
|
|
93
95
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require_relative "base_decorator"
|
|
2
|
+
require_relative "timestamps"
|
|
3
|
+
|
|
4
|
+
module PactBroker
|
|
5
|
+
module Api
|
|
6
|
+
module Decorators
|
|
7
|
+
class EmbeddedBranchVersionDecorator < BaseDecorator
|
|
8
|
+
property :branch_name, as: :name
|
|
9
|
+
property :latest?, as: :latest
|
|
10
|
+
|
|
11
|
+
link :self do | options |
|
|
12
|
+
{
|
|
13
|
+
title: "Version branch",
|
|
14
|
+
name: represented.branch_name,
|
|
15
|
+
href: branch_version_url(represented, options[:base_url])
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
require_relative "base_decorator"
|
|
2
|
-
require_relative "pact_pacticipant_decorator"
|
|
3
2
|
require_relative "timestamps"
|
|
4
3
|
|
|
5
4
|
module PactBroker
|
|
6
|
-
|
|
7
5
|
module Api
|
|
8
|
-
|
|
9
6
|
module Decorators
|
|
10
|
-
|
|
11
7
|
class EmbeddedTagDecorator < BaseDecorator
|
|
12
|
-
|
|
13
8
|
property :name
|
|
14
9
|
|
|
15
10
|
link :self do | options |
|
|
@@ -2,6 +2,7 @@ require "ostruct"
|
|
|
2
2
|
require "pact_broker/api/pact_broker_urls"
|
|
3
3
|
require "pact_broker/api/decorators/reason_decorator"
|
|
4
4
|
require "pact_broker/api/decorators/format_date_time"
|
|
5
|
+
require "pact_broker/api/decorators/embedded_branch_version_decorator"
|
|
5
6
|
|
|
6
7
|
module PactBroker
|
|
7
8
|
module Api
|
|
@@ -83,7 +84,8 @@ module PactBroker
|
|
|
83
84
|
name: line.consumer_name,
|
|
84
85
|
version: {
|
|
85
86
|
number: line.consumer_version_number,
|
|
86
|
-
branch: line.
|
|
87
|
+
branch: line.consumer_version_branch_versions.last&.branch_name,
|
|
88
|
+
branches: branches(line.consumer_version_branch_versions, base_url),
|
|
87
89
|
_links: {
|
|
88
90
|
self: {
|
|
89
91
|
href: version_url(base_url, consumer_version)
|
|
@@ -99,6 +101,12 @@ module PactBroker
|
|
|
99
101
|
}
|
|
100
102
|
end
|
|
101
103
|
|
|
104
|
+
def branches(branch_versions, base_url)
|
|
105
|
+
branch_versions.collect do | branch_version |
|
|
106
|
+
PactBroker::Api::Decorators::EmbeddedBranchVersionDecorator.new(branch_version).to_hash(user_options: { base_url: base_url })
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
102
110
|
def tags(tags, base_url)
|
|
103
111
|
tags.sort_by(&:created_at).collect do | tag |
|
|
104
112
|
{
|
|
@@ -127,7 +135,8 @@ module PactBroker
|
|
|
127
135
|
if !line.provider_version_number.nil?
|
|
128
136
|
hash[:version] = {
|
|
129
137
|
number: line.provider_version_number,
|
|
130
|
-
branch: line.
|
|
138
|
+
branch: line.provider_version_branch_versions.last&.branch_name,
|
|
139
|
+
branches: branches(line.provider_version_branch_versions, base_url),
|
|
131
140
|
_links: {
|
|
132
141
|
self: {
|
|
133
142
|
href: version_url(base_url, provider_version)
|
|
@@ -49,6 +49,14 @@ module PactBroker
|
|
|
49
49
|
}
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
+
link :'pb:branch-version' do | options |
|
|
53
|
+
{
|
|
54
|
+
title: "Get or add/create a version for a branch of #{represented.name}",
|
|
55
|
+
href: templated_branch_version_url_for_pacticipant(represented.name, options[:base_url]),
|
|
56
|
+
templated: true
|
|
57
|
+
}
|
|
58
|
+
end
|
|
59
|
+
|
|
52
60
|
link :'pb:label' do | options |
|
|
53
61
|
{
|
|
54
62
|
title: "Get, create or delete a label for #{represented.name}",
|
|
@@ -8,7 +8,7 @@ require "pact_broker/pacts/selectors"
|
|
|
8
8
|
module PactBroker
|
|
9
9
|
module Api
|
|
10
10
|
module Decorators
|
|
11
|
-
class
|
|
11
|
+
class PactsForVerificationQueryDecorator < BaseDecorator
|
|
12
12
|
using PactBroker::HashRefinements
|
|
13
13
|
|
|
14
14
|
collection :provider_version_tags, default: []
|
|
@@ -38,7 +38,7 @@ module PactBroker
|
|
|
38
38
|
}
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
property :include_pending_status, default:
|
|
41
|
+
property :include_pending_status, default: true,
|
|
42
42
|
setter: ->(fragment:, represented:, **) {
|
|
43
43
|
represented.include_pending_status = (fragment == "true" || fragment == true)
|
|
44
44
|
}
|
|
@@ -7,7 +7,7 @@ module PactBroker
|
|
|
7
7
|
class VersionDecorator < BaseDecorator
|
|
8
8
|
|
|
9
9
|
property :number, writeable: false
|
|
10
|
-
|
|
10
|
+
collection :branch_versions, as: :branches, embedded: true, writeable: false, extend: PactBroker::Api::Decorators::EmbeddedBranchVersionDecorator
|
|
11
11
|
property :build_url, as: :buildUrl
|
|
12
12
|
|
|
13
13
|
collection :tags, embedded: true, :extend => PactBroker::Api::Decorators::EmbeddedTagDecorator, class: OpenStruct
|
|
@@ -199,10 +199,18 @@ module PactBroker
|
|
|
199
199
|
"#{tags_url(base_url, tag.version)}/#{url_encode(tag.name)}"
|
|
200
200
|
end
|
|
201
201
|
|
|
202
|
+
def branch_version_url(branch_version, base_url = "")
|
|
203
|
+
"#{pacticipant_url(base_url, branch_version.pacticipant)}/branches/#{url_encode(branch_version.branch_name)}/versions/#{url_encode(branch_version.version_number)}"
|
|
204
|
+
end
|
|
205
|
+
|
|
202
206
|
def templated_tag_url_for_pacticipant pacticipant_name, base_url = ""
|
|
203
207
|
pacticipant_url_from_params({ pacticipant_name: pacticipant_name }, base_url) + "/versions/{version}/tags/{tag}"
|
|
204
208
|
end
|
|
205
209
|
|
|
210
|
+
def templated_branch_version_url_for_pacticipant pacticipant_name, base_url = ""
|
|
211
|
+
pacticipant_url_from_params({ pacticipant_name: pacticipant_name }, base_url) + "/branches/{branch}/versions/{version}"
|
|
212
|
+
end
|
|
213
|
+
|
|
206
214
|
def templated_version_url_for_pacticipant pacticipant_name, base_url = ""
|
|
207
215
|
pacticipant_url_from_params({ pacticipant_name: pacticipant_name }, base_url) + "/versions/{version}"
|
|
208
216
|
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require "pact_broker/api/resources/base_resource"
|
|
2
|
+
require "pact_broker/api/decorators/branch_version_decorator"
|
|
3
|
+
|
|
4
|
+
module PactBroker
|
|
5
|
+
module Api
|
|
6
|
+
module Resources
|
|
7
|
+
class BranchVersion < BaseResource
|
|
8
|
+
def content_types_provided
|
|
9
|
+
[["application/hal+json", :to_json]]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def content_types_accepted
|
|
13
|
+
[["application/json", :from_json]]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def allowed_methods
|
|
17
|
+
["GET", "PUT", "OPTIONS"]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def resource_exists?
|
|
21
|
+
!!branch_version
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def to_json
|
|
25
|
+
decorator_class(:branch_version_decorator).new(branch_version).to_json(decorator_options)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def from_json
|
|
29
|
+
already_existed = !!branch_version
|
|
30
|
+
@branch_version = branch_service.find_or_create_branch_version(identifier_from_path)
|
|
31
|
+
# Make it return a 201 by setting the Location header
|
|
32
|
+
response.headers["Location"] = branch_version_url(branch_version, base_url) unless already_existed
|
|
33
|
+
response.body = to_json
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def policy_name
|
|
37
|
+
:'versions::branch_version'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def branch_version
|
|
43
|
+
@branch_version ||= branch_service.find_branch_version(identifier_from_path)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -116,6 +116,12 @@ module PactBroker
|
|
|
116
116
|
title: "Get, create or delete a tag for a pacticipant version",
|
|
117
117
|
templated: true
|
|
118
118
|
},
|
|
119
|
+
"pb:pacticipant-branch-version" =>
|
|
120
|
+
{
|
|
121
|
+
href: base_url + "/pacticipants/{pacticipant}/branches/{branch}/versions/{version}",
|
|
122
|
+
title: "Get or add/create a pacticipant version for a branch",
|
|
123
|
+
templated: true
|
|
124
|
+
},
|
|
119
125
|
"pb:pacticipant-version" =>
|
|
120
126
|
{
|
|
121
127
|
href: base_url + "/pacticipants/{pacticipant}/versions/{version}",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
require "pact_broker/api/resources/provider_pacts"
|
|
2
2
|
require "pact_broker/api/decorators/verifiable_pacts_decorator"
|
|
3
|
-
require "pact_broker/api/contracts/
|
|
4
|
-
require "pact_broker/api/decorators/
|
|
5
|
-
require "pact_broker/api/contracts/
|
|
3
|
+
require "pact_broker/api/contracts/pacts_for_verification_query_string_schema"
|
|
4
|
+
require "pact_broker/api/decorators/pacts_for_verification_query_decorator"
|
|
5
|
+
require "pact_broker/api/contracts/pacts_for_verification_json_query_schema"
|
|
6
6
|
require "pact_broker/hash_refinements"
|
|
7
7
|
|
|
8
8
|
module PactBroker
|
|
@@ -69,14 +69,14 @@ module PactBroker
|
|
|
69
69
|
|
|
70
70
|
def query_schema
|
|
71
71
|
if request.get?
|
|
72
|
-
PactBroker::Api::Contracts::
|
|
72
|
+
PactBroker::Api::Contracts::PactsForVerificationQueryStringSchema
|
|
73
73
|
else
|
|
74
|
-
PactBroker::Api::Contracts::
|
|
74
|
+
PactBroker::Api::Contracts::PactsForVerificationJSONQuerySchema
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
def parsed_query_params
|
|
79
|
-
@parsed_query_params ||= decorator_class(:
|
|
79
|
+
@parsed_query_params ||= decorator_class(:pacts_for_verification_query_decorator).new(OpenStruct.new).from_hash(query)
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
def query
|
|
@@ -21,14 +21,6 @@ module PactBroker
|
|
|
21
21
|
["GET", "PUT", "PATCH", "DELETE", "OPTIONS"]
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
def is_conflict?
|
|
25
|
-
if (errors = version_service.conflict_errors(version, parsed_version, resource_url)).any?
|
|
26
|
-
set_json_validation_error_messages(errors)
|
|
27
|
-
else
|
|
28
|
-
false
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
24
|
def resource_exists?
|
|
33
25
|
!!version
|
|
34
26
|
end
|