Skip to content

Commit 634ccd5

Browse files
committed
fix: gracefully handle situation where webhook is deleted before execution
1 parent 4303e4f commit 634ccd5

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

lib/pact_broker/webhooks/job.rb

+11-2
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,20 @@ def perform data
1818

1919
private
2020

21-
attr_reader :triggered_webhook, :error_count
21+
attr_reader :triggered_webhook, :error_count, :data
2222

2323
def perform_with_connection(data)
2424
@data = data
25-
@triggered_webhook = PactBroker::Webhooks::TriggeredWebhook.find(id: data[:triggered_webhook].id)
25+
triggered_webhook_id = data[:triggered_webhook].id
26+
@triggered_webhook = PactBroker::Webhooks::TriggeredWebhook.find(id: triggered_webhook_id)
27+
if triggered_webhook
28+
perform_with_triggered_webhook
29+
else
30+
logger.info "Could not find webhook with id: #{triggered_webhook_id}"
31+
end
32+
end
33+
34+
def perform_with_triggered_webhook
2635
@error_count = data[:error_count] || 0
2736
begin
2837
webhook_execution_result = PactBroker::Webhooks::Service.execute_triggered_webhook_now triggered_webhook, execution_options(data)

spec/lib/pact_broker/webhooks/job_spec.rb

+12-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ module Webhooks
2626
end
2727

2828
context "when the job succeeds" do
29-
3029
it "does not reschedule the job" do
3130
expect(Job).to_not receive(:perform_in)
3231
subject
@@ -131,6 +130,18 @@ module Webhooks
131130
subject
132131
end
133132
end
133+
134+
context "when the webhook gets deleted between executions" do
135+
before do
136+
allow(PactBroker::Webhooks::TriggeredWebhook).to receive(:find).and_return(nil)
137+
end
138+
139+
it "does not reschedule the job" do
140+
expect(Job).to_not receive(:perform_in)
141+
expect(logger).to receive(:info).with(/Could not find webhook with id: 1/)
142+
subject
143+
end
144+
end
134145
end
135146
end
136147
end

0 commit comments

Comments
 (0)