diff --git a/CHANGELOG.md b/CHANGELOG.md index dafa545e..a00a1eab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Check for permissions on Slack escalate command ([#3891](https://github.com/grafana/oncall/pull/3891)) +- Do not delete webhook if its team is deleted @mderynck ([#3873](https://github.com/grafana/oncall/pull/3873)) ## v1.3.105 (2024-02-13) diff --git a/engine/apps/webhooks/migrations/0012_alter_webhook_team.py b/engine/apps/webhooks/migrations/0012_alter_webhook_team.py new file mode 100644 index 00000000..cf9204d5 --- /dev/null +++ b/engine/apps/webhooks/migrations/0012_alter_webhook_team.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.10 on 2024-02-14 17:55 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('user_management', '0020_organization_is_grafana_labels_enabled'), + ('webhooks', '0011_auto_20230920_1813'), + ] + + operations = [ + migrations.AlterField( + model_name='webhook', + name='team', + field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='webhooks', to='user_management.team'), + ), + ] diff --git a/engine/apps/webhooks/models/webhook.py b/engine/apps/webhooks/models/webhook.py index d5731f6e..d2f1bb96 100644 --- a/engine/apps/webhooks/models/webhook.py +++ b/engine/apps/webhooks/models/webhook.py @@ -120,7 +120,7 @@ class Webhook(models.Model): ) team = models.ForeignKey( - "user_management.Team", null=True, on_delete=models.CASCADE, related_name="webhooks", default=None + "user_management.Team", null=True, on_delete=models.SET_NULL, related_name="webhooks", default=None ) user = models.ForeignKey( diff --git a/engine/apps/webhooks/tests/test_webhook.py b/engine/apps/webhooks/tests/test_webhook.py index 50d3e6bc..39420e00 100644 --- a/engine/apps/webhooks/tests/test_webhook.py +++ b/engine/apps/webhooks/tests/test_webhook.py @@ -304,3 +304,19 @@ def test_escaping_unicode_in_string(make_organization, make_custom_webhook, data } request_kwargs = webhook.build_request_kwargs(payload) assert request_kwargs == {"headers": {}, **expected_kwargs} + + +@pytest.mark.django_db +def test_webhook_not_deleted_with_team(make_organization, make_team, make_custom_webhook): + organization = make_organization() + team = make_team(organization=organization) + webhook = make_custom_webhook( + organization=organization, + team=team, + ) + assert webhook.team == team + webhook_pk = webhook.pk + team.delete() + + webhook = Webhook.objects.get(pk=webhook_pk) + assert webhook.team is None