diff --git a/modoboa/admin/api/v2/tests.py b/modoboa/admin/api/v2/tests.py index b4235ad95..65cefe0fd 100644 --- a/modoboa/admin/api/v2/tests.py +++ b/modoboa/admin/api/v2/tests.py @@ -485,3 +485,32 @@ class AlarmViewSetTestCase(ModoAPITestCase): resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assertEqual(len(resp.json()), 1) + + def test_update_alarm(self): + """Try updating alarm status and delete it afterward.""" + + domain = models.Domain.objects.filter(name="test.com") + alarm = models.Alarm.objects.create( + domain=domain.first(), mailbox=None, title="Test alarm 2") + alarm.save() + + # Switch status of the alarm to close + url = reverse("v2:alarm-switch", args=[alarm.pk]) + resp = self.client.patch(url, {"status": 2}) + self.assertEqual(resp.status_code, 204) + + # Check actual status + url = reverse("v2:alarm-detail", args=[alarm.pk]) + resp = self.client.get(url) + self.assertEqual(resp.json()["status"], 2) + + # Try to set an non-existant status + url = reverse("v2:alarm-switch", args=[alarm.pk]) + resp = self.client.patch(url, {"status": 10}) + self.assertEqual(resp.status_code, 400) + + # Delete the alarm + url = reverse("v2:alarm-delete", args=[alarm.pk]) + resp = self.client.delete(url) + self.assertEqual(resp.status_code, 204) + diff --git a/modoboa/admin/api/v2/viewsets.py b/modoboa/admin/api/v2/viewsets.py index e6ee407ab..01525a1e4 100644 --- a/modoboa/admin/api/v2/viewsets.py +++ b/modoboa/admin/api/v2/viewsets.py @@ -10,7 +10,7 @@ from rest_framework import ( filters, mixins, parsers, pagination, permissions, response, status, viewsets ) from rest_framework.decorators import action -from rest_framework.exceptions import PermissionDenied, ValidationError +from rest_framework.exceptions import PermissionDenied from modoboa.admin.api.v1 import viewsets as v1_viewsets from modoboa.core import models as core_models @@ -352,8 +352,6 @@ class AlarmViewSet(GetThrottleViewsetMixin, """Custom delete method that accepts body arguments.""" alarm = self.get_object() domain = models.Domain.objects.filter(pk=alarm.domain.pk) - if not domain.exists(): - alarm.delete() if not request.user.can_access(domain): raise PermissionDenied(_("You don't have access to this domain")) else: @@ -367,9 +365,6 @@ class AlarmViewSet(GetThrottleViewsetMixin, serializer = serializers.AlarmSwitchStatusSerializer(data=request.data) serializer.is_valid(raise_exception=True) domain = models.Domain.objects.filter(pk=alarm.domain.pk) - if not domain.exists(): - alarm.delete() - raise ValidationError(_("No alarm found")) if not request.user.can_access(domain): raise PermissionDenied(_("You don't have access to this domain")) else: diff --git a/modoboa/admin/tests/test_alarms.py b/modoboa/admin/tests/test_alarms.py new file mode 100644 index 000000000..560dde817 --- /dev/null +++ b/modoboa/admin/tests/test_alarms.py @@ -0,0 +1,26 @@ +"""Alarm related tests.""" + +from django.urls import reverse + +from modoboa.lib.tests import ModoTestCase +from ..factories import populate_database +from ..models import Alarm, Domain + + +class AlarmsTestCase(ModoTestCase): + """Alarm open/close test cases.""" + + def setUp(self): + super().setUp() + populate_database() + + def test_set_forward(self): + domain = Domain.objects.all().first() + alarm = Alarm.objects.create( + domain=domain, mailbox=None, title="Test alarm 3") + alarm.save() + self.assertEqual(alarm.status, 1) + alarm.close() + self.assertEqual(alarm.status, 2) + alarm.reopen() + self.assertEqual(alarm.status, 1)