pact_broker 2.58.0 → 2.58.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/release_gem.yml +25 -0
- data/.travis.yml +5 -3
- data/CHANGELOG.md +8 -0
- data/DEVELOPER_SETUP.md +46 -16
- data/Dockerfile +23 -2
- data/Gemfile +29 -2
- data/config.ru +32 -12
- data/config/database.yml +7 -0
- data/docker-compose-dev-postgres.yml +35 -0
- data/docker-compose-test.yml +100 -0
- data/lib/pact_broker/api/decorators/decorator_context.rb +1 -1
- data/lib/pact_broker/api/pact_broker_urls.rb +4 -4
- data/lib/pact_broker/api/paths.rb +15 -0
- data/lib/pact_broker/api/resources/all_webhooks.rb +3 -3
- data/lib/pact_broker/api/resources/base_resource.rb +2 -174
- data/lib/pact_broker/api/resources/default_base_resource.rb +211 -0
- data/lib/pact_broker/api/resources/error_handler.rb +1 -1
- data/lib/pact_broker/api/resources/group.rb +1 -13
- data/lib/pact_broker/api/resources/label.rb +5 -2
- data/lib/pact_broker/api/resources/latest_pact.rb +4 -0
- data/lib/pact_broker/api/resources/latest_pacts.rb +1 -4
- data/lib/pact_broker/api/resources/latest_verifications_for_consumer_version.rb +8 -2
- data/lib/pact_broker/api/resources/matrix.rb +2 -2
- data/lib/pact_broker/api/resources/matrix_for_consumer_and_provider.rb +1 -1
- data/lib/pact_broker/api/resources/pact.rb +5 -1
- data/lib/pact_broker/api/resources/pact_content_diff.rb +1 -2
- data/lib/pact_broker/api/resources/pact_triggered_webhooks.rb +1 -7
- data/lib/pact_broker/api/resources/pact_versions.rb +1 -3
- data/lib/pact_broker/api/resources/pact_webhooks.rb +2 -5
- data/lib/pact_broker/api/resources/pact_webhooks_status.rb +1 -17
- data/lib/pact_broker/api/resources/pacticipant.rb +7 -14
- data/lib/pact_broker/api/resources/pacticipants.rb +1 -1
- data/lib/pact_broker/api/resources/pacticipants_for_label.rb +1 -1
- data/lib/pact_broker/api/resources/previous_distinct_pact_version.rb +4 -0
- data/lib/pact_broker/api/resources/provider_pacts.rb +5 -1
- data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +1 -1
- data/lib/pact_broker/api/resources/tag.rb +5 -1
- data/lib/pact_broker/api/resources/tagged_pact_versions.rb +1 -2
- data/lib/pact_broker/api/resources/triggered_webhook_logs.rb +4 -0
- data/lib/pact_broker/api/resources/verification.rb +7 -3
- data/lib/pact_broker/api/resources/verification_triggered_webhooks.rb +5 -1
- data/lib/pact_broker/api/resources/verifications.rb +7 -3
- data/lib/pact_broker/api/resources/version.rb +4 -1
- data/lib/pact_broker/api/resources/versions.rb +1 -3
- data/lib/pact_broker/api/resources/webhook.rb +6 -2
- data/lib/pact_broker/api/resources/webhook_execution.rb +4 -0
- data/lib/pact_broker/api/resources/webhooks.rb +3 -18
- data/lib/pact_broker/app.rb +1 -0
- data/lib/pact_broker/configuration.rb +8 -1
- data/lib/pact_broker/db/clean.rb +0 -6
- data/lib/pact_broker/domain/pacticipant.rb +7 -2
- data/lib/pact_broker/domain/version.rb +3 -0
- data/lib/pact_broker/index/service.rb +5 -45
- data/lib/pact_broker/pacticipants/repository.rb +2 -2
- data/lib/pact_broker/pacts/latest_pact_publication_id_for_consumer_version.rb +2 -5
- data/lib/pact_broker/pacts/pact_publication.rb +11 -9
- data/lib/pact_broker/pacts/pact_version.rb +3 -4
- data/lib/pact_broker/pacts/repository.rb +53 -39
- data/lib/pact_broker/pacts/verifiable_pact.rb +8 -0
- data/lib/pact_broker/policies.rb +53 -0
- data/lib/pact_broker/repositories/helpers.rb +3 -20
- data/lib/pact_broker/ui/controllers/index.rb +0 -2
- data/lib/pact_broker/verifications/latest_verification_id_for_pact_version_and_provider_version.rb +3 -5
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/versions/repository.rb +2 -4
- data/lib/rack/pact_broker/request_target.rb +6 -1
- data/lib/sequel/plugins/insert_ignore.rb +69 -0
- data/lib/sequel/plugins/upsert.rb +103 -0
- data/pact_broker.gemspec +22 -41
- data/script/docker/db-execute-sql-file.sh +2 -0
- data/script/issues/consumer-version-selectors-docs/issue-text.txt +11 -0
- data/script/issues/consumer-version-selectors-docs/issues.txt +6 -0
- data/script/issues/consumer-version-selectors-docs/raise-issue-in-client-repos.sh +10 -0
- data/script/prod/redact-data.sql +1 -0
- data/script/release-via-github-action.sh +7 -0
- data/script/trigger-release.sh +30 -0
- data/spec/features/get_versions_spec.rb +1 -6
- data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +2 -2
- data/spec/lib/pact_broker/api/resources/all_webhooks_spec.rb +1 -1
- data/spec/lib/pact_broker/api/resources/default_base_resource_spec.rb +158 -0
- data/spec/lib/pact_broker/api/resources/tag_spec.rb +2 -2
- data/spec/lib/pact_broker/api/resources/webhook_spec.rb +1 -1
- data/spec/lib/pact_broker/api/resources/webhooks_spec.rb +1 -1
- data/spec/lib/pact_broker/db/clean_old_spec.rb +125 -0
- data/spec/lib/pact_broker/db/clean_spec.rb +45 -11
- data/spec/lib/pact_broker/index/service_spec.rb +2 -3
- data/spec/lib/pact_broker/pacts/repository_find_wip_pact_versions_for_provider_spec.rb +36 -0
- data/spec/lib/pact_broker/versions/repository_spec.rb +8 -0
- data/spec/lib/rack/pact_broker/request_target_spec.rb +7 -0
- data/spec/lib/sequel/plugins/insert_ignore_spec.rb +82 -0
- data/spec/lib/sequel/plugins/upsert_spec.rb +125 -0
- data/spec/spec_helper.rb +1 -0
- data/tasks/audit.rake +6 -2
- data/tasks/development.rake +2 -2
- metadata +46 -284
- data/spec/lib/pact_broker/api/resources/base_resource_spec.rb +0 -78
@@ -2,10 +2,8 @@ require 'pact_broker/api/resources/base_resource'
|
|
2
2
|
require 'pact_broker/api/decorators/relationships_csv_decorator'
|
3
3
|
|
4
4
|
module PactBroker
|
5
|
-
|
6
5
|
module Api
|
7
6
|
module Resources
|
8
|
-
|
9
7
|
class Group < BaseResource
|
10
8
|
|
11
9
|
def content_types_provided
|
@@ -26,20 +24,10 @@ module PactBroker
|
|
26
24
|
|
27
25
|
private
|
28
26
|
|
29
|
-
def pacticipant_name
|
30
|
-
identifier_from_path[:pacticipant_name]
|
31
|
-
end
|
32
|
-
|
33
|
-
def pacticipant
|
34
|
-
@pacticipant ||= pacticipant_service.find_pacticipant_by_name(pacticipant_name)
|
35
|
-
end
|
36
|
-
|
37
27
|
def group
|
38
|
-
@group ||= group_service.find_group_containing
|
28
|
+
@group ||= group_service.find_group_containing(pacticipant)
|
39
29
|
end
|
40
|
-
|
41
30
|
end
|
42
31
|
end
|
43
|
-
|
44
32
|
end
|
45
33
|
end
|
@@ -5,7 +5,6 @@ module PactBroker
|
|
5
5
|
module Api
|
6
6
|
module Resources
|
7
7
|
class Label < BaseResource
|
8
|
-
|
9
8
|
def content_types_provided
|
10
9
|
[["application/hal+json", :to_json]]
|
11
10
|
end
|
@@ -28,11 +27,15 @@ module PactBroker
|
|
28
27
|
end
|
29
28
|
|
30
29
|
def resource_exists?
|
30
|
+
!!resource_object
|
31
|
+
end
|
32
|
+
|
33
|
+
def resource_object
|
31
34
|
label
|
32
35
|
end
|
33
36
|
|
34
37
|
def to_json
|
35
|
-
PactBroker::Api::Decorators::LabelDecorator.new(label).to_json(
|
38
|
+
PactBroker::Api::Decorators::LabelDecorator.new(label).to_json(decorator_options)
|
36
39
|
end
|
37
40
|
|
38
41
|
def label
|
@@ -3,7 +3,6 @@ require 'pact_broker/api/resources/base_resource'
|
|
3
3
|
module PactBroker
|
4
4
|
module Api
|
5
5
|
module Resources
|
6
|
-
|
7
6
|
class LatestPacts < BaseResource
|
8
7
|
|
9
8
|
def content_types_provided
|
@@ -15,15 +14,13 @@ module PactBroker
|
|
15
14
|
end
|
16
15
|
|
17
16
|
def to_json
|
18
|
-
PactBroker::Api::Decorators::PactCollectionDecorator.new(pacts).to_json(
|
17
|
+
PactBroker::Api::Decorators::PactCollectionDecorator.new(pacts).to_json(decorator_options)
|
19
18
|
end
|
20
19
|
|
21
20
|
def pacts
|
22
21
|
pact_service.find_latest_pacts
|
23
22
|
end
|
24
|
-
|
25
23
|
end
|
26
24
|
end
|
27
|
-
|
28
25
|
end
|
29
26
|
end
|
@@ -18,8 +18,7 @@ module PactBroker
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def resource_exists?
|
21
|
-
|
22
|
-
!!version_service.find_by_pacticipant_name_and_number(version_params)
|
21
|
+
!!version
|
23
22
|
end
|
24
23
|
|
25
24
|
def to_json
|
@@ -29,6 +28,13 @@ module PactBroker
|
|
29
28
|
|
30
29
|
private
|
31
30
|
|
31
|
+
def version
|
32
|
+
version_service.find_by_pacticipant_name_and_number(
|
33
|
+
pacticipant_name: consumer_name,
|
34
|
+
pacticipant_version_number: consumer_version_number
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
32
38
|
def decorator_for summary
|
33
39
|
PactBroker::Api::Decorators::VerificationSummaryDecorator.new(summary)
|
34
40
|
end
|
@@ -36,11 +36,11 @@ module PactBroker
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def to_json
|
39
|
-
PactBroker::Api::Decorators::MatrixDecorator.new(results).to_json(
|
39
|
+
PactBroker::Api::Decorators::MatrixDecorator.new(results).to_json(decorator_options)
|
40
40
|
end
|
41
41
|
|
42
42
|
def to_text
|
43
|
-
PactBroker::Api::Decorators::MatrixTextDecorator.new(results).to_text(
|
43
|
+
PactBroker::Api::Decorators::MatrixTextDecorator.new(results).to_text(decorator_options)
|
44
44
|
end
|
45
45
|
|
46
46
|
def results
|
@@ -18,7 +18,7 @@ module PactBroker
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def to_json
|
21
|
-
Decorators::TriggeredWebhooksDecorator.new(triggered_webhooks).to_json(decorator_options)
|
21
|
+
Decorators::TriggeredWebhooksDecorator.new(triggered_webhooks).to_json(decorator_options(resource_title: resource_title))
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
@@ -30,12 +30,6 @@ module PactBroker
|
|
30
30
|
def resource_title
|
31
31
|
"Webhooks triggered by the publication of the #{pact.name[0].downcase}#{pact.name[1..-1]}"
|
32
32
|
end
|
33
|
-
|
34
|
-
def decorator_options
|
35
|
-
{
|
36
|
-
user_options: decorator_context.merge(resource_title: resource_title)
|
37
|
-
}
|
38
|
-
end
|
39
33
|
end
|
40
34
|
end
|
41
35
|
end
|
@@ -6,7 +6,6 @@ module PactBroker
|
|
6
6
|
module Api
|
7
7
|
module Resources
|
8
8
|
class PactVersions < BaseResource
|
9
|
-
|
10
9
|
def content_types_provided
|
11
10
|
[["application/hal+json", :to_json]]
|
12
11
|
end
|
@@ -16,8 +15,7 @@ module PactBroker
|
|
16
15
|
end
|
17
16
|
|
18
17
|
def resource_exists?
|
19
|
-
|
20
|
-
pacticipant_service.find_pacticipant_by_name(provider_name)
|
18
|
+
consumer && provider
|
21
19
|
end
|
22
20
|
|
23
21
|
def to_json
|
@@ -4,10 +4,8 @@ require 'pact_broker/api/decorators/webhooks_decorator'
|
|
4
4
|
require 'pact_broker/api/contracts/webhook_contract'
|
5
5
|
|
6
6
|
module PactBroker
|
7
|
-
|
8
7
|
module Api
|
9
8
|
module Resources
|
10
|
-
|
11
9
|
class PactWebhooks < BaseResource
|
12
10
|
|
13
11
|
def allowed_methods
|
@@ -23,8 +21,7 @@ module PactBroker
|
|
23
21
|
end
|
24
22
|
|
25
23
|
def resource_exists?
|
26
|
-
(
|
27
|
-
(identifier_from_path[:provider_name].nil? || provider)
|
24
|
+
(!consumer_specified? || consumer) && (!provider_specified? || provider)
|
28
25
|
end
|
29
26
|
|
30
27
|
def malformed_request?
|
@@ -55,7 +52,7 @@ module PactBroker
|
|
55
52
|
|
56
53
|
def from_json
|
57
54
|
saved_webhook = webhook_service.create next_uuid, webhook, consumer, provider
|
58
|
-
response.body = Decorators::WebhookDecorator.new(saved_webhook).to_json(
|
55
|
+
response.body = Decorators::WebhookDecorator.new(saved_webhook).to_json(decoractor_options)
|
59
56
|
end
|
60
57
|
|
61
58
|
def to_json
|
@@ -2,10 +2,8 @@ require 'pact_broker/api/resources/base_resource'
|
|
2
2
|
require 'pact_broker/api/decorators/pact_webhooks_status_decorator'
|
3
3
|
|
4
4
|
module PactBroker
|
5
|
-
|
6
5
|
module Api
|
7
6
|
module Resources
|
8
|
-
|
9
7
|
class PactWebhooksStatus < BaseResource
|
10
8
|
|
11
9
|
def allowed_methods
|
@@ -35,21 +33,7 @@ module PactBroker
|
|
35
33
|
end
|
36
34
|
|
37
35
|
def webhooks
|
38
|
-
webhook_service.find_by_consumer_and_provider
|
39
|
-
end
|
40
|
-
|
41
|
-
def consumer
|
42
|
-
@consumer ||= find_pacticipant(identifier_from_path[:consumer_name], "consumer")
|
43
|
-
end
|
44
|
-
|
45
|
-
def provider
|
46
|
-
@provider ||= find_pacticipant(identifier_from_path[:provider_name], "provider")
|
47
|
-
end
|
48
|
-
|
49
|
-
def find_pacticipant name, role
|
50
|
-
pacticipant_service.find_pacticipant_by_name(name).tap do | pacticipant |
|
51
|
-
set_json_error_message("No #{role} with name '#{name}' found") if pacticipant.nil?
|
52
|
-
end
|
36
|
+
webhook_service.find_by_consumer_and_provider(consumer, provider)
|
53
37
|
end
|
54
38
|
|
55
39
|
def decorator_for latest_triggered_webhooks
|
@@ -11,7 +11,6 @@ end
|
|
11
11
|
module PactBroker
|
12
12
|
module Api
|
13
13
|
module Resources
|
14
|
-
|
15
14
|
class Pacticipant < BaseResource
|
16
15
|
|
17
16
|
def content_types_provided
|
@@ -32,7 +31,7 @@ module PactBroker
|
|
32
31
|
|
33
32
|
def from_json
|
34
33
|
if pacticipant
|
35
|
-
@pacticipant = pacticipant_service.update
|
34
|
+
@pacticipant = pacticipant_service.update params(symbolize_names: false).merge('name' => pacticipant_name)
|
36
35
|
else
|
37
36
|
@pacticipant = pacticipant_service.create params.merge(:name => pacticipant_name)
|
38
37
|
response.headers["Location"] = pacticipant_url(base_url, pacticipant)
|
@@ -41,26 +40,20 @@ module PactBroker
|
|
41
40
|
end
|
42
41
|
|
43
42
|
def resource_exists?
|
43
|
+
!!resource_object
|
44
|
+
end
|
45
|
+
|
46
|
+
def resource_object
|
44
47
|
pacticipant
|
45
48
|
end
|
46
49
|
|
47
50
|
def delete_resource
|
48
|
-
pacticipant_service.delete
|
51
|
+
pacticipant_service.delete(pacticipant_name)
|
49
52
|
true
|
50
53
|
end
|
51
54
|
|
52
55
|
def to_json
|
53
|
-
PactBroker::Api::Decorators::PacticipantDecorator.new(pacticipant).to_json(
|
54
|
-
end
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
def pacticipant
|
59
|
-
@pacticipant ||= pacticipant_service.find_pacticipant_by_name(pacticipant_name)
|
60
|
-
end
|
61
|
-
|
62
|
-
def pacticipant_name
|
63
|
-
identifier_from_path[:pacticipant_name]
|
56
|
+
PactBroker::Api::Decorators::PacticipantDecorator.new(pacticipant).to_json(decorator_options)
|
64
57
|
end
|
65
58
|
end
|
66
59
|
end
|
@@ -46,7 +46,7 @@ module PactBroker
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def generate_json pacticipants
|
49
|
-
PactBroker::Api::Decorators::DeprecatedPacticipantCollectionDecorator.new(pacticipants).to_json(
|
49
|
+
PactBroker::Api::Decorators::DeprecatedPacticipantCollectionDecorator.new(pacticipants).to_json(decorator_options)
|
50
50
|
end
|
51
51
|
|
52
52
|
def decorator_for model
|
@@ -19,7 +19,7 @@ module PactBroker
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def generate_json pacticipants
|
22
|
-
PactBroker::Api::Decorators::PacticipantCollectionDecorator.new(pacticipants).to_json(
|
22
|
+
PactBroker::Api::Decorators::PacticipantCollectionDecorator.new(pacticipants).to_json(decorator_options)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -27,11 +27,15 @@ module PactBroker
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def resource_exists?
|
30
|
+
!!resource_object
|
31
|
+
end
|
32
|
+
|
33
|
+
def resource_object
|
30
34
|
tag
|
31
35
|
end
|
32
36
|
|
33
37
|
def to_json
|
34
|
-
PactBroker::Api::Decorators::TagDecorator.new(tag).to_json(
|
38
|
+
PactBroker::Api::Decorators::TagDecorator.new(tag).to_json(decorator_options)
|
35
39
|
end
|
36
40
|
|
37
41
|
def tag
|
@@ -28,16 +28,20 @@ module PactBroker
|
|
28
28
|
set_json_error_message("To see all the verifications for a pact, use the Matrix page")
|
29
29
|
false
|
30
30
|
else
|
31
|
-
!!
|
31
|
+
!!resource_object
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
+
def resource_object
|
36
|
+
verification
|
37
|
+
end
|
38
|
+
|
35
39
|
def to_json
|
36
|
-
decorator_for(verification).to_json(
|
40
|
+
decorator_for(verification).to_json(decorator_options)
|
37
41
|
end
|
38
42
|
|
39
43
|
def to_extended_json
|
40
|
-
extended_decorator_for(verification).to_json(
|
44
|
+
extended_decorator_for(verification).to_json(decorator_options)
|
41
45
|
end
|
42
46
|
|
43
47
|
def delete_resource
|