From 19c36eafde25216a3070c826a9c4a26cd8667629 Mon Sep 17 00:00:00 2001 From: Marie PUPO JEAMMET Date: Wed, 19 Jun 2024 16:48:07 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85(tests)=20fix=20tests=20after=20adding?= =?UTF-8?q?=20slugs=20to=20domains?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - slug readonly on admin - fix test to expect slug in payload, when retrieving a domain --- src/backend/mailbox_manager/admin.py | 3 ++- src/backend/mailbox_manager/api/serializers.py | 6 ++++++ src/backend/mailbox_manager/models.py | 8 ++++++-- .../api/mail_domain/test_api_mail_domains_retrieve.py | 1 + .../mailbox_manager/tests/test_models_maildomain.py | 10 +++++++++- 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/backend/mailbox_manager/admin.py b/src/backend/mailbox_manager/admin.py index 249c2b6..19a40fd 100644 --- a/src/backend/mailbox_manager/admin.py +++ b/src/backend/mailbox_manager/admin.py @@ -14,9 +14,10 @@ class MailDomainAdmin(admin.ModelAdmin): "name", "created_at", "updated_at", + "slug", ) search_fields = ("name",) - readonly_fields = ["created_at"] + readonly_fields = ["created_at", "slug"] @admin.register(models.MailDomainAccess) diff --git a/src/backend/mailbox_manager/api/serializers.py b/src/backend/mailbox_manager/api/serializers.py index fc20196..0e62f7e 100644 --- a/src/backend/mailbox_manager/api/serializers.py +++ b/src/backend/mailbox_manager/api/serializers.py @@ -26,6 +26,12 @@ class MailDomainSerializer(serializers.ModelSerializer): "created_at", "updated_at", ] + read_only_fields = [ + "id", + "slug", + "created_at", + "updated_at", + ] class MailDomainAccessSerializer(serializers.ModelSerializer): diff --git a/src/backend/mailbox_manager/models.py b/src/backend/mailbox_manager/models.py index 247bc40..26a0ba7 100644 --- a/src/backend/mailbox_manager/models.py +++ b/src/backend/mailbox_manager/models.py @@ -28,10 +28,14 @@ class MailDomain(BaseModel): return self.name def save(self, *args, **kwargs): - if not self.slug: - self.slug = slugify(self.name) + """Override save function to compute the slug.""" + self.slug = self.get_slug() return super().save(*args, **kwargs) + def get_slug(self): + """Compute slug value from name.""" + return slugify(self.name) + def get_abilities(self, user): """ Compute and return abilities for a given user on the domain. 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 aaacb27..89b6497 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 @@ -66,6 +66,7 @@ def test_api_mail_domains__retrieve_authenticated_related(): assert response.json() == { "id": str(domain.id), "name": domain.name, + "slug": domain.slug, "created_at": domain.created_at.isoformat().replace("+00:00", "Z"), "updated_at": domain.updated_at.isoformat().replace("+00:00", "Z"), } diff --git a/src/backend/mailbox_manager/tests/test_models_maildomain.py b/src/backend/mailbox_manager/tests/test_models_maildomain.py index 5bf54fc..eb89e14 100644 --- a/src/backend/mailbox_manager/tests/test_models_maildomain.py +++ b/src/backend/mailbox_manager/tests/test_models_maildomain.py @@ -3,6 +3,7 @@ Unit tests for the MailDomain model """ from django.core.exceptions import ValidationError +from django.utils.text import slugify import pytest @@ -10,7 +11,6 @@ from mailbox_manager import factories pytestmark = pytest.mark.django_db - # NAME FIELD @@ -24,3 +24,11 @@ def test_models_mail_domain__domain_name_should_not_be_null(): """The domain name field should not be null.""" with pytest.raises(ValidationError, match="This field cannot be null."): factories.MailDomainFactory(name=None) + + +def test_models_mail_domain__slug_inferred_from_name(): + """Passed slug is ignored. Slug is automatically generated from name.""" + + name = "N3w_D0main-Name$.com" + domain = factories.MailDomainFactory(name=name, slug="something else") + assert domain.slug == slugify(name)