pact_broker 2.5.1 → 2.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b90ded3cc7cc7a1c2a746508fb134ac6cf17c8a
4
- data.tar.gz: c6a2a2c4a07b89818129a2033bab557f263a56c0
3
+ metadata.gz: 9029e88952b1175c690a65568eb507d2acf08c81
4
+ data.tar.gz: adf028a7f196fb7e78ae80cec9733fa8eecfc3fe
5
5
  SHA512:
6
- metadata.gz: ea4852e81136f460f3049d3ab66260e1bc9076569ecb3b81108fa6e369491820b9af042bf473fc384cdba35f024a0a75a4156a85a605ef06b111f3044edd51a5
7
- data.tar.gz: ee44bf0feb37587171992692eb3b53f4380d3fae8e011e4e0d94f56493874e9600179eb23c806e1cab77a5e061dc97d17a23e8aeb8ea9214f3cddd9b34bf4b41
6
+ metadata.gz: c9454daa54e8d1abe94458d753376f76a3381d7d02041671649426dcd2de243a0f0e6557d18ebec40b4db803b23ae0b70811f9fb19aea1bec7799f30e025f1b2
7
+ data.tar.gz: 0efc0461b3d6a84ea6a78ead513ad850427acb31a8c21c6a3f18ac3c741119554037b041f2d9751fec51e88118c137db7f1cff4e6347da5bf769d6437d3cd1e4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ <a name="v2.6.0"></a>
2
+ ### v2.6.0 (2017-10-06)
3
+
4
+ #### Features
5
+
6
+ * add configuration option for check_for_potential_duplicate_pacticipant_names ([6ab3fda](/../../commit/6ab3fda))
7
+
8
+ #### Bug Fixes
9
+
10
+ * add webhook_retry_schedule and semver_formats to list of configuration options that can be saved to the database ([5bab062](/../../commit/5bab062))
11
+ * delete related triggered webhooks when webhook is deleted ([48f9853](/../../commit/48f9853))
12
+ * use strict mode when using mysql ([f991e15](/../../commit/f991e15))
13
+
1
14
  <a name="v2.5.1"></a>
2
15
  ### v2.5.1 (2017-09-26)
3
16
 
@@ -17,7 +17,7 @@ Sequel.migration do
17
17
  # TODO drop_column(:webhook_executions, :provider_id)
18
18
 
19
19
  # TODO
20
- # alter_table(:triggered_webhooks) do
20
+ # alter_table(:webhook_executions) do
21
21
  # set_column_not_null(:triggered_webhook_id)
22
22
  # end
23
23
  end
@@ -0,0 +1,20 @@
1
+ require 'securerandom'
2
+
3
+ Sequel.migration do
4
+ up do
5
+ from(:triggered_webhooks).where(webhook_id: nil).each do | triggered_webhook |
6
+ from(:webhook_executions).where(triggered_webhook_id: triggered_webhook[:id]).delete
7
+ from(:triggered_webhooks).where(id: triggered_webhook[:id]).delete
8
+ end
9
+
10
+ from(:webhook_executions).where(webhook_id: nil, triggered_webhook_id: nil).delete
11
+ end
12
+
13
+ # TODO
14
+ # alter_table(:triggered_webhooks) do
15
+ # set_column_not_null(:webhook_id)
16
+ # end
17
+
18
+ down do
19
+ end
20
+ end
data/lib/db.rb CHANGED
@@ -30,6 +30,7 @@ module DB
30
30
  con.extension(:connection_validator)
31
31
  con.pool.connection_validation_timeout = -1 #Check the connection on every request
32
32
  con.timezone = :utc
33
+ con.run("SET sql_mode='STRICT_TRANS_TABLES';") if db_credentials[:adapter].to_s =~ /mysql/
33
34
  con
34
35
  end
35
36
 
@@ -5,15 +5,18 @@ module PactBroker
5
5
  module PacticipantResourceMethods
6
6
 
7
7
  def potential_duplicate_pacticipants? pacticipant_names
8
- messages = pacticipant_service.messages_for_potential_duplicate_pacticipants pacticipant_names, base_url
9
- if messages.any?
10
- response.body = messages.join("\n")
11
- response.headers['Content-Type'] = 'text/plain'
8
+ if PactBroker.configuration.check_for_potential_duplicate_pacticipant_names
9
+ messages = pacticipant_service.messages_for_potential_duplicate_pacticipants pacticipant_names, base_url
10
+ if messages.any?
11
+ response.body = messages.join("\n")
12
+ response.headers['Content-Type'] = 'text/plain'
13
+ end
14
+ messages.any?
15
+ else
16
+ false
12
17
  end
13
- messages.any?
14
18
  end
15
-
16
19
  end
17
20
  end
18
21
  end
19
- end
22
+ end
@@ -1,3 +1,4 @@
1
+ require 'pact_broker/api/resources/base_resource'
1
2
  require 'pact_broker/services'
2
3
  require 'pact_broker/api/decorators/webhook_decorator'
3
4
 
@@ -63,6 +63,7 @@ module PactBroker
63
63
  PactBroker::DB.connection = configuration.database_connection
64
64
  PactBroker::DB.connection.timezone = :utc
65
65
  PactBroker::DB.validate_connection_config if configuration.validate_database_connection_config
66
+ PactBroker::DB.set_mysql_strict_mode_if_mysql
66
67
  Sequel.datetime_class = DateTime
67
68
  Sequel.database_timezone = :utc # Store all dates in UTC, assume any date without a TZ is UTC
68
69
  Sequel.application_timezone = :local # Convert dates to localtime when retrieving from database
@@ -11,11 +11,20 @@ module PactBroker
11
11
 
12
12
  class Configuration
13
13
 
14
- SAVABLE_SETTING_NAMES = [:order_versions_by_date, :use_case_sensitive_resource_names, :enable_public_badge_access, :shields_io_base_url]
14
+ SAVABLE_SETTING_NAMES = [
15
+ :order_versions_by_date,
16
+ :use_case_sensitive_resource_names,
17
+ :enable_public_badge_access,
18
+ :shields_io_base_url,
19
+ :check_for_potential_duplicate_pacticipant_names,
20
+ :webhook_retry_schedule,
21
+ :semver_formats
22
+ ]
15
23
 
16
24
  attr_accessor :log_dir, :database_connection, :auto_migrate_db, :use_hal_browser, :html_pact_renderer
17
25
  attr_accessor :validate_database_connection_config, :enable_diagnostic_endpoints, :version_parser
18
26
  attr_accessor :use_case_sensitive_resource_names, :order_versions_by_date
27
+ attr_accessor :check_for_potential_duplicate_pacticipant_names
19
28
  attr_accessor :semver_formats
20
29
  attr_accessor :enable_public_badge_access, :shields_io_base_url
21
30
  attr_accessor :webhook_retry_schedule
@@ -48,8 +57,9 @@ module PactBroker
48
57
  # Not recommended to set this to true unless there is no way to
49
58
  # consistently extract an orderable object from the consumer application version number.
50
59
  config.order_versions_by_date = false
51
- config.semver_formats = ["%M.%m.%p%s%d","%M.%m", "%M"]
60
+ config.semver_formats = ["%M.%m.%p%s%d", "%M.%m", "%M"]
52
61
  config.webhook_retry_schedule = [10, 60, 120, 300, 600, 1200] #10 sec, 1 min, 2 min, 5 min, 10 min, 20 min => 38 minutes
62
+ config.check_for_potential_duplicate_pacticipant_names = true
53
63
  config
54
64
  end
55
65
 
@@ -24,5 +24,13 @@ module PactBroker
24
24
  def self.validate_connection_config
25
25
  PactBroker::DB::ValidateEncoding.(connection)
26
26
  end
27
+
28
+ def self.set_mysql_strict_mode_if_mysql
29
+ connection.run("SET sql_mode='STRICT_TRANS_TABLES';") if mysql?
30
+ end
31
+
32
+ def self.mysql?
33
+ connection.adapter_scheme =~ /mysql/
34
+ end
27
35
  end
28
36
  end
@@ -28,8 +28,8 @@ en:
28
28
  If you meant to specify one of the above names, please correct the pact configuration, and re-publish the pact.
29
29
  If the pact is intended to be for a new consumer or provider, please manually create "%{new_name}" using the following command, and then re-publish the pact:
30
30
  $ curl -v -XPOST -H "Content-Type: application/json" -d "{\"name\": \"%{new_name}\"}" %{create_pacticipant_url}
31
- If the pact broker requires authentication, include the '-u' flag with the proper credentials:
32
- $ curl -v -XPOST -u <username>:<password> -H "Content-Type: application/json" -d "{\"name\": \"%{new_name}\"}" %{create_pacticipant_url}
31
+ If the pact broker requires basic authentication, add '-u <username:password>' to the command.
32
+ To disable this check, set `check_for_potential_duplicate_pacticipant_names` to false in the configuration.
33
33
  "400":
34
34
  title: 400 Malformed Request
35
35
  message: The request was malformed and could not be processed.
@@ -38,8 +38,6 @@ module PactBroker
38
38
  .downcase
39
39
  .split("_")
40
40
  end
41
-
42
41
  end
43
-
44
42
  end
45
43
  end
@@ -19,6 +19,9 @@ module PactBroker
19
19
 
20
20
  # Accepts two hashes representing pacts, outputs a merged hash
21
21
  # Does not make any guarantees about order of interactions
22
+ # TODO: should not modify original!
23
+ # TODO: is not checking response for equality!
24
+ # TODO: should have separate tests!
22
25
  def merge_pacts original_json, additional_json
23
26
  original, additional = [original_json, additional_json].map{|str| JSON.parse(str, PACT_PARSING_OPTIONS) }
24
27
 
@@ -1,3 +1,3 @@
1
1
  module PactBroker
2
- VERSION = '2.5.1'
2
+ VERSION = '2.6.0'
3
3
  end
@@ -27,6 +27,8 @@ module PactBroker
27
27
  end
28
28
  end
29
29
 
30
+ # For a brief time, the code was released with a direct relationship between
31
+ # webhook and execution. Need to make sure any existing data is handled properly.
30
32
  class DeprecatedExecution < Sequel::Model(:webhook_executions)
31
33
  associate(:many_to_one, :provider, :class => "PactBroker::Domain::Pacticipant", :key => :provider_id, :primary_key => :id)
32
34
  associate(:many_to_one, :consumer, :class => "PactBroker::Domain::Pacticipant", :key => :consumer_id, :primary_key => :id)
@@ -104,9 +104,11 @@ module PactBroker
104
104
  Execution.where(id: execution_ids).delete
105
105
  end
106
106
 
107
- def unlink_triggered_webhooks_by_webhook_uuid uuid
108
- TriggeredWebhook.where(webhook: Webhook.where(uuid: uuid)).update(webhook_id: nil)
109
- DeprecatedExecution.where(webhook_id: Webhook.where(uuid: uuid).select(:id)).update(webhook_id: nil)
107
+ def delete_triggered_webhooks_by_webhook_uuid uuid
108
+ triggered_webhook_ids = TriggeredWebhook.where(webhook: Webhook.where(uuid: uuid)).select_for_subquery(:id)
109
+ Execution.where(triggered_webhook_id: triggered_webhook_ids).delete
110
+ DeprecatedExecution.where(webhook_id: Webhook.where(uuid: uuid).select_for_subquery(:id)).delete
111
+ TriggeredWebhook.where(id: triggered_webhook_ids).delete
110
112
  end
111
113
 
112
114
  def delete_triggered_webhooks_by_pact_publication_ids pact_publication_ids
@@ -40,7 +40,7 @@ module PactBroker
40
40
  end
41
41
 
42
42
  def self.delete_by_uuid uuid
43
- webhook_repository.unlink_triggered_webhooks_by_webhook_uuid uuid
43
+ webhook_repository.delete_triggered_webhooks_by_webhook_uuid uuid
44
44
  webhook_repository.delete_by_uuid uuid
45
45
  end
46
46
 
@@ -11,6 +11,10 @@ module PactBroker
11
11
  associate(:many_to_one, :consumer, :class => "PactBroker::Domain::Pacticipant", :key => :consumer_id, :primary_key => :id)
12
12
  one_to_many :headers, :class => "PactBroker::Webhooks::WebhookHeader", :reciprocal => :webhook
13
13
 
14
+ dataset_module do
15
+ include PactBroker::Repositories::Helpers
16
+ end
17
+
14
18
  def before_destroy
15
19
  WebhookHeader.where(webhook_id: id).destroy
16
20
  end
@@ -0,0 +1,30 @@
1
+ require 'support/test_data_builder'
2
+
3
+ describe "Creating a pacticipant" do
4
+ let(:path) { "/pacticipants" }
5
+ let(:headers) { {'CONTENT_TYPE' => 'application/json'} }
6
+ let(:response_body) { JSON.parse(last_response.body, symbolize_names: true)}
7
+ let(:pacticipant_hash) { {name: 'Foo Thing'}}
8
+
9
+ subject { post path, pacticipant_hash.to_json, headers; last_response }
10
+
11
+ it "returns a 201 response" do
12
+ subject
13
+ expect(last_response.status).to be 201
14
+ end
15
+
16
+ it "returns the Location header" do
17
+ subject
18
+ expect(last_response.headers['Location']).to eq 'http://example.org/pacticpants/Foo%20Thing'
19
+ end
20
+
21
+ it "returns a JSON Content Type" do
22
+ subject
23
+ expect(last_response.headers['Content-Type']).to eq 'application/hal+json;charset=utf-8'
24
+ end
25
+
26
+ it "returns the newly created webhook" do
27
+ subject
28
+ expect(response_body).to include pacticipant_hash
29
+ end
30
+ end
@@ -46,4 +46,30 @@ describe "Publishing a pact" do
46
46
  expect(subject).to be_a_json_error_response "does not match"
47
47
  end
48
48
  end
49
+
50
+ context "when the pacticipant name is an almost duplicate of an existing pacticipant name" do
51
+ before do
52
+ TestDataBuilder.new.create_pacticipant("A Provider Service")
53
+ end
54
+
55
+ context "when duplicate checking is on" do
56
+ before do
57
+ PactBroker.configuration.check_for_potential_duplicate_pacticipant_names = true
58
+ end
59
+
60
+ it "returns a 409" do
61
+ expect(subject.status).to eq 409
62
+ end
63
+ end
64
+
65
+ context "when duplicate checking is off" do
66
+ before do
67
+ PactBroker.configuration.check_for_potential_duplicate_pacticipant_names = false
68
+ end
69
+
70
+ it "returns a 201" do
71
+ expect(subject.status).to eq 201
72
+ end
73
+ end
74
+ end
49
75
  end
@@ -3,8 +3,6 @@ require 'pact_broker/messages'
3
3
 
4
4
  module PactBroker
5
5
  module Messages
6
-
7
-
8
6
  describe "#potential_duplicate_pacticipant_message" do
9
7
  let(:new_name) { 'Contracts' }
10
8
  let(:fred) { double('Contracts Service', name: 'Contracts Service') }
@@ -19,14 +17,12 @@ The name "Contracts" is very similar to the following existing consumers/provide
19
17
  If you meant to specify one of the above names, please correct the pact configuration, and re-publish the pact.
20
18
  If the pact is intended to be for a new consumer or provider, please manually create "Contracts" using the following command, and then re-publish the pact:
21
19
  $ curl -v -XPOST -H "Content-Type: application/json" -d "{\\\"name\\\": \\\"Contracts\\\"}" http://example.org/pacticipants
22
- If the pact broker requires authentication, include the '-u' flag with the proper credentials:
23
- $ curl -v -XPOST -u <username>:<password> -H "Content-Type: application/json" -d "{\\\"name\\\": \\\"Contracts\\\"}" http://example.org/pacticipants
24
20
  EOS
25
21
  }
26
22
  subject { Messages.potential_duplicate_pacticipant_message new_name, potential_duplicate_pacticipants, 'http://example.org' }
27
23
 
28
24
  it "returns a message" do
29
- expect(subject).to eq expected_message
25
+ expect(subject).to start_with expected_message
30
26
  end
31
27
  end
32
28
  end
@@ -354,7 +354,7 @@ module PactBroker
354
354
  end
355
355
  end
356
356
 
357
- describe "unlink_triggered_webhooks_by_webhook_uuid" do
357
+ describe "delete_triggered_webhooks_by_webhook_uuid" do
358
358
  let(:td) { TestDataBuilder.new }
359
359
 
360
360
  before do
@@ -365,22 +365,38 @@ module PactBroker
365
365
  .create_webhook
366
366
  .create_triggered_webhook
367
367
  .create_deprecated_webhook_execution
368
+ .create_webhook_execution
369
+ .create_webhook
370
+ .create_triggered_webhook
371
+ .create_deprecated_webhook_execution
372
+ .create_webhook_execution
373
+ end
374
+
375
+ let(:webhook_id) { Webhook.find(uuid: td.webhook.uuid).id }
376
+ subject { Repository.new.delete_triggered_webhooks_by_webhook_uuid td.webhook.uuid }
377
+
378
+ it "deletes the related triggered webhooks" do
379
+ expect { subject }.to change {
380
+ TriggeredWebhook.where(id: td.triggered_webhook.id).count
381
+ }.from(1).to(0)
368
382
  end
369
383
 
370
- subject { Repository.new.unlink_triggered_webhooks_by_webhook_uuid td.webhook.uuid }
384
+ it "does not delete the unrelated triggered webhooks" do
385
+ expect { subject }.to_not change {
386
+ TriggeredWebhook.exclude(id: td.triggered_webhook.id).count
387
+ }
388
+ end
371
389
 
372
- it "sets the webhook id to nil" do
373
- webhook_id = Webhook.find(uuid: td.webhook.uuid).id
390
+ it "deletes the related deprecated webhook executions" do
374
391
  expect { subject }.to change {
375
- TriggeredWebhook.find(id: td.triggered_webhook.id).webhook_id
376
- }.from(webhook_id).to(nil)
392
+ DeprecatedExecution.count
393
+ }.by(-2)
377
394
  end
378
395
 
379
- it "sets the webhook id to nil for the deprecated webhook execution field" do
380
- webhook_id = Webhook.find(uuid: td.webhook.uuid).id
396
+ it "deletes the related webhook executions" do
381
397
  expect { subject }.to change {
382
- DeprecatedExecution.find(id: td.webhook_execution.id).webhook_id
383
- }.from(webhook_id).to(nil)
398
+ Execution.count
399
+ }.by(-2)
384
400
  end
385
401
  end
386
402
 
@@ -0,0 +1,98 @@
1
+ describe 'creating triggered webhooks from webhook executions (migrate 36-41)', migration: true do
2
+ before do
3
+ PactBroker::Database.migrate(41)
4
+ end
5
+
6
+ let(:before_now) { DateTime.new(2016, 1, 1) }
7
+ let(:now) { DateTime.new(2018, 2, 2) }
8
+ let!(:consumer) { create(:pacticipants, {name: 'Consumer', created_at: now, updated_at: now}) }
9
+ let!(:provider) { create(:pacticipants, {name: 'Provider', created_at: now, updated_at: now}) }
10
+ let!(:consumer_version) { create(:versions, {number: '1.2.3', order: 1, pacticipant_id: consumer[:id], created_at: now, updated_at: now}) }
11
+ let!(:pact_version) { create(:pact_versions, {content: {some: 'json'}.to_json, sha: '1234', consumer_id: consumer[:id], provider_id: provider[:id], created_at: now}) }
12
+ let!(:pact_publication) do
13
+ create(:pact_publications, {
14
+ consumer_version_id: consumer_version[:id],
15
+ provider_id: provider[:id],
16
+ revision_number: 1,
17
+ pact_version_id: pact_version[:id],
18
+ created_at: (now - 1)
19
+ })
20
+ end
21
+ let!(:webhook) do
22
+ create(:webhooks, {
23
+ uuid: '1234',
24
+ method: 'GET',
25
+ url: 'http://www.example.org',
26
+ consumer_id: consumer[:id],
27
+ provider_id: provider[:id],
28
+ is_json_request_body: false,
29
+ created_at: now
30
+ })
31
+ end
32
+ let!(:triggered_webhook) do
33
+ create(:triggered_webhooks, {
34
+ trigger_uuid: '12345',
35
+ trigger_type: 'publication',
36
+ pact_publication_id: pact_publication[:id],
37
+ webhook_id: webhook[:id],
38
+ webhook_uuid: webhook[:uuid],
39
+ consumer_id: consumer[:id],
40
+ provider_id: provider[:id],
41
+ status: 'success',
42
+ created_at: now,
43
+ updated_at: now
44
+ })
45
+ end
46
+ let!(:webhook_execution) do
47
+ create(:webhook_executions, {
48
+ triggered_webhook_id: triggered_webhook[:id],
49
+ success: true,
50
+ logs: 'logs',
51
+ created_at: now
52
+ })
53
+ end
54
+
55
+ let!(:orphan_triggered_webhook) do
56
+ create(:triggered_webhooks, {
57
+ trigger_uuid: '12345',
58
+ trigger_type: 'publication',
59
+ pact_publication_id: pact_publication[:id],
60
+ webhook_id: nil,
61
+ webhook_uuid: webhook[:uuid],
62
+ consumer_id: consumer[:id],
63
+ provider_id: provider[:id],
64
+ status: 'success',
65
+ created_at: now,
66
+ updated_at: now
67
+ })
68
+ end
69
+
70
+ let!(:orphan_webhook_execution) do
71
+ create(:webhook_executions, {
72
+ triggered_webhook_id: orphan_triggered_webhook[:id],
73
+ success: true,
74
+ logs: 'logs',
75
+ created_at: now
76
+ })
77
+ end
78
+
79
+ let!(:deprecated_orphan_webhook_execution) do
80
+ create(:webhook_executions, {
81
+ triggered_webhook_id: nil,
82
+ webhook_id: nil,
83
+ success: true,
84
+ logs: 'logs',
85
+ created_at: now
86
+ })
87
+ end
88
+
89
+ subject { PactBroker::Database.migrate(42) }
90
+
91
+ it "deletes the orphan triggered webhooks" do
92
+ expect { subject }.to change { database[:triggered_webhooks].count }.by(-1)
93
+ end
94
+
95
+ it "deletes the orphan webhook executions" do
96
+ expect { subject }.to change { database[:webhook_executions].count }.by(-2)
97
+ end
98
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact_broker
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bethany Skurrie
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-09-26 00:00:00.000000000 Z
13
+ date: 2017-10-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: httparty
@@ -490,6 +490,7 @@ files:
490
490
  - db/migrations/39_add_triggered_webhooks_fk_to_execution.rb
491
491
  - db/migrations/40_create_latest_triggered_webhooks_view.rb
492
492
  - db/migrations/41_migrate_execution_data.rb
493
+ - db/migrations/42_delete_orphan_webhook_data.rb
493
494
  - db/migrations/migration_helper.rb
494
495
  - db/pact_broker_database.sqlite3
495
496
  - db/test/backwards_compatibility/.rspec
@@ -761,6 +762,7 @@ files:
761
762
  - script/seed.rb
762
763
  - script/update-hal-browser
763
764
  - script/webhook-server.ru
765
+ - spec/features/create_pacticipant_spec.rb
764
766
  - spec/features/create_webhook_spec.rb
765
767
  - spec/features/delete_label_spec.rb
766
768
  - spec/features/delete_pact_spec.rb
@@ -905,6 +907,7 @@ files:
905
907
  - spec/migrations/34_latest_tagged_pacts_spec.rb
906
908
  - spec/migrations/34_pact_revisions_spec.rb
907
909
  - spec/migrations/41_migrate_execution_data_spec.rb
910
+ - spec/migrations/42_delete_ophan_webhook_data_spec.rb
908
911
  - spec/service_consumers/pact_helper.rb
909
912
  - spec/service_consumers/provider_states_for_pact_broker_client.rb
910
913
  - spec/spec_helper.rb
@@ -984,6 +987,7 @@ signing_key:
984
987
  specification_version: 4
985
988
  summary: See description
986
989
  test_files:
990
+ - spec/features/create_pacticipant_spec.rb
987
991
  - spec/features/create_webhook_spec.rb
988
992
  - spec/features/delete_label_spec.rb
989
993
  - spec/features/delete_pact_spec.rb
@@ -1128,6 +1132,7 @@ test_files:
1128
1132
  - spec/migrations/34_latest_tagged_pacts_spec.rb
1129
1133
  - spec/migrations/34_pact_revisions_spec.rb
1130
1134
  - spec/migrations/41_migrate_execution_data_spec.rb
1135
+ - spec/migrations/42_delete_ophan_webhook_data_spec.rb
1131
1136
  - spec/service_consumers/pact_helper.rb
1132
1137
  - spec/service_consumers/provider_states_for_pact_broker_client.rb
1133
1138
  - spec/spec_helper.rb