FIX: correctly deletes webhook_events with webhook (#23097)

Each time a message is created through a webhook, we create we webhook_event associated to this webhook.

When destroying a webhook, we were not destroying the webhook_events which was causing orphans records and more importantly errors in the app expecting to find and associated webhook.
This commit is contained in:
Joffrey JAFFEUX 2023-08-15 15:36:00 +02:00 committed by GitHub
parent e722a14700
commit 2d782c7b00
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 1 deletions

View File

@ -5,7 +5,10 @@ module Chat
self.table_name = "incoming_chat_webhooks"
belongs_to :chat_channel, class_name: "Chat::Channel"
has_many :chat_webhook_events, class_name: "Chat::WebhookEvent"
has_many :chat_webhook_events,
foreign_key: "incoming_chat_webhook_id",
class_name: "Chat::WebhookEvent",
dependent: :delete_all
before_create { self.key = SecureRandom.hex(12) }

View File

@ -0,0 +1,10 @@
# frozen_string_literal: true
RSpec.describe Chat::IncomingWebhook do
it do
is_expected.to have_many(:chat_webhook_events)
.with_foreign_key("incoming_chat_webhook_id")
.class_name("Chat::WebhookEvent")
.dependent(:delete_all)
end
end

View File

@ -132,5 +132,20 @@ RSpec.describe Chat::Admin::IncomingWebhooksController do
Chat::IncomingWebhook.count
}.by(-1)
end
it "destroys webhook events records" do
sign_in(admin)
Chat::MessageCreator.create(
chat_channel: existing.chat_channel,
user: Discourse.system_user,
content: "foo",
incoming_chat_webhook: existing,
)
expect { delete "/admin/plugins/chat/hooks/#{existing.id}.json" }.to change {
Chat::WebhookEvent.count
}.by(-1)
end
end
end