From 579dbdee100debbce5f703e5e3176bb9441d8077 Mon Sep 17 00:00:00 2001 From: Sabrina Demagny Date: Tue, 4 Feb 2025 14:50:35 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(api)=20add=20count=20mailboxes=20to?= =?UTF-8?q?=20MailDomain=20serializer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return number of mailboxes of a domain in our API. --- CHANGELOG.md | 1 + src/backend/mailbox_manager/api/client/serializers.py | 7 +++++++ .../tests/api/mail_domain/test_api_mail_domains_create.py | 2 ++ .../api/mail_domain/test_api_mail_domains_retrieve.py | 2 ++ 4 files changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7cc066..2ca5d6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to ### Added +- ✨(api) add count mailboxes to MailDomain serializer - ✨(dimail) manage 'action required' status for MailDomain - ✨(domains) add action required status on MailDomain - ✨(dimail) send pending mailboxes upon domain activation diff --git a/src/backend/mailbox_manager/api/client/serializers.py b/src/backend/mailbox_manager/api/client/serializers.py index df228b5..4eaf5c4 100644 --- a/src/backend/mailbox_manager/api/client/serializers.py +++ b/src/backend/mailbox_manager/api/client/serializers.py @@ -56,6 +56,7 @@ class MailDomainSerializer(serializers.ModelSerializer): """Serialize mail domain.""" abilities = serializers.SerializerMethodField(read_only=True) + count_mailboxes = serializers.SerializerMethodField(read_only=True) class Meta: model = models.MailDomain @@ -68,6 +69,7 @@ class MailDomainSerializer(serializers.ModelSerializer): "abilities", "created_at", "updated_at", + "count_mailboxes", ] read_only_fields = [ "id", @@ -76,6 +78,7 @@ class MailDomainSerializer(serializers.ModelSerializer): "abilities", "created_at", "updated_at", + "count_mailboxes", ] def get_abilities(self, domain) -> dict: @@ -85,6 +88,10 @@ class MailDomainSerializer(serializers.ModelSerializer): return domain.get_abilities(request.user) return {} + def get_count_mailboxes(self, domain) -> int: + """Return count of mailboxes for the domain.""" + return domain.mailboxes.count() + def create(self, validated_data): """ Override create function to fire a request to dimail upon domain creation. diff --git a/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_create.py b/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_create.py index b915069..8880fc5 100644 --- a/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_create.py +++ b/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_create.py @@ -114,6 +114,7 @@ def test_api_mail_domains__create_authenticated(): "created_at": domain.created_at.isoformat().replace("+00:00", "Z"), "updated_at": domain.updated_at.isoformat().replace("+00:00", "Z"), "abilities": domain.get_abilities(user), + "count_mailboxes": 0, } # a new domain with status "pending" is created and authenticated user is the owner @@ -185,6 +186,7 @@ def test_api_mail_domains__create_authenticated__dimail_failure(): "created_at": domain.created_at.isoformat().replace("+00:00", "Z"), "updated_at": domain.updated_at.isoformat().replace("+00:00", "Z"), "abilities": domain.get_abilities(user), + "count_mailboxes": 0, } # a new domain with status "failed" is created and authenticated user is the owner diff --git a/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_retrieve.py b/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_retrieve.py index 0e1ee01..44b68da 100644 --- a/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_retrieve.py +++ b/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_retrieve.py @@ -71,6 +71,7 @@ def test_api_mail_domains__retrieve_authenticated_related(): domain = factories.MailDomainEnabledFactory() factories.MailDomainAccessFactory(domain=domain, user=user) + factories.MailboxFactory.create_batch(10, domain=domain) response = client.get( f"/api/v1.0/mail-domains/{domain.slug}/", @@ -85,4 +86,5 @@ def test_api_mail_domains__retrieve_authenticated_related(): "created_at": domain.created_at.isoformat().replace("+00:00", "Z"), "updated_at": domain.updated_at.isoformat().replace("+00:00", "Z"), "abilities": domain.get_abilities(user), + "count_mailboxes": 10, }