pact_broker 2.5.1 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
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