From 9a1315d114967dd8eab9bf5a606f4f54e18c0a2a Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Thu, 7 Apr 2022 14:22:42 +0200 Subject: [PATCH] Updated tests. --- modoboa/admin/api/v2/serializers.py | 31 +++++++++++++++++++++-------- modoboa/admin/api/v2/tests.py | 16 +++++++++++++++ 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/modoboa/admin/api/v2/serializers.py b/modoboa/admin/api/v2/serializers.py index 4590fa876..db039c3dc 100644 --- a/modoboa/admin/api/v2/serializers.py +++ b/modoboa/admin/api/v2/serializers.py @@ -47,14 +47,19 @@ class DomainSerializer(v1_serializers.DomainSerializer): """Domain serializer for v2 API.""" domain_admin = CreateDomainAdminSerializer(required=False, write_only=True) - resources = DomainResourceSerializer( - many=True, source="domainobjectlimit_set", required=False - ) transport = transport_serializers.TransportSerializer(required=False) class Meta(v1_serializers.DomainSerializer.Meta): fields = v1_serializers.DomainSerializer.Meta.fields + ( - "domain_admin", "resources", "transport" + "domain_admin", "transport" + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if not param_tools.get_global_parameter("enable_domain_limits", app="limits"): + return + self.fields["resources"] = DomainResourceSerializer( + many=True, source="domainobjectlimit_set", required=False ) def validate(self, data): @@ -285,14 +290,19 @@ class AccountSerializer(v1_serializers.AccountSerializer): child=lib_fields.DRFEmailFieldUTF8(), source="mailbox.alias_addresses" ) - resources = serializers.SerializerMethodField() class Meta(v1_serializers.AccountSerializer.Meta): fields = ( v1_serializers.AccountSerializer.Meta.fields - + ("aliases", "resources", ) + + ("aliases", ) ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if not param_tools.get_global_parameter("enable_admin_limits", app="limits"): + return + self.fields["resources"] = serializers.SerializerMethodField() + def get_resources(self, account): if account.role == 'SimpleUsers': return [] @@ -348,14 +358,19 @@ class WritableAccountSerializer(v1_serializers.WritableAccountSerializer): required=False ) mailbox = MailboxSerializer(required=False) - resources = WritableResourceSerializer(many=True, required=False) class Meta(v1_serializers.WritableAccountSerializer.Meta): fields = tuple( field for field in v1_serializers.WritableAccountSerializer.Meta.fields if field != "random_password" - ) + ("aliases", "resources") + ) + ("aliases",) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if not param_tools.get_global_parameter("enable_admin_limits", app="limits"): + return + self.fields["resources"] = WritableResourceSerializer(many=True, required=False) def validate_aliases(self, value): """Check if required domains are locals and user can access them.""" diff --git a/modoboa/admin/api/v2/tests.py b/modoboa/admin/api/v2/tests.py index 14b46a2b2..344f5f723 100644 --- a/modoboa/admin/api/v2/tests.py +++ b/modoboa/admin/api/v2/tests.py @@ -68,6 +68,22 @@ class DomainViewSetTestCase(ModoAPITestCase): resp = self.client.put(url, data, format="json") self.assertEqual(resp.status_code, 200) + def test_update_resources(self): + self.set_global_parameter("enable_domain_limits", True, app="limits") + domain = models.Domain.objects.get(name="test2.com") + data = { + "name": "test2.com", + "resources": [ + {"name": "domain_aliases", "max_value": 20} + ] + } + url = reverse("v2:domain-detail", args=[domain.pk]) + resp = self.client.put(url, data, format="json") + self.assertEqual(resp.status_code, 200) + self.assertEqual( + domain.domainobjectlimit_set.get(name="domain_aliases").max_value, 20 + ) + def test_delete(self): self.client.credentials( HTTP_AUTHORIZATION="Token " + self.da_token.key)