Skip to content

Commit cb2b032

Browse files
committed
feat(webhooks): only trigger enabled webhooks
1 parent ce452ec commit cb2b032

File tree

7 files changed

+52
-30
lines changed

7 files changed

+52
-30
lines changed
Original file line numberDiff line numberDiff line change
@@ -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
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module PactBroker
2+
module DB
3+
module DataMigrations
4+
module Helpers
5+
def column_exists?(connection, table, column)
6+
connection.table_exists?(table) && connection.schema(table).find{|col| col.first == column }
7+
end
8+
end
9+
end
10+
end
11+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
require 'pact_broker/db/data_migrations/helpers'
2+
3+
module PactBroker
4+
module DB
5+
module DataMigrations
6+
class SetWebhooksEnabled
7+
extend Helpers
8+
9+
def self.call(connection)
10+
if column_exists?(connection, :webhooks, :enabled)
11+
connection[:webhooks].where(enabled: nil).update(enabled: true)
12+
end
13+
end
14+
end
15+
end
16+
end
17+
end

lib/pact_broker/db/migrate_data.rb

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ def self.call database_connection, options = {}
1717
DataMigrations::SetPacticipantIdsForVerifications.call(database_connection)
1818
DataMigrations::SetConsumerIdsForPactPublications.call(database_connection)
1919
DataMigrations::SetLatestVersionSequenceValue.call(database_connection)
20+
DataMigrations::SetWebhooksEnabled.call(database_connection)
2021
end
2122
end
2223
end

lib/pact_broker/webhooks/repository.rb

+1-4
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,6 @@ def delete_by_consumer_and_provider consumer, provider
8282
Webhook.where(consumer: consumer, provider: provider).destroy
8383
end
8484

85-
def find_for_pact_and_event_name pact, event_name
86-
find_by_consumer_and_or_provider_and_event_name(pact.consumer, pact.provider, event_name)
87-
end
88-
8985
def find_by_consumer_and_or_provider_and_event_name consumer, provider, event_name
9086
find_by_consumer_and_provider_and_event_name(consumer, provider, event_name) +
9187
find_by_consumer_and_provider_and_event_name(nil, provider, event_name) +
@@ -100,6 +96,7 @@ def find_by_consumer_and_provider_and_event_name consumer, provider, event_name
10096
}
10197
Webhook
10298
.select_all_qualified
99+
.enabled
103100
.where(criteria)
104101
.join(:webhook_events, { webhook_id: :id })
105102
.where(Sequel[:webhook_events][:name] => event_name)

lib/pact_broker/webhooks/webhook.rb

+5-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ class Webhook < Sequel::Model
1515

1616
dataset_module do
1717
include PactBroker::Repositories::Helpers
18+
19+
def enabled
20+
where(enabled: true)
21+
end
1822
end
1923

2024
def before_destroy
@@ -86,7 +90,7 @@ def self.properties_hash_from_domain webhook
8690
url: webhook.request.url,
8791
username: webhook.request.username,
8892
password: not_plain_text_password(webhook.request.password),
89-
enabled: webhook.enabled,
93+
enabled: webhook.enabled.nil? ? true : webhook.enabled,
9094
body: (is_json_request_body ? webhook.request.body.to_json : webhook.request.body),
9195
is_json_request_body: is_json_request_body
9296
}

spec/lib/pact_broker/webhooks/repository_spec.rb

+7-25
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,6 @@ module Webhooks
332332
subject { Repository.new.find_by_consumer_and_provider_and_event_name td.consumer, td.provider, 'something_happened' }
333333

334334
context "when a webhook exists with a matching consumer and provider and event name" do
335-
336335
before do
337336
td
338337
.create_consumer("Consumer")
@@ -347,32 +346,15 @@ module Webhooks
347346
it "returns an array of webhooks" do
348347
expect(subject.collect(&:uuid).sort).to eq ['1', '2']
349348
end
350-
end
351-
end
352-
353-
describe "find_for_pact_and_event_name" do
354-
context "when a webhook exists with a matching consumer and provider and event name" do
355-
before do
356-
td
357-
.create_consumer("Consumer")
358-
.create_consumer_version("1")
359-
.create_provider("Another Provider")
360-
.create_webhook
361-
.create_provider("Provider")
362-
.create_pact
363-
.create_webhook(uuid: '1', events: [{ name: 'something_happened' }])
364-
.create_webhook(uuid: '2', events: [{ name: 'something_happened' }])
365-
.create_webhook(uuid: '3', events: [{ name: 'something_else_happened' }])
366-
.create_consumer_webhook(uuid: '4', events: [{ name: 'something_happened' }])
367-
.create_provider_webhook(uuid: '5', events: [{ name: 'something_happened' }])
368-
.create_global_webhook(uuid: '6', events: [{ name: 'something_happened' }])
369-
.create_global_webhook(uuid: '7', events: [{ name: 'something_else_happened' }])
370-
end
371349

372-
subject { Repository.new.find_for_pact_and_event_name(td.pact, 'something_happened') }
350+
context "when the webhook is not enabled" do
351+
before do
352+
Webhook.where(uuid: '2').update(enabled: false)
353+
end
373354

374-
it "returns an array of webhooks" do
375-
expect(subject.collect(&:uuid).sort).to eq ['1', '2', '4', '5', '6']
355+
it "is not returned" do
356+
expect(subject.collect(&:uuid).sort).to_not include('2 ')
357+
end
376358
end
377359
end
378360
end

0 commit comments

Comments
 (0)