Skip to content

Commit 77265c3

Browse files
committed
fix: delete triggered webhook data when deleting pacticipant version
fixes: pact-foundation#300
1 parent e92bde5 commit 77265c3

File tree

4 files changed

+52
-0
lines changed

4 files changed

+52
-0
lines changed

lib/pact_broker/versions/service.rb

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def self.find_by_pacticipant_name_and_latest_tag(pacticipant_name, tag)
2121

2222
def self.delete version
2323
tag_repository.delete_by_version_id version.id
24+
webhook_repository.delete_triggered_webhooks_by_version_id version.id
2425
pact_repository.delete_by_version_id version.id
2526
verification_repository.delete_by_provider_version_id version.id
2627
version_repository.delete_by_id version.id

lib/pact_broker/webhooks/repository.rb

+13
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,19 @@ def delete_triggered_webhooks_by_webhook_uuid uuid
162162
TriggeredWebhook.where(id: triggered_webhook_ids).delete
163163
end
164164

165+
def delete_triggered_webhooks_by_version_id version_id
166+
pact_publication_ids = PactBroker::Pacts::PactPublication.where(consumer_version_id: version_id).select_for_subquery(:id)
167+
pact_triggered_webhook_ids = TriggeredWebhook.where(pact_publication_id: pact_publication_ids).select_for_subquery(:id)
168+
Execution.where(triggered_webhook_id: pact_triggered_webhook_ids).delete
169+
TriggeredWebhook.where(id: pact_triggered_webhook_ids).delete
170+
DeprecatedExecution.where(pact_publication_id: pact_publication_ids).delete
171+
172+
verification_ids = PactBroker::Domain::Verification.where(provider_version_id: version_id).select_for_subquery(:id)
173+
verification_triggered_webhook_ids = TriggeredWebhook.where(verification_id: verification_ids).select_for_subquery(:id)
174+
Execution.where(triggered_webhook_id: verification_triggered_webhook_ids).delete
175+
TriggeredWebhook.where(id: verification_triggered_webhook_ids).delete
176+
end
177+
165178
def delete_triggered_webhooks_by_pact_publication_ids pact_publication_ids
166179
triggered_webhook_ids = TriggeredWebhook.where(pact_publication_id: pact_publication_ids).select_for_subquery(:id)
167180
Execution.where(triggered_webhook_id: triggered_webhook_ids).delete

spec/lib/pact_broker/versions/service_spec.rb

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ module Versions
1414
.create_consumer_version_tag("prod")
1515
.create_pact
1616
.create_verification(provider_version: "1.0.0")
17+
.create_webhook
18+
.create_triggered_webhook
19+
.create_webhook_execution
1720
.and_return(:consumer_version)
1821
end
1922

spec/lib/pact_broker/webhooks/repository_spec.rb

+35
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,41 @@ module Webhooks
730730
}.by(-1)
731731
end
732732
end
733+
734+
describe "delete_triggered_webhooks_by_version_id" do
735+
subject { Repository.new.delete_triggered_webhooks_by_version_id(version.id) }
736+
737+
context "when deleting a triggered webhook by consumer version" do
738+
let!(:version) do
739+
td
740+
.create_pact_with_hierarchy
741+
.create_webhook
742+
.create_triggered_webhook
743+
.create_webhook_execution
744+
.and_return(:consumer_version)
745+
end
746+
747+
it "deletes the webhooks belonging to the consumer version" do
748+
expect { subject }.to change{ TriggeredWebhook.count }.by (-1)
749+
end
750+
end
751+
752+
context "when deleting a triggered webhook by provider version" do
753+
let!(:version) do
754+
td
755+
.create_pact_with_hierarchy
756+
.create_verification(provider_version: "1")
757+
.create_provider_webhook(event_names: ['provider_verification_published'])
758+
.create_triggered_webhook
759+
.create_webhook_execution
760+
.and_return(:provider_version)
761+
end
762+
763+
it "deletes the webhooks belonging to the consumer version" do
764+
expect { subject }.to change{ TriggeredWebhook.count }.by (-1)
765+
end
766+
end
767+
end
733768
end
734769
end
735770
end

0 commit comments

Comments
 (0)