From 5ab5c9092710367ffcad0fb185c58db181eb76a3 Mon Sep 17 00:00:00 2001 From: Spitap Date: Fri, 24 Feb 2023 16:37:52 +0100 Subject: [PATCH] Last tests --- modoboa/admin/api/v2/tests.py | 24 ++++++++++++++++++++++-- modoboa/admin/api/v2/viewsets.py | 4 ++-- modoboa/admin/tests/test_domain.py | 8 ++++---- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/modoboa/admin/api/v2/tests.py b/modoboa/admin/api/v2/tests.py index 65cefe0fd..92b9c5e3f 100644 --- a/modoboa/admin/api/v2/tests.py +++ b/modoboa/admin/api/v2/tests.py @@ -479,6 +479,8 @@ class AlarmViewSetTestCase(ModoAPITestCase): factories.populate_database() factories.AlarmFactory( domain__name="test.com", mailbox=None, title="Test alarm") + cls.da_token = Token.objects.create( + user=core_models.User.objects.get(username="admin@test.com")) def test_list(self): url = reverse("v2:alarm-list") @@ -489,11 +491,28 @@ class AlarmViewSetTestCase(ModoAPITestCase): def test_update_alarm(self): """Try updating alarm status and delete it afterward.""" - domain = models.Domain.objects.filter(name="test.com") + domain = models.Domain.objects.get(name="test.com") alarm = models.Alarm.objects.create( - domain=domain.first(), mailbox=None, title="Test alarm 2") + domain=domain, mailbox=None, title="Test alarm 2") alarm.save() + # Try performing action on restricted domains + self.client.credentials( + HTTP_AUTHORIZATION="Token " + self.da_token.key) + domain = models.Domain.objects.get(name="test2.com") + alarm_restricted = models.Alarm.objects.create( + domain=domain, mailbox=None, title="Test alarm 3") + alarm_restricted.save() + url = reverse("v2:alarm-switch", args=[alarm_restricted.pk]) + resp = self.client.post(url) + self.assertEqual(resp.status_code, 405) + url = reverse("v2:alarm-delete", args=[alarm_restricted.pk]) + resp = self.client.delete(url) + self.assertEqual(resp.status_code, 404) + + # Perform actions as SuperAdmin + self.client.credentials(HTTP_AUTHORIZATION="Token " + self.token.key) + # Switch status of the alarm to close url = reverse("v2:alarm-switch", args=[alarm.pk]) resp = self.client.patch(url, {"status": 2}) @@ -514,3 +533,4 @@ class AlarmViewSetTestCase(ModoAPITestCase): 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 01525a1e4..0876e93c8 100644 --- a/modoboa/admin/api/v2/viewsets.py +++ b/modoboa/admin/api/v2/viewsets.py @@ -351,7 +351,7 @@ class AlarmViewSet(GetThrottleViewsetMixin, def delete(self, request, **kwargs): """Custom delete method that accepts body arguments.""" alarm = self.get_object() - domain = models.Domain.objects.filter(pk=alarm.domain.pk) + domain = models.Domain.objects.get(pk=alarm.domain.pk) if not request.user.can_access(domain): raise PermissionDenied(_("You don't have access to this domain")) else: @@ -364,7 +364,7 @@ class AlarmViewSet(GetThrottleViewsetMixin, alarm = self.get_object() serializer = serializers.AlarmSwitchStatusSerializer(data=request.data) serializer.is_valid(raise_exception=True) - domain = models.Domain.objects.filter(pk=alarm.domain.pk) + domain = models.Domain.objects.get(pk=alarm.domain.pk) 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_domain.py b/modoboa/admin/tests/test_domain.py index 81db43495..6fd4a8b7a 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -449,15 +449,15 @@ class DKIMTestCase(ModoTestCase): # Try generating a key to a protected directory self.set_global_parameter("dkim_keys_storage_dir", "/I_DONT_EXIST") call_command("modo", "manage_dkim_keys") - domain = Domain.objects.filter(name=values["name"]) + domain = Domain.objects.get(name=values["name"]) # Closing the alarm and retry generating dkim keys - Alarm.objects.get(domain__in=domain, + Alarm.objects.get(domain=domain, internal_name=constants.DKIM_WRITE_ERROR ).close() call_command("modo", "manage_dkim_keys") self.assertEqual( - Alarm.objects.get(domain__in=domain, + Alarm.objects.get(domain=domain, internal_name=constants.DKIM_WRITE_ERROR).status, constants.ALARM_OPENED) @@ -465,7 +465,7 @@ class DKIMTestCase(ModoTestCase): self.set_global_parameter("dkim_keys_storage_dir", self.workdir) call_command("modo", "manage_dkim_keys") self.assertEqual( - Alarm.objects.get(domain__in=domain, + Alarm.objects.get(domain=domain, internal_name=constants.DKIM_WRITE_ERROR).status, constants.ALARM_CLOSED) key_path = os.path.join(self.workdir, "{}.pem".format(values["name"]))