pact_broker 2.31.0 → 2.32.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.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +40 -0
  3. data/db/migrations/20190509_create_version_sequence.rb +8 -0
  4. data/db/migrations/20190510_set_version_sequence.rb +9 -0
  5. data/db/migrations/20190511_create_integrations_view.rb +19 -0
  6. data/db/migrations/20190523_add_enabled_column_to_webhooks.rb +5 -0
  7. data/db/migrations/20190524_set_webhooks_enabled.rb +10 -0
  8. data/db/migrations/20190525_add_description_column_to_webhooks.rb +5 -0
  9. data/lib/pact_broker/api.rb +3 -0
  10. data/lib/pact_broker/api/decorators/base_decorator.rb +0 -3
  11. data/lib/pact_broker/api/decorators/integration_decorator.rb +40 -0
  12. data/lib/pact_broker/api/decorators/integrations_decorator.rb +19 -0
  13. data/lib/pact_broker/api/decorators/pact_decorator.rb +1 -1
  14. data/lib/pact_broker/api/decorators/pact_details_decorator.rb +1 -6
  15. data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +12 -0
  16. data/lib/pact_broker/api/decorators/verifiable_pacts_decorator.rb +20 -0
  17. data/lib/pact_broker/api/decorators/webhook_decorator.rb +5 -1
  18. data/lib/pact_broker/api/decorators/webhook_execution_result_decorator.rb +0 -1
  19. data/lib/pact_broker/api/decorators/webhooks_decorator.rb +2 -2
  20. data/lib/pact_broker/api/pact_broker_urls.rb +37 -3
  21. data/lib/pact_broker/api/resources/base_resource.rb +4 -0
  22. data/lib/pact_broker/api/resources/dashboard.rb +1 -1
  23. data/lib/pact_broker/api/resources/integrations.rb +10 -2
  24. data/lib/pact_broker/api/resources/matrix_for_consumer_and_provider.rb +8 -14
  25. data/lib/pact_broker/api/resources/pact.rb +15 -3
  26. data/lib/pact_broker/api/resources/verification.rb +0 -2
  27. data/lib/pact_broker/api/resources/verifications.rb +18 -1
  28. data/lib/pact_broker/api/resources/webhook.rb +1 -1
  29. data/lib/pact_broker/api/resources/webhook_execution.rb +18 -9
  30. data/lib/pact_broker/app.rb +10 -11
  31. data/lib/pact_broker/db.rb +2 -2
  32. data/lib/pact_broker/db/data_migrations/helpers.rb +11 -0
  33. data/lib/pact_broker/db/data_migrations/set_latest_version_sequence_value.rb +29 -0
  34. data/lib/pact_broker/db/data_migrations/set_webhooks_enabled.rb +17 -0
  35. data/lib/pact_broker/db/migrate_data.rb +2 -0
  36. data/lib/pact_broker/db/seed_example_data.rb +6 -3
  37. data/lib/pact_broker/domain/order_versions.rb +14 -1
  38. data/lib/pact_broker/domain/verification.rb +4 -0
  39. data/lib/pact_broker/domain/webhook.rb +13 -3
  40. data/lib/pact_broker/domain/webhook_request.rb +3 -2
  41. data/lib/pact_broker/index/service.rb +3 -0
  42. data/lib/pact_broker/integrations/integration.rb +10 -0
  43. data/lib/pact_broker/integrations/service.rb +5 -0
  44. data/lib/pact_broker/matrix/parse_query.rb +2 -0
  45. data/lib/pact_broker/matrix/row.rb +8 -0
  46. data/lib/pact_broker/matrix/service.rb +1 -2
  47. data/lib/pact_broker/pacts/service.rb +16 -9
  48. data/lib/pact_broker/test/test_data_builder.rb +6 -2
  49. data/lib/pact_broker/verifications/sequence.rb +0 -2
  50. data/lib/pact_broker/verifications/service.rb +10 -2
  51. data/lib/pact_broker/version.rb +1 -1
  52. data/lib/pact_broker/versions/sequence.rb +38 -0
  53. data/lib/pact_broker/webhooks/job.rb +19 -7
  54. data/lib/pact_broker/webhooks/render.rb +30 -13
  55. data/lib/pact_broker/webhooks/repository.rb +3 -4
  56. data/lib/pact_broker/webhooks/service.rb +60 -34
  57. data/lib/pact_broker/webhooks/trigger_service.rb +6 -6
  58. data/lib/pact_broker/webhooks/webhook.rb +9 -1
  59. data/lib/pact_broker/webhooks/webhook_request_template.rb +11 -7
  60. data/lib/rack/pact_broker/database_transaction.rb +6 -2
  61. data/script/publish-new.sh +23 -1
  62. data/script/publish.sh +13 -4
  63. data/script/seed.rb +53 -52
  64. data/spec/features/create_webhook_spec.rb +2 -0
  65. data/spec/features/execute_webhook_spec.rb +4 -3
  66. data/spec/features/get_integrations_spec.rb +17 -0
  67. data/spec/features/get_pacts_to_verify_spec.rb +7 -3
  68. data/spec/features/publish_verification_spec.rb +8 -1
  69. data/spec/features/update_webhook_spec.rb +47 -0
  70. data/spec/integration/webhooks/certificate_spec.rb +1 -1
  71. data/spec/lib/pact_broker/api/contracts/webhook_contract_spec.rb +12 -0
  72. data/spec/lib/pact_broker/api/decorators/integration_decorator_spec.rb +82 -0
  73. data/spec/lib/pact_broker/api/decorators/integrations_decorator_spec.rb +29 -0
  74. data/spec/lib/pact_broker/api/decorators/pact_decorator_spec.rb +12 -4
  75. data/spec/lib/pact_broker/api/decorators/verifiable_pact_decorator_spec.rb +30 -0
  76. data/spec/lib/pact_broker/api/decorators/verifiable_pacts_decorator_spec.rb +29 -0
  77. data/spec/lib/pact_broker/api/decorators/webhook_decorator_spec.rb +20 -1
  78. data/spec/lib/pact_broker/api/decorators/webhook_execution_result_decorator_spec.rb +0 -4
  79. data/spec/lib/pact_broker/api/decorators/webhooks_decorator_spec.rb +5 -4
  80. data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +64 -1
  81. data/spec/lib/pact_broker/api/resources/pact_spec.rb +0 -3
  82. data/spec/lib/pact_broker/api/resources/verifications_spec.rb +40 -10
  83. data/spec/lib/pact_broker/api/resources/webhook_execution_spec.rb +13 -3
  84. data/spec/lib/pact_broker/app_spec.rb +28 -4
  85. data/spec/lib/pact_broker/db/data_migrations/set_latest_version_sequence_value_spec.rb +68 -0
  86. data/spec/lib/pact_broker/domain/order_versions_spec.rb +1 -4
  87. data/spec/lib/pact_broker/domain/webhook_spec.rb +10 -6
  88. data/spec/lib/pact_broker/matrix/parse_query_spec.rb +15 -7
  89. data/spec/lib/pact_broker/pacts/service_spec.rb +13 -5
  90. data/spec/lib/pact_broker/verifications/service_spec.rb +15 -3
  91. data/spec/lib/pact_broker/versions/repository_spec.rb +1 -1
  92. data/spec/lib/pact_broker/webhooks/job_spec.rb +52 -15
  93. data/spec/lib/pact_broker/webhooks/render_spec.rb +28 -7
  94. data/spec/lib/pact_broker/webhooks/repository_spec.rb +23 -32
  95. data/spec/lib/pact_broker/webhooks/service_spec.rb +186 -62
  96. data/spec/lib/pact_broker/webhooks/trigger_service_spec.rb +6 -5
  97. data/spec/lib/pact_broker/webhooks/webhook_request_template_spec.rb +12 -5
  98. data/spec/lib/rack/pact_broker/database_transaction_spec.rb +10 -0
  99. data/spec/lib/rack/pact_broker/ui_request_filter_spec.rb +9 -0
  100. data/spec/migrations/23_pact_versions_spec.rb +7 -1
  101. data/spec/support/database_cleaner.rb +11 -1
  102. data/spec/support/metadata_test_server.rb +40 -0
  103. data/spec/support/verification_job.rb +34 -0
  104. data/spec/support/webhook_endpoint_middleware.rb +22 -0
  105. metadata +37 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f778ef154be3a35cb2cc58deeaa7445228413820
4
- data.tar.gz: 27d7c415594fe68b43f0813d7a47392faeb49b25
3
+ metadata.gz: 9cc025b711061dcb0c7ceecb89e57b5df8560667
4
+ data.tar.gz: 87e712268e55f5325f1ea3c6a81dd370504b34f9
5
5
  SHA512:
6
- metadata.gz: 93b6226a1d82f747454a48513a789b2215dedc12fce7e1173554ef2fc36d7584369b551d050c2b6f067f5199e43d1a37a640d7b596717fc8a114826773abca97
7
- data.tar.gz: 1d6c6605ea29d1c827b0f2073cde3b9782eefca979b3851b8c84804e210fc1ba71c56d8306de77abde51707557d0e2db8906475903634c6c9e0a10b2921efea9
6
+ metadata.gz: bc84f0a9394bb378f64bcb04796a4f594c395f4a1f1018e55e2e64a1a97738346be25f5ecf1a6632ec4b0ce100fd36d3fb1167de90af0db62b4abb95ae258e21
7
+ data.tar.gz: 2b135a336313e79f8f448f8ab466bf9d50c1f096d425c406edbda93a415bb62a28abbea616f64dad1af226650f1340a5d43ac6f263020c9c877c9ec04b945662
@@ -1,3 +1,43 @@
1
+ <a name="v2.32.0"></a>
2
+ ### v2.32.0 (2019-05-28)
3
+
4
+
5
+ #### Features
6
+
7
+ * **webhooks**
8
+ * maintain starred out Authorization header value ([cc978582](/../../commit/cc978582))
9
+ * don't use username if empty string ([9327271d](/../../commit/9327271d))
10
+ * do not show backtrace in webhook test execution response ([c8a8194e](/../../commit/c8a8194e))
11
+ * return a 200 status for webhook test execution response even when execution has failed ([d90c4552](/../../commit/d90c4552))
12
+ * do not require basic auth password to be re-submitted when a webhook is updated - maintain existing value if not present ([55d7f4ad](/../../commit/55d7f4ad))
13
+ * allow description to be edited ([302d70f6](/../../commit/302d70f6))
14
+ * only trigger enabled webhooks ([cb2b0321](/../../commit/cb2b0321))
15
+ * add enabled column to model and database schema ([ce452ec8](/../../commit/ce452ec8))
16
+
17
+ * add metadata to webhook and verification URLs to correctly track relevant versions and tags (#274) ([426b0b19](/../../commit/426b0b19))
18
+ * add group url to /integrations _links ([e2584f53](/../../commit/e2584f53))
19
+ * add matrix URL to /integration _links ([344d3e18](/../../commit/344d3e18))
20
+ * allow dashboard resource to be filtered by consumer/provider ([a2408520](/../../commit/a2408520))
21
+ * add hal+json endpoint for listing integrations ([40f3e021](/../../commit/40f3e021))
22
+ * allow a custom API to be configured ([1c371163](/../../commit/1c371163))
23
+
24
+ * **webhook**
25
+ * show user specified description instead of generated one in collection resource ([2643d957](/../../commit/2643d957))
26
+
27
+ * **matrix**
28
+ * do not default to latestby=cvpv for consumer/provider matrix ([742d506c](/../../commit/742d506c))
29
+
30
+
31
+ #### Bug Fixes
32
+
33
+ * **webhooks**
34
+ * correctly set updated consumer and provider ([d865a429](/../../commit/d865a429))
35
+
36
+ * default matrix limit for /matrix/provider/PROVIDER/consumer/CONSUMER endpoint to 100 ([7ccc9b6f](/../../commit/7ccc9b6f))
37
+ * gracefully handle situation where webhook is deleted before execution ([634ccd53](/../../commit/634ccd53))
38
+ * duplicate key value violates unique constraint uq_ver_ppt_ord ([4303e4f7](/../../commit/4303e4f7))
39
+
40
+
1
41
  <a name="v2.31.0"></a>
2
42
  ### v2.31.0 (2019-04-30)
3
43
 
@@ -0,0 +1,8 @@
1
+ require 'pact_broker/db/data_migrations/set_latest_version_sequence_value'
2
+ Sequel.migration do
3
+ change do
4
+ create_table(:version_sequence_number) do
5
+ Integer :value, null: false
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ require 'pact_broker/db/data_migrations/set_latest_version_sequence_value'
2
+ Sequel.migration do
3
+ up do
4
+ PactBroker::DB::DataMigrations::SetLatestVersionSequenceValue.call(self)
5
+ end
6
+
7
+ down do
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_view(:integrations,
4
+ from(:pact_publications)
5
+ .select(
6
+ :consumer_id,
7
+ Sequel[:c][:name].as(:consumer_name),
8
+ :provider_id,
9
+ Sequel[:p][:name].as(:provider_name)
10
+ ).distinct
11
+ .join(:pacticipants, {:id => :consumer_id}, {:table_alias => :c, implicit_qualifier: :pact_publications})
12
+ .join(:pacticipants, {:id => :provider_id}, {:table_alias => :p, implicit_qualifier: :pact_publications})
13
+ )
14
+ end
15
+
16
+ down do
17
+ drop_view(:integrations)
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ Sequel.migration do
2
+ change do
3
+ add_column(:webhooks, :enabled, TrueClass, default: true)
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ require 'pact_broker/db/data_migrations/set_webhooks_enabled'
2
+
3
+ Sequel.migration do
4
+ up do
5
+ PactBroker::DB::DataMigrations::SetWebhooksEnabled.call(self)
6
+ end
7
+
8
+ down do
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ Sequel.migration do
2
+ change do
3
+ add_column(:webhooks, :description, String)
4
+ end
5
+ end
@@ -17,6 +17,7 @@ module PactBroker
17
17
  # Pacts
18
18
  add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'version', :consumer_version_number], Api::Resources::Pact, {resource_name: "pact_publication"}
19
19
  add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'pact-version', :pact_version_sha], Api::Resources::PactVersion, {resource_name: "pact_publication"}
20
+ add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'pact-version', :pact_version_sha, 'metadata', :metadata], Api::Resources::PactVersion, {resource_name: "pact_publication"}
20
21
  add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'version', :consumer_version_number, 'previous-distinct'], Api::Resources::PreviousDistinctPactVersion, {resource_name: "previous_distinct_pact_version"}
21
22
  add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'version', :consumer_version_number, 'diff', 'previous-distinct'], Api::Resources::PactContentDiff, {resource_name: "previous_distinct_pact_version_diff"}
22
23
  add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'version', :consumer_version_number, 'diff', 'version', :comparison_consumer_version], Api::Resources::PactContentDiff, {resource_name: "pact_version_diff_by_consumer_version"}
@@ -24,6 +25,7 @@ module PactBroker
24
25
 
25
26
  # Verifications
26
27
  add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'pact-version', :pact_version_sha, 'verification-results'], Api::Resources::Verifications, {resource_name: "verification_results"}
28
+ add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'pact-version', :pact_version_sha, 'metadata', :metadata, 'verification-results'], Api::Resources::Verifications, {resource_name: "verification_results"}
27
29
  add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'pact-version', :pact_version_sha, 'verification-results', :verification_number], Api::Resources::Verification, {resource_name: "verification_result"}
28
30
  add ['pacts', 'provider', :provider_name, 'consumer', :consumer_name, 'pact-version', :pact_version_sha, 'verification-results', :verification_number, 'triggered-webhooks'], Api::Resources::VerificationTriggeredWebhooks, {resource_name: "verification_result_triggered_webhooks"}
29
31
  add ['verification-results', 'consumer', :consumer_name, 'version', :consumer_version_number,'latest'], Api::Resources::LatestVerificationsForConsumerVersion, {resource_name: "verification_results_for_consumer_version"}
@@ -84,6 +86,7 @@ module PactBroker
84
86
  add ['matrix'], Api::Resources::Matrix, {resource_name: "matrix"}
85
87
 
86
88
  add ['dashboard'], Api::Resources::Dashboard, {resource_name: "dashboard"}
89
+ add ['dashboard', 'provider', :provider_name, 'consumer', :consumer_name ], Api::Resources::Dashboard, {resource_name: "integration_dashboard"}
87
90
  add ['test','error'], Api::Resources::ErrorTest, {resource_name: "error_test"}
88
91
 
89
92
  add ['integrations'], Api::Resources::Integrations, {resource_name: "integrations"}
@@ -5,11 +5,8 @@ require 'pact_broker/api/decorators/decorator_context'
5
5
  require 'pact_broker/api/decorators/format_date_time'
6
6
 
7
7
  module PactBroker
8
-
9
8
  module Api
10
-
11
9
  module Decorators
12
-
13
10
  class BaseDecorator < Roar::Decorator
14
11
  include Roar::JSON::HAL
15
12
  include Roar::JSON::HAL::Links
@@ -0,0 +1,40 @@
1
+ require_relative 'base_decorator'
2
+ require 'pact_broker/api/pact_broker_urls'
3
+
4
+ module PactBroker
5
+ module Api
6
+ module Decorators
7
+ class IntegrationDecorator < BaseDecorator
8
+ include PactBroker::Api::PactBrokerUrls
9
+
10
+ property :consumer do
11
+ property :name
12
+ end
13
+
14
+ property :provider do
15
+ property :name
16
+ end
17
+
18
+ link "pb:dashboard" do | options |
19
+ {
20
+ title: "BETA: Pacts to show on the dashboard",
21
+ href: dashboard_url_for_integration(represented.consumer.name, represented.provider.name, options.fetch(:base_url))
22
+ }
23
+ end
24
+
25
+ link "pb:matrix" do | options |
26
+ {
27
+ title: "Matrix of pacts/verification results for #{represented.consumer.name} and #{represented.provider.name}",
28
+ href: matrix_url(represented.consumer.name, represented.provider.name, options.fetch(:base_url))
29
+ }
30
+ end
31
+
32
+ link "pb:group" do | options |
33
+ {
34
+ href: group_url(represented.consumer.name, options.fetch(:base_url))
35
+ }
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'base_decorator'
2
+ require_relative 'integration_decorator'
3
+
4
+ module PactBroker
5
+ module Api
6
+ module Decorators
7
+ class IntegrationsDecorator < BaseDecorator
8
+ collection :entries, as: :integrations, embedded: true, :extend => PactBroker::Api::Decorators::IntegrationDecorator
9
+
10
+ link :self do | context |
11
+ {
12
+ href: context[:resource_url],
13
+ title: "All integrations"
14
+ }
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -146,7 +146,7 @@ module PactBroker
146
146
  link :'pb:publish-verification-results' do | options |
147
147
  {
148
148
  title: "Publish verification results",
149
- href: verification_publication_url(represented, options.fetch(:base_url))
149
+ href: verification_publication_url(represented, options.fetch(:base_url), options[:metadata])
150
150
  }
151
151
  end
152
152
 
@@ -2,21 +2,16 @@ require_relative 'base_decorator'
2
2
  require_relative 'pact_pacticipant_decorator'
3
3
 
4
4
  module PactBroker
5
-
6
5
  module Api
7
-
8
6
  module Decorators
9
-
10
7
  class PactDetailsDecorator < BaseDecorator
11
-
12
8
  property :consumer, :extend => PactBroker::Api::Decorators::PactPacticipantDecorator, :embedded => true
13
9
  property :provider, :extend => PactBroker::Api::Decorators::PactPacticipantDecorator, :embedded => true
14
10
 
15
11
  link :self do | options |
16
12
  pact_url(options[:base_url], represented)
17
13
  end
18
-
19
14
  end
20
15
  end
21
16
  end
22
- end
17
+ end
@@ -0,0 +1,12 @@
1
+ require_relative 'base_decorator'
2
+ require 'pact_broker/api/pact_broker_urls'
3
+
4
+ module PactBroker
5
+ module Api
6
+ module Decorators
7
+ class VerifiablePactDecorator < BaseDecorator
8
+
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'base_decorator'
2
+ require_relative 'verifiable_pact_decorator'
3
+ require 'pact_broker/api/pact_broker_urls'
4
+
5
+ module PactBroker
6
+ module Api
7
+ module Decorators
8
+ class VerifiablePactsDecorator < BaseDecorator
9
+ collection :entries, as: :pacts, embedded: true, :extend => PactBroker::Api::Decorators::VerifiablePactDecorator
10
+
11
+ link :self do | context |
12
+ {
13
+ href: context[:resource_url],
14
+ title: "Pacts to be verified"
15
+ }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -16,6 +16,8 @@ module PactBroker
16
16
  property :name
17
17
  end
18
18
 
19
+ property :description, getter: lambda { |context| context[:represented].display_description }
20
+
19
21
  property :consumer, :class => PactBroker::Domain::Pacticipant do
20
22
  property :name
21
23
  end
@@ -24,6 +26,8 @@ module PactBroker
24
26
  property :name
25
27
  end
26
28
 
29
+ property :enabled, default: true
30
+
27
31
  property :request, :class => PactBroker::Webhooks::WebhookRequestTemplate, extend: WebhookRequestTemplateDecorator
28
32
  collection :events, :class => PactBroker::Webhooks::WebhookEvent, extend: WebhookEventDecorator
29
33
 
@@ -31,7 +35,7 @@ module PactBroker
31
35
 
32
36
  link :self do | options |
33
37
  {
34
- title: represented.description,
38
+ title: represented.display_description,
35
39
  href: webhook_url(represented.uuid, options[:base_url])
36
40
  }
37
41
 
@@ -8,7 +8,6 @@ module PactBroker
8
8
  class WebhookExecutionResultDecorator < BaseDecorator
9
9
  class ErrorDecorator < BaseDecorator
10
10
  property :message
11
- property :backtrace
12
11
  end
13
12
 
14
13
  class HTTPRequestDecorator < BaseDecorator
@@ -24,8 +24,8 @@ module PactBroker
24
24
  links :'pb:webhooks' do | context |
25
25
  represented.entries.collect do | webhook |
26
26
  {
27
- title: webhook.description,
28
- name: webhook.request_description,
27
+ title: "Webhook",
28
+ name: webhook.display_description,
29
29
  href: webhook_url(webhook.uuid, context[:base_url])
30
30
  }
31
31
  end
@@ -54,6 +54,27 @@ module PactBroker
54
54
  "#{pactigration_base_url(base_url, pact)}/pact-version/#{pact.pact_version_sha}"
55
55
  end
56
56
 
57
+ def pact_version_url_with_metadata pact, base_url = ''
58
+ "#{pactigration_base_url(base_url, pact)}/pact-version/#{pact.pact_version_sha}/metadata/#{build_webhook_metadata(pact)}"
59
+ end
60
+
61
+ def build_webhook_metadata(pact)
62
+ Base64.strict_encode64(Rack::Utils.build_nested_query(
63
+ consumer_version_number: pact.consumer_version_number,
64
+ consumer_version_tags: pact.consumer_version_tag_names
65
+ ))
66
+ end
67
+
68
+ def parse_webhook_metadata(metadata)
69
+ if metadata
70
+ Rack::Utils.parse_nested_query(Base64.strict_decode64(metadata)).each_with_object({}) do | (k, v), new_hash |
71
+ new_hash[k.to_sym] = v
72
+ end
73
+ else
74
+ {}
75
+ end
76
+ end
77
+
57
78
  def pact_url_from_params base_url, params
58
79
  [ base_url, 'pacts',
59
80
  'provider', url_encode(params[:provider_name]),
@@ -81,6 +102,10 @@ module PactBroker
81
102
  "#{base_url}/integrations/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}"
82
103
  end
83
104
 
105
+ def dashboard_url_for_integration consumer_name, provider_name, base_url = ""
106
+ "#{base_url}/dashboard/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}"
107
+ end
108
+
84
109
  def previous_distinct_diff_url pact, base_url
85
110
  pact_url(base_url, pact) + "/diff/previous-distinct"
86
111
  end
@@ -132,8 +157,9 @@ module PactBroker
132
157
  "#{verification_url(verification, base_url)}/triggered-webhooks"
133
158
  end
134
159
 
135
- def verification_publication_url pact, base_url
136
- "#{pactigration_base_url(base_url, pact)}/pact-version/#{pact.pact_version_sha}/verification-results"
160
+ def verification_publication_url pact, base_url, metadata = ""
161
+ metadata_part = metadata ? "/metadata/#{metadata}" : ""
162
+ "#{pactigration_base_url(base_url, pact)}/pact-version/#{pact.pact_version_sha}#{metadata_part}/verification-results"
137
163
  end
138
164
 
139
165
  def tag_url base_url, tag
@@ -200,8 +226,16 @@ module PactBroker
200
226
  "#{latest_pact_url(base_url, pact)}/badge.svg"
201
227
  end
202
228
 
229
+ def matrix_url consumer_name, provider_name, base_url = ''
230
+ "/matrix/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}"
231
+ end
232
+
203
233
  def matrix_url_from_params params, base_url = ''
204
- "#{base_url}/matrix/provider/#{url_encode(params.fetch(:provider_name))}/consumer/#{url_encode(params.fetch(:consumer_name))}"
234
+ matrix_url(params.fetch(:consumer_name), params.fetch(:provider_name), base_url)
235
+ end
236
+
237
+ def group_url(pacticipant_name, base_url = '')
238
+ "#{base_url}/groups/#{pacticipant_name}"
205
239
  end
206
240
 
207
241
  def hal_browser_url target_url
@@ -167,6 +167,10 @@ module PactBroker
167
167
  def pact
168
168
  @pact ||= pact_service.find_pact(pact_params)
169
169
  end
170
+
171
+ def database_connector
172
+ request.env["pactbroker.database_connector"]
173
+ end
170
174
  end
171
175
  end
172
176
  end
@@ -30,7 +30,7 @@ module PactBroker
30
30
  private
31
31
 
32
32
  def index_items
33
- index_service.find_index_items(tags: true)
33
+ index_service.find_index_items(identifier_from_path.merge(tags: true))
34
34
  end
35
35
  end
36
36
  end
@@ -1,12 +1,16 @@
1
1
  require 'pact_broker/api/resources/base_resource'
2
2
  require 'pact_broker/api/renderers/integrations_dot_renderer'
3
+ require 'pact_broker/api/decorators/integrations_decorator'
3
4
 
4
5
  module PactBroker
5
6
  module Api
6
7
  module Resources
7
8
  class Integrations < BaseResource
8
9
  def content_types_provided
9
- [["text/vnd.graphviz", :to_dot]]
10
+ [
11
+ ["text/vnd.graphviz", :to_dot],
12
+ ["application/hal+json", :to_json]
13
+ ]
10
14
  end
11
15
 
12
16
  def allowed_methods
@@ -17,8 +21,12 @@ module PactBroker
17
21
  PactBroker::Api::Renderers::IntegrationsDotRenderer.call(integrations)
18
22
  end
19
23
 
24
+ def to_json
25
+ PactBroker::Api::Decorators::IntegrationsDecorator.new(integrations).to_json(user_options: decorator_context)
26
+ end
27
+
20
28
  def integrations
21
- pact_service.find_latest_pacts
29
+ integration_service.find_all
22
30
  end
23
31
 
24
32
  def delete_resource