pact_broker 2.70.0 → 2.74.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +15 -23
  3. data/CHANGELOG.md +57 -0
  4. data/Dockerfile +5 -1
  5. data/README.md +1 -1
  6. data/docker-compose-ci-mysql.yml +37 -0
  7. data/lib/db.rb +1 -0
  8. data/lib/pact_broker/api/decorators/extended_pact_decorator.rb +9 -1
  9. data/lib/pact_broker/api/decorators/extended_verification_decorator.rb +8 -0
  10. data/lib/pact_broker/api/decorators/matrix_decorator.rb +9 -4
  11. data/lib/pact_broker/api/decorators/tag_decorator.rb +0 -3
  12. data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +3 -1
  13. data/lib/pact_broker/api/pact_broker_urls.rb +9 -5
  14. data/lib/pact_broker/api/resources/error_handler.rb +1 -1
  15. data/lib/pact_broker/api/resources/metadata_resource_methods.rb +24 -0
  16. data/lib/pact_broker/api/resources/pact.rb +2 -13
  17. data/lib/pact_broker/api/resources/pact_resource_methods.rb +23 -0
  18. data/lib/pact_broker/api/resources/pact_version.rb +3 -0
  19. data/lib/pact_broker/api/resources/tagged_pact_versions.rb +4 -0
  20. data/lib/pact_broker/api/resources/verifications.rb +2 -4
  21. data/lib/pact_broker/app.rb +1 -0
  22. data/lib/pact_broker/configuration.rb +12 -4
  23. data/lib/pact_broker/db/clean_incremental.rb +154 -15
  24. data/lib/pact_broker/db/delete_overwritten_data.rb +55 -27
  25. data/lib/pact_broker/domain/tag.rb +42 -0
  26. data/lib/pact_broker/domain/verification.rb +87 -0
  27. data/lib/pact_broker/domain/version.rb +13 -6
  28. data/lib/pact_broker/metrics/service.rb +17 -4
  29. data/lib/pact_broker/pacts/all_pact_publications.rb +8 -0
  30. data/lib/pact_broker/pacts/metadata.rb +53 -8
  31. data/lib/pact_broker/pacts/repository.rb +45 -28
  32. data/lib/pact_broker/pacts/selector.rb +22 -0
  33. data/lib/pact_broker/pacts/selectors.rb +4 -0
  34. data/lib/pact_broker/tags/tag_with_latest_flag.rb +2 -0
  35. data/lib/pact_broker/tasks/clean_task.rb +17 -3
  36. data/lib/pact_broker/tasks/delete_overwritten_data_task.rb +23 -7
  37. data/lib/pact_broker/test/http_test_data_builder.rb +46 -19
  38. data/lib/pact_broker/test/test_data_builder.rb +24 -0
  39. data/lib/pact_broker/version.rb +1 -1
  40. data/lib/sequel/extensions/statement_timeout.rb +22 -0
  41. data/script/docker-container/test.sh +3 -0
  42. data/script/docker/db-psql.sh +3 -0
  43. data/script/docker/db-reload.sh +11 -0
  44. data/script/pry.rb +25 -0
  45. data/script/reproduce-issue-starting-up.rb +43 -0
  46. data/script/reproduce-issue.rb +8 -23
  47. data/script/seed.rb +1 -0
  48. data/script/test/run-rake-on-docker-compose-mysql.sh +8 -0
  49. data/spec/features/delete_tagged_pact_versions_spec.rb +2 -2
  50. data/spec/features/get_pact_spec.rb +2 -2
  51. data/spec/features/get_pact_version.rb +26 -3
  52. data/spec/fixtures/approvals/clean_incremental_dry_run.approved.json +100 -0
  53. data/spec/lib/pact_broker/api/decorators/extended_pact_decorator_spec.rb +1 -0
  54. data/spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb +20 -8
  55. data/spec/lib/pact_broker/api/decorators/verifiable_pact_decorator_spec.rb +5 -7
  56. data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +16 -6
  57. data/spec/lib/pact_broker/api/resources/error_handler_spec.rb +16 -0
  58. data/spec/lib/pact_broker/api/resources/pact_spec.rb +20 -9
  59. data/spec/lib/pact_broker/api/resources/tagged_pact_versions_spec.rb +10 -2
  60. data/spec/lib/pact_broker/api/resources/verifications_spec.rb +7 -3
  61. data/spec/lib/pact_broker/db/clean_incremental_spec.rb +29 -3
  62. data/spec/lib/pact_broker/db/delete_overwritten_data_spec.rb +71 -11
  63. data/spec/lib/pact_broker/domain/tag_spec.rb +23 -9
  64. data/spec/lib/pact_broker/domain/verification_spec.rb +49 -0
  65. data/spec/lib/pact_broker/metrics/service_spec.rb +4 -1
  66. data/spec/lib/pact_broker/pacts/metadata_spec.rb +73 -0
  67. data/spec/lib/pact_broker/pacts/repository_find_for_verification_fallback_spec.rb +2 -2
  68. data/spec/lib/pact_broker/pacts/repository_find_for_verification_spec.rb +33 -13
  69. data/spec/lib/pact_broker/pacts/repository_spec.rb +54 -7
  70. data/spec/lib/pact_broker/pacts/selected_pact_spec.rb +23 -0
  71. data/spec/migrations/change_migration_strategy_spec.rb +1 -1
  72. metadata +19 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b57a2f04694ce119675cd5b4fb647e1c2faff71b890958391ca30846ef0d7fab
4
- data.tar.gz: 8b6484329b0821600417fc17ad564a14de06edf2edc21939423c34ea2795cee1
3
+ metadata.gz: 9bb163d5ed55a2b3f98f18b63763749a0a9a337538a69b30af9f01295e720154
4
+ data.tar.gz: cd8cc58097602d87c09f9af494b49c28666223350f57a2f4f9ccade3f3b1d57c
5
5
  SHA512:
6
- metadata.gz: e4d1c82adbbb041f38d64200ccb0f1fc8d4672f3a9e445db0dcf428b25c8353c5922a3fb579b74560114df476886fb8aee93d2b793643ae9bbbbd8f786fec443
7
- data.tar.gz: dc130a9cea4a62c741c401290b385f807c4597073a1ae467d3b334bd058267eca2179ebb6be60d53c2f6cf7046c7b567edf473738a2642e122d1c6e40938301a
6
+ metadata.gz: a32dd3179963aac89bff4ca0197e80f73576188355b92984e51ee010522e34d7017ab6a2cac6eaf5ac865391b221d7aa619efdd8950727cac20c2e6d2b686e79
7
+ data.tar.gz: fbd56c79155229b5900294f13b0ce1ce9390cd2260e678a83ef2b358d4ad8112ae6e4f257bc3380e4ed488b67ed838f80214ba16bb8431c002f85878c5989a33
@@ -3,6 +3,18 @@ name: Test
3
3
  on: push
4
4
 
5
5
  jobs:
6
+ sqlite:
7
+ runs-on: "ubuntu-latest"
8
+ strategy:
9
+ matrix:
10
+ ruby_version: ["2.7"]
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ - uses: actions/setup-ruby@v1
14
+ with:
15
+ ruby-version: ${{ matrix.ruby_version }}
16
+ - run: "bundle install"
17
+ - run: "bundle exec rake"
6
18
  postgres:
7
19
  runs-on: "ubuntu-latest"
8
20
  strategy:
@@ -25,7 +37,7 @@ jobs:
25
37
  - uses: actions/setup-ruby@v1
26
38
  with:
27
39
  ruby-version: ${{ matrix.ruby_version }}
28
- - run: "bundle install"
40
+ - run: "gem install bundler && bundle install"
29
41
  env:
30
42
  INSTALL_PG: "true"
31
43
  - run: "bundle exec rake"
@@ -36,27 +48,7 @@ jobs:
36
48
  runs-on: "ubuntu-latest"
37
49
  strategy:
38
50
  matrix:
39
- ruby_version: ["2.5", "2.7"]
51
+ ruby_version: ["2.7"]
40
52
  steps:
41
53
  - uses: actions/checkout@v2
42
- - uses: actions/setup-ruby@v1
43
- with:
44
- ruby-version: ${{ matrix.ruby_version }}
45
- - uses: mirromutth/mysql-action@v1.1
46
- with:
47
- host port: 3306 # Optional, default value is 3306. The port of host
48
- #container port: 3307 # Optional, default value is 3306. The port of container
49
- character set server: 'utf8' # Optional, default value is 'utf8mb4'. The '--character-set-server' option for mysqld
50
- collation server: 'utf8_general_ci' # Optional, default value is 'utf8mb4_general_ci'. The '--collation-server' option for mysqld
51
- mysql version: '8.0' # Optional, default value is "latest". The version of the MySQL
52
- mysql database: 'pact_broker' # Optional, default value is "test". The specified database which will be create
53
- mysql root password: 'pact_broker' # Required if "mysql user" is empty, default is empty. The root superuser password
54
- mysql user: 'pact_broker' # Required if "mysql root password" is empty, default is empty. The superuser for the specified database. Can use secrets, too
55
- mysql password: 'pact_broker' # Required if "mysql user" exists. The password for the "mysql user"
56
- - run: "bundle install"
57
- env:
58
- INSTALL_MYSQL: "true"
59
- - run: "bundle exec rake"
60
- env:
61
- DATABASE_ADAPTER: github_actions_mysql
62
- INSTALL_MYSQL: "true"
54
+ - run: script/test/run-rake-on-docker-compose-mysql.sh
@@ -1,3 +1,60 @@
1
+ <a name="v2.74.1"></a>
2
+ ### v2.74.1 (2021-01-05)
3
+
4
+ #### Bug Fixes
5
+
6
+ * **deps**
7
+ * remove manual specification for nokogiri now the fix for CVE-2020-26247 has been released in 1.11 ([771378a9](/../../commit/771378a9))
8
+
9
+ <a name="v2.74.0"></a>
10
+ ### v2.74.0 (2021-01-04)
11
+
12
+ #### Features
13
+
14
+ * include the consumer version selectors in the metadata of the 'pact for verification' URL ([32bbe1c3](/../../commit/32bbe1c3))
15
+
16
+ #### Bug Fixes
17
+
18
+ * **deps**
19
+ * update nokogiri for CVE-2020-26247 ([336ec897](/../../commit/336ec897))
20
+
21
+ <a name="v2.73.0"></a>
22
+ ### v2.73.0 (2020-12-16)
23
+
24
+ #### Features
25
+
26
+ * **wip**
27
+ * permenently enable feature that keeps pacts as WIP when verified via the URL from a webhook triggered by pact publication ([70071373](/../../commit/70071373))
28
+
29
+ * allow error causes to be configured to log at warning level ([3a7bf5ea](/../../commit/3a7bf5ea))
30
+ * add self relations for tags in matrix resource ([727cee99](/../../commit/727cee99))
31
+ * add self relation to tags in extended pact and verification resources ([a560ce6d](/../../commit/a560ce6d))
32
+
33
+ * **metrics**
34
+ * timeout matrix count ([43091b57](/../../commit/43091b57))
35
+
36
+ #### Bug Fixes
37
+
38
+ * url encode tag name in tag URL ([80df832d](/../../commit/80df832d))
39
+
40
+ <a name="v2.72.0"></a>
41
+ ### v2.72.0 (2020-12-02)
42
+
43
+ #### Features
44
+
45
+ * allow overwritten data deletion to be configured with extra options ([fd809737](/../../commit/fd809737))
46
+ * use the consumer version number in the metadata to select the correct consumer version for a pact version resource ([422c87fc](/../../commit/422c87fc))
47
+ * return link to latest pact if more pacts exist when deleting pacts by tag ([b87ea704](/../../commit/b87ea704))
48
+ * update output for clean dry run ([681a5ddd](/../../commit/681a5ddd))
49
+ * update metrics output ([0617e9df](/../../commit/0617e9df))
50
+
51
+ <a name="v2.71.0"></a>
52
+ ### v2.71.0 (2020-11-28)
53
+
54
+ #### Features
55
+
56
+ * allow clean to be performed in dry run mode ([a7a18fde](/../../commit/a7a18fde))
57
+
1
58
  <a name="v2.70.0"></a>
2
59
  ### v2.70.0 (2020-11-28)
3
60
 
data/Dockerfile CHANGED
@@ -26,7 +26,7 @@ RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSI
26
26
 
27
27
 
28
28
  COPY Gemfile /home/Gemfile
29
- COPY Gemfile.lock /home/Gemfile.lock
29
+ # COPY Gemfile.lock /home/Gemfile.lock # lock file does not exist on CI
30
30
  COPY pact_broker.gemspec /home/pact_broker.gemspec
31
31
  COPY lib/pact_broker/version.rb /home/lib/pact_broker/version.rb
32
32
  COPY .gitignore /home/.gitignore
@@ -38,6 +38,10 @@ RUN echo '#!/bin/sh' >> /usr/local/bin/start
38
38
  RUN echo 'bundle exec rackup -o 0.0.0.0 -p 9292' >> /usr/local/bin/start
39
39
  RUN chmod +x /usr/local/bin/start
40
40
 
41
+ RUN echo '#!/bin/sh' >> /usr/local/bin/test
42
+ RUN echo 'bundle exec rake' >> /usr/local/bin/test
43
+ RUN chmod +x /usr/local/bin/test
44
+
41
45
  RUN echo '#!/bin/sh' >> /home/init-db.sh
42
46
  RUN echo 'bundle exec rake db:prepare:test' >> /home/init-db.sh
43
47
  RUN chmod +x /home/init-db.sh
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Pact Broker
2
2
  [![Gem Version](https://badge.fury.io/rb/pact_broker.svg)](http://badge.fury.io/rb/pact_broker)
3
- [![Build Status](https://travis-ci.org/pact-foundation/pact_broker.svg?branch=master)](https://travis-ci.org/pact-foundation/pact_broker)
3
+ ![Build status](https://github.com/pact-foundation/pact_broker/workflows/Test/badge.svg)
4
4
  [![Join the chat at https://pact-foundation.slack.com/](https://img.shields.io/badge/chat-on%20slack-blue.svg?logo=slack)](https://slack.pact.io)
5
5
  [![security](https://hakiri.io/github/pact-foundation/pact_broker/master.svg)](https://hakiri.io/github/pact-foundation/pact_broker/master)
6
6
  [![Code Climate](https://codeclimate.com/github/pact-foundation/pact_broker/badges/gpa.svg)](https://codeclimate.com/github/pact-foundation/pact_broker)
@@ -0,0 +1,37 @@
1
+ version: "3"
2
+
3
+ services:
4
+ mysql:
5
+ image: mysql:5.7.28
6
+ command: --default-authentication-plugin=mysql_native_password
7
+ environment:
8
+ MYSQL_ROOT_PASSWORD: pact_broker
9
+ MYSQL_DATABASE: pact_broker
10
+ MYSQL_USER: pact_broker
11
+ MYSQL_PASSWORD: pact_broker
12
+ ports:
13
+ - "3306:3306"
14
+
15
+ tests:
16
+ build: .
17
+ depends_on:
18
+ - mysql
19
+ environment:
20
+ DATABASE_ADAPTER: docker_compose_mysql
21
+ PACT_BROKER_HIDE_PACTFLOW_MESSAGES: 'true'
22
+ INSTALL_MYSQL: 'true'
23
+ volumes:
24
+ - ./lib:/home/lib
25
+ - ./spec:/home/spec
26
+ - ./db:/home/db
27
+ - ./config.ru:/home/config.ru
28
+ - ./tasks:/home/tasks
29
+ - ./Rakefile:/home/Rakefile
30
+ - ./config:/home/config
31
+ - ./.rspec:/home/.rspec
32
+ - ./.rubocop:/home/.rubocop
33
+ - ./.gitignore:/home/.gitignore
34
+ - ./public:/home/public
35
+ - ./script/docker-container/test.sh:/usr/local/bin/test
36
+ entrypoint: dockerize
37
+ command: --wait tcp://mysql:3306 -timeout 60s test
data/lib/db.rb CHANGED
@@ -33,6 +33,7 @@ module DB
33
33
  con = Sequel.connect(db_credentials.merge(:logger => logger, :pool_class => Sequel::ThreadedConnectionPool, :encoding => 'utf8'))
34
34
  con.extension(:connection_validator)
35
35
  con.extension(:pagination)
36
+ con.extension(:statement_timeout)
36
37
  con.extend_datasets do
37
38
  def any?
38
39
  !empty?
@@ -11,6 +11,14 @@ module PactBroker
11
11
  property :name
12
12
  property :latest, getter: ->(_) { true }
13
13
 
14
+ link :self do | options |
15
+ {
16
+ title: 'Tag',
17
+ name: represented.name,
18
+ href: tag_url(options[:base_url], represented)
19
+ }
20
+ end
21
+
14
22
  link "pb:latest-pact" do | opts |
15
23
  {
16
24
  name: "The latest pact with the tag #{represented.name}",
@@ -33,7 +41,7 @@ module PactBroker
33
41
 
34
42
  def head_tags
35
43
  represented.head_tag_names.collect do | tag_name |
36
- OpenStruct.new(name: tag_name, pact: represented)
44
+ OpenStruct.new(name: tag_name, pact: represented, version: represented.consumer_version)
37
45
  end
38
46
  end
39
47
  end
@@ -7,6 +7,14 @@ module PactBroker
7
7
  class TagDecorator < BaseDecorator
8
8
  property :name
9
9
  property :latest?, as: :latest
10
+
11
+ link :self do | options |
12
+ {
13
+ title: 'Tag',
14
+ name: represented.name,
15
+ href: tag_url(options[:base_url], represented)
16
+ }
17
+ end
10
18
  end
11
19
 
12
20
  collection :provider_version_tags, as: :tags, embedded: true, extend: TagDecorator
@@ -76,7 +76,7 @@ module PactBroker
76
76
  href: version_url(base_url, consumer_version)
77
77
  }
78
78
  },
79
- tags: tags(line.consumer_version_tags)
79
+ tags: tags(line.consumer_version_tags, base_url)
80
80
  },
81
81
  _links: {
82
82
  self: {
@@ -86,11 +86,16 @@ module PactBroker
86
86
  }
87
87
  end
88
88
 
89
- def tags(tags)
89
+ def tags(tags, base_url)
90
90
  tags.collect do | tag |
91
91
  {
92
92
  name: tag.name,
93
- latest: tag.latest?
93
+ latest: tag.latest?,
94
+ _links: {
95
+ self: {
96
+ href: tag_url(base_url, tag)
97
+ }
98
+ }
94
99
  }
95
100
  end
96
101
  end
@@ -114,7 +119,7 @@ module PactBroker
114
119
  href: version_url(base_url, provider_version)
115
120
  }
116
121
  },
117
- tags: tags(line.provider_version_tags)
122
+ tags: tags(line.provider_version_tags, base_url)
118
123
  }
119
124
  end
120
125
 
@@ -3,11 +3,8 @@ require_relative 'pact_pacticipant_decorator'
3
3
  require_relative 'timestamps'
4
4
 
5
5
  module PactBroker
6
-
7
6
  module Api
8
-
9
7
  module Decorators
10
-
11
8
  class TagDecorator < BaseDecorator
12
9
 
13
10
  property :name
@@ -1,11 +1,13 @@
1
1
  require_relative 'base_decorator'
2
2
  require 'pact_broker/api/pact_broker_urls'
3
3
  require 'pact_broker/pacts/build_verifiable_pact_notices'
4
+ require 'pact_broker/pacts/metadata'
4
5
 
5
6
  module PactBroker
6
7
  module Api
7
8
  module Decorators
8
9
  class VerifiablePactDecorator < BaseDecorator
10
+ include PactBroker::Pacts::Metadata
9
11
 
10
12
  property :shortDescription, getter: -> (context) { PactBroker::Pacts::VerifiablePactMessages.new(context[:represented], nil).pact_version_short_description }
11
13
 
@@ -27,7 +29,7 @@ module PactBroker
27
29
  end
28
30
 
29
31
  link :self do | user_options |
30
- metadata = represented.wip ? { wip: true } : nil
32
+ metadata = build_metadata_for_pact_for_verification(represented)
31
33
  {
32
34
  href: pact_version_url_with_metadata(represented, metadata, user_options[:base_url]),
33
35
  name: represented.name
@@ -1,6 +1,8 @@
1
1
  require 'erb'
2
2
  require 'pact_broker/pacts/metadata'
3
3
  require 'pact_broker/logging'
4
+ require 'base64'
5
+ require 'rack'
4
6
 
5
7
  module PactBroker
6
8
  module Api
@@ -75,11 +77,9 @@ module PactBroker
75
77
  end
76
78
 
77
79
  def decode_pact_metadata(metadata)
78
- if metadata
80
+ if metadata && metadata != ''
79
81
  begin
80
- Rack::Utils.parse_nested_query(Base64.strict_decode64(metadata)).each_with_object({}) do | (k, v), new_hash |
81
- new_hash[k.to_sym] = v
82
- end
82
+ Rack::Utils.parse_nested_query(Base64.strict_decode64(metadata))
83
83
  rescue StandardError => e
84
84
  logger.warn("Exception parsing webhook metadata: #{metadata}", e)
85
85
  {}
@@ -116,6 +116,10 @@ module PactBroker
116
116
  "#{base_url}/pacts/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}/versions"
117
117
  end
118
118
 
119
+ def tagged_pact_versions_url consumer_name, provider_name, tag, base_url = ""
120
+ "#{base_url}/pacts/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}/tag/#{url_encode(tag)}"
121
+ end
122
+
119
123
  def integration_url consumer_name, provider_name, base_url = ""
120
124
  "#{base_url}/integrations/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}"
121
125
  end
@@ -197,7 +201,7 @@ module PactBroker
197
201
  end
198
202
 
199
203
  def tag_url base_url, tag
200
- "#{tags_url(base_url, tag.version)}/#{tag.name}"
204
+ "#{tags_url(base_url, tag.version)}/#{url_encode(tag.name)}"
201
205
  end
202
206
 
203
207
  def templated_tag_url_for_pacticipant pacticipant_name, base_url = ""
@@ -29,7 +29,7 @@ module PactBroker
29
29
  end
30
30
 
31
31
  def self.log_as_warning?(e)
32
- PactBroker.configuration.warning_error_classes.any? { |clazz| e.is_a?(clazz) }
32
+ PactBroker.configuration.warning_error_classes.any? { |clazz| e.is_a?(clazz) || e.cause&.is_a?(clazz) }
33
33
  end
34
34
 
35
35
  def self.display_message(e, obfuscated_message)
@@ -0,0 +1,24 @@
1
+ require 'pact_broker/hash_refinements'
2
+ require 'pact_broker/pacts/metadata'
3
+
4
+ module PactBroker
5
+ module Api
6
+ module Resources
7
+ module MetadataResourceMethods
8
+ using PactBroker::HashRefinements
9
+
10
+ def pact_params
11
+ @pact_params ||= PactBroker::Pacts::PactParams.from_request(request, maybe_params_with_consumer_version_number.merge(path_info))
12
+ end
13
+
14
+ def maybe_params_with_consumer_version_number
15
+ metadata.slice(:consumer_version_number)
16
+ end
17
+
18
+ def metadata
19
+ @metadata ||= PactBroker::Pacts::Metadata.parse_metadata(PactBrokerUrls.decode_pact_metadata(identifier_from_path[:metadata]))
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -8,6 +8,7 @@ require 'pact_broker/pacts/pact_params'
8
8
  require 'pact_broker/api/contracts/put_pact_params_contract'
9
9
  require 'pact_broker/webhooks/execution_configuration'
10
10
  require 'pact_broker/api/resources/webhook_execution_methods'
11
+ require 'pact_broker/api/resources/pact_resource_methods'
11
12
 
12
13
  module PactBroker
13
14
  module Api
@@ -15,6 +16,7 @@ module PactBroker
15
16
  class Pact < BaseResource
16
17
  include PacticipantResourceMethods
17
18
  include WebhookExecutionMethods
19
+ include PactResourceMethods
18
20
 
19
21
  def content_types_provided
20
22
  [
@@ -110,19 +112,6 @@ module PactBroker
110
112
  @pact_params ||= PactBroker::Pacts::PactParams.from_request request, path_info
111
113
  end
112
114
 
113
- def set_post_deletion_response
114
- latest_pact = pact_service.find_latest_pact(pact_params)
115
- response_body = { "_links" => { index: { href: base_url } } }
116
- if latest_pact
117
- response_body["_links"]["pb:latest-pact-version"] = {
118
- href: latest_pact_url(base_url, latest_pact),
119
- title: "Latest pact"
120
- }
121
- end
122
- response.body = response_body.to_json
123
- response.headers["Content-Type" => "application/hal+json;charset=utf-8"]
124
- end
125
-
126
115
  def webhook_options
127
116
  {
128
117
  database_connector: database_connector,
@@ -0,0 +1,23 @@
1
+ module PactBroker
2
+ module Api
3
+ module Resources
4
+ module PactResourceMethods
5
+ def set_post_deletion_response
6
+ latest_pact = pact_service.find_latest_pact(
7
+ consumer_name: pact_params[:consumer_name],
8
+ provider_name: pact_params[:provider_name]
9
+ )
10
+ response_body = { "_links" => { index: { href: base_url } } }
11
+ if latest_pact
12
+ response_body["_links"]["pb:latest-pact-version"] = {
13
+ href: latest_pact_url(base_url, latest_pact),
14
+ title: "Latest pact"
15
+ }
16
+ end
17
+ response.body = response_body.to_json
18
+ response.headers["Content-Type" => "application/hal+json;charset=utf-8"]
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end