From d3e45962a27e2edd5dde560e588672a5686e1d8a Mon Sep 17 00:00:00 2001 From: Spitap Date: Tue, 13 Jun 2023 19:27:27 +0200 Subject: [PATCH] Fixed disabling message_limit --- modoboa/admin/api/v1/serializers.py | 15 +++++++++-- modoboa/admin/api/v2/serializers.py | 13 ++++++++- modoboa/admin/api/v2/tests.py | 42 +++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) diff --git a/modoboa/admin/api/v1/serializers.py b/modoboa/admin/api/v1/serializers.py index 545028bdf..418630a51 100644 --- a/modoboa/admin/api/v1/serializers.py +++ b/modoboa/admin/api/v1/serializers.py @@ -152,11 +152,14 @@ class MailboxSerializer(serializers.ModelSerializer): quota = serializers.CharField(required=False) quota_usage = serializers.SerializerMethodField() + message_limit = serializers.CharField( + required=False, allow_null=True, allow_blank=True) + class Meta: model = models.Mailbox fields = ( - "pk", "full_address", "use_domain_quota", "quota", "message_limit", - "quota_usage" + "pk", "full_address", "use_domain_quota", "quota", + "quota_usage", "message_limit" ) def get_quota_usage(self, mb) -> int: @@ -166,6 +169,14 @@ class MailboxSerializer(serializers.ModelSerializer): """Lower case address.""" return value.lower() + def validate_message_limit(self, value): + if not value: + return None + try: + return int(value) + except ValueError: + raise ValidationError(_("A valid integer is required.")) + def validate_quota(self, value): """Convert quota to MB.""" return web_utils.size2integer(value, output_unit="MB") diff --git a/modoboa/admin/api/v2/serializers.py b/modoboa/admin/api/v2/serializers.py index c4f12b446..6306663ed 100644 --- a/modoboa/admin/api/v2/serializers.py +++ b/modoboa/admin/api/v2/serializers.py @@ -389,16 +389,27 @@ class MailboxSerializer(serializers.ModelSerializer): quota = serializers.CharField(required=False) + message_limit = serializers.CharField( + required=False, allow_null=True, allow_blank=True) + class Meta: model = models.Mailbox fields = ( - "pk", "use_domain_quota", "quota", "message_limit", + "pk", "use_domain_quota", "quota", "message_limit" ) def validate_quota(self, value): """Convert quota to MB.""" return web_utils.size2integer(value, output_unit="MB") + def validate_message_limit(self, value): + if not value: + return None + try: + return int(value) + except ValueError: + raise ValidationError(_("A valid integer is required.")) + def validate(self, data): """Check if quota is required.""" method = self.context["request"].method diff --git a/modoboa/admin/api/v2/tests.py b/modoboa/admin/api/v2/tests.py index fcea7e95b..d71c9b53a 100644 --- a/modoboa/admin/api/v2/tests.py +++ b/modoboa/admin/api/v2/tests.py @@ -258,6 +258,48 @@ class AccountViewSetTestCase(ModoAPITestCase): resp = self.client.patch(url, data, format="json") self.assertEqual(resp.status_code, 200) + def test_message_limit_update(self): + account = core_models.User.objects.get(username="user@test.com") + url = reverse("v2:account-detail", args=[account.pk]) + data = { + "username": "user@test.com", + "role": "SimpleUsers", + "password": "Toto12345", + "mailbox": { + "message_limit": 10 + } + } + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + account.refresh_from_db() + self.assertEqual(account.mailbox.message_limit, 10) + + data = { + "username": "user@test.com", + "role": "SimpleUsers", + "password": "Toto12345", + "mailbox": { + "quota": 10 + } + } + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + account.refresh_from_db() + self.assertEqual(account.mailbox.message_limit, 10) + + data = { + "username": "user@test.com", + "role": "SimpleUsers", + "password": "Toto12345", + "mailbox": { + "message_limit": "" + } + } + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + account.refresh_from_db() + self.assertEqual(account.mailbox.message_limit, None) + def test_update_admin(self): account = core_models.User.objects.get(username="admin") url = reverse("v2:account-detail", args=[account.pk])