Skip to content

Commit 19f7060

Browse files
committed
feat: allow "global" webhooks (matching all consumers and providers) to be triggered by pact or verification publication
1 parent 87a8416 commit 19f7060

File tree

5 files changed

+14
-6
lines changed

5 files changed

+14
-6
lines changed

lib/pact_broker/webhooks/repository.rb

+4-2
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ def find_for_pact pact
6666
def find_by_consumer_and_or_provider consumer, provider
6767
find_by_consumer_and_provider(consumer, provider) +
6868
find_by_consumer_and_provider(nil, provider) +
69-
find_by_consumer_and_provider(consumer, nil)
69+
find_by_consumer_and_provider(consumer, nil) +
70+
find_by_consumer_and_provider(nil, nil)
7071
end
7172

7273
def find_by_consumer_and_provider consumer, provider
@@ -84,7 +85,8 @@ def find_for_pact_and_event_name pact, event_name
8485
def find_by_consumer_and_or_provider_and_event_name consumer, provider, event_name
8586
find_by_consumer_and_provider_and_event_name(consumer, provider, event_name) +
8687
find_by_consumer_and_provider_and_event_name(nil, provider, event_name) +
87-
find_by_consumer_and_provider_and_event_name(consumer, nil, event_name)
88+
find_by_consumer_and_provider_and_event_name(consumer, nil, event_name) +
89+
find_by_consumer_and_provider_and_event_name(nil, nil, event_name)
8890
end
8991

9092
def find_by_consumer_and_provider_and_event_name consumer, provider, event_name

lib/pact_broker/webhooks/service.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def self.find_by_consumer_and_provider consumer, provider
9494
end
9595

9696
def self.trigger_webhooks pact, verification, event_name
97-
webhooks = webhook_repository.find_by_consumer_and_provider_and_event_name pact.consumer, pact.provider, event_name
97+
webhooks = webhook_repository.find_by_consumer_and_or_provider_and_event_name pact.consumer, pact.provider, event_name
9898

9999
if webhooks.any?
100100
run_later(webhooks, pact, verification, event_name)

spec/lib/pact_broker/webhooks/repository_spec.rb

+3-1
Original file line numberDiff line numberDiff line change
@@ -365,12 +365,14 @@ module Webhooks
365365
.create_webhook(uuid: '3', events: [{ name: 'something_else_happened' }])
366366
.create_consumer_webhook(uuid: '4', events: [{ name: 'something_happened' }])
367367
.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' }])
368370
end
369371

370372
subject { Repository.new.find_for_pact_and_event_name(td.pact, 'something_happened') }
371373

372374
it "returns an array of webhooks" do
373-
expect(subject.collect(&:uuid).sort).to eq ['1', '2', '4', '5']
375+
expect(subject.collect(&:uuid).sort).to eq ['1', '2', '4', '5', '6']
374376
end
375377
end
376378
end

spec/lib/pact_broker/webhooks/service_spec.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,15 @@ module Webhooks
3939
let(:triggered_webhook) { instance_double(PactBroker::Webhooks::TriggeredWebhook) }
4040

4141
before do
42-
allow_any_instance_of(PactBroker::Webhooks::Repository).to receive(:find_by_consumer_and_provider_and_event_name).and_return(webhooks)
42+
allow_any_instance_of(PactBroker::Webhooks::Repository).to receive(:find_by_consumer_and_or_provider_and_event_name).and_return(webhooks)
4343
allow_any_instance_of(PactBroker::Webhooks::Repository).to receive(:create_triggered_webhook).and_return(triggered_webhook)
4444
allow(Job).to receive(:perform_in)
4545
end
4646

4747
subject { Service.trigger_webhooks pact, verification, PactBroker::Webhooks::WebhookEvent::CONTRACT_CONTENT_CHANGED }
4848

4949
it "finds the webhooks" do
50-
expect_any_instance_of(PactBroker::Webhooks::Repository).to receive(:find_by_consumer_and_provider_and_event_name).with(consumer, provider, PactBroker::Webhooks::WebhookEvent::DEFAULT_EVENT_NAME)
50+
expect_any_instance_of(PactBroker::Webhooks::Repository).to receive(:find_by_consumer_and_or_provider_and_event_name).with(consumer, provider, PactBroker::Webhooks::WebhookEvent::DEFAULT_EVENT_NAME)
5151
subject
5252
end
5353

spec/support/test_data_builder.rb

+4
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,10 @@ def create_webhook parameters = {}
261261
self
262262
end
263263

264+
def create_global_webhook parameters = {}
265+
create_webhook(parameters.merge(consumer: nil, provider: nil))
266+
end
267+
264268
def create_provider_webhook parameters = {}
265269
create_webhook(parameters.merge(consumer: nil))
266270
end

0 commit comments

Comments
 (0)