diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a3332f..000d325 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ and this project adheres to ## [Unreleased] +### Added + +- ✨(domains) add support email field on domain + ## [1.11.0] - 2025-02-07 ### Added diff --git a/src/backend/mailbox_manager/api/client/serializers.py b/src/backend/mailbox_manager/api/client/serializers.py index 4eaf5c4..2a88eb8 100644 --- a/src/backend/mailbox_manager/api/client/serializers.py +++ b/src/backend/mailbox_manager/api/client/serializers.py @@ -70,6 +70,7 @@ class MailDomainSerializer(serializers.ModelSerializer): "created_at", "updated_at", "count_mailboxes", + "support_email", ] read_only_fields = [ "id", diff --git a/src/backend/mailbox_manager/api/client/viewsets.py b/src/backend/mailbox_manager/api/client/viewsets.py index 9514bba..5c14117 100644 --- a/src/backend/mailbox_manager/api/client/viewsets.py +++ b/src/backend/mailbox_manager/api/client/viewsets.py @@ -33,6 +33,7 @@ class MailDomainViewSet( POST /api//mail-domains/ with expected data: - name: str + - support_email: str Return newly created domain """ diff --git a/src/backend/mailbox_manager/factories.py b/src/backend/mailbox_manager/factories.py index 51f7eda..d04bd28 100644 --- a/src/backend/mailbox_manager/factories.py +++ b/src/backend/mailbox_manager/factories.py @@ -27,6 +27,7 @@ class MailDomainFactory(factory.django.DjangoModelFactory): name = factory.Faker("domain_name") slug = factory.LazyAttribute(lambda o: slugify(o.name)) + support_email = factory.Faker("email") @factory.post_generation def users(self, create, extracted, **kwargs): diff --git a/src/backend/mailbox_manager/management/commands/setup_dimail_db.py b/src/backend/mailbox_manager/management/commands/setup_dimail_db.py index 34653ef..3118c22 100644 --- a/src/backend/mailbox_manager/management/commands/setup_dimail_db.py +++ b/src/backend/mailbox_manager/management/commands/setup_dimail_db.py @@ -66,7 +66,11 @@ class Command(BaseCommand): # we create a domain and add John Doe to it domain_name = "test.domain.com" domain = MailDomain.objects.get_or_create( - name=domain_name, defaults={"status": enums.MailDomainStatusChoices.ENABLED} + name=domain_name, + defaults={ + "status": enums.MailDomainStatusChoices.ENABLED, + "support_email": f"support@{domain_name}", + }, )[0] self.create_domain(domain_name) diff --git a/src/backend/mailbox_manager/migrations/0018_maildomain_support_email.py b/src/backend/mailbox_manager/migrations/0018_maildomain_support_email.py new file mode 100644 index 0000000..21a3d59 --- /dev/null +++ b/src/backend/mailbox_manager/migrations/0018_maildomain_support_email.py @@ -0,0 +1,31 @@ +# Generated by Django 5.1.5 on 2025-02-02 21:49 + +from django.db import migrations, models + + +def fill_support_email(apps, schema_editor): + MailDomain = apps.get_model('mailbox_manager', 'MailDomain') + for domain in MailDomain.objects.filter(support_email__isnull=True): + domain.support_email = "support-regie@numerique.gouv.fr" + domain.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('mailbox_manager', '0017_alter_maildomain_status'), + ] + + operations = [ + migrations.AddField( + model_name='maildomain', + name='support_email', + field=models.EmailField(blank=True, max_length=254, null=True, verbose_name='support email'), + ), + migrations.RunPython(fill_support_email, reverse_code=migrations.RunPython.noop), + migrations.AlterField( + model_name='maildomain', + name='support_email', + field=models.EmailField(max_length=254, verbose_name='support email'), + ), + ] diff --git a/src/backend/mailbox_manager/models.py b/src/backend/mailbox_manager/models.py index f122e31..ca41690 100644 --- a/src/backend/mailbox_manager/models.py +++ b/src/backend/mailbox_manager/models.py @@ -29,6 +29,7 @@ class MailDomain(BaseModel): default=MailDomainStatusChoices.PENDING, choices=MailDomainStatusChoices.choices, ) + support_email = models.EmailField(_("support email"), null=False, blank=False) class Meta: db_table = "people_mail_domain" 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 8880fc5..dd000b6 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 @@ -99,7 +99,12 @@ def test_api_mail_domains__create_authenticated(): ) response = client.post( "/api/v1.0/mail-domains/", - {"name": domain_name, "context": "null", "features": ["webmail"]}, + { + "name": domain_name, + "context": "null", + "features": ["webmail"], + "support_email": f"support@{domain_name}", + }, format="json", ) assert response.status_code == status.HTTP_201_CREATED @@ -115,6 +120,7 @@ def test_api_mail_domains__create_authenticated(): "updated_at": domain.updated_at.isoformat().replace("+00:00", "Z"), "abilities": domain.get_abilities(user), "count_mailboxes": 0, + "support_email": domain.support_email, } # a new domain with status "pending" is created and authenticated user is the owner @@ -171,10 +177,14 @@ def test_api_mail_domains__create_authenticated__dimail_failure(): ) response = client.post( "/api/v1.0/mail-domains/", - {"name": domain_name, "context": "null", "features": ["webmail"]}, + { + "name": domain_name, + "context": "null", + "features": ["webmail"], + "support_email": f"support@{domain_name}", + }, format="json", ) - assert response.status_code == status.HTTP_201_CREATED domain = models.MailDomain.objects.get() # response is as expected @@ -187,6 +197,7 @@ def test_api_mail_domains__create_authenticated__dimail_failure(): "updated_at": domain.updated_at.isoformat().replace("+00:00", "Z"), "abilities": domain.get_abilities(user), "count_mailboxes": 0, + "support_email": domain.support_email, } # a new domain with status "failed" is created and authenticated user is the owner @@ -244,6 +255,7 @@ def test_api_mail_domains__create_dimail_domain(caplog): "/api/v1.0/mail-domains/", { "name": domain_name, + "support_email": f"support@{domain_name}", }, format="json", ) @@ -292,6 +304,7 @@ def test_api_mail_domains__no_creation_when_dimail_duplicate(caplog): "/api/v1.0/mail-domains/", { "name": domain_name, + "support_email": f"support@{domain_name}", }, format="json", ) 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 44b68da..65236de 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 @@ -87,4 +87,5 @@ def test_api_mail_domains__retrieve_authenticated_related(): "updated_at": domain.updated_at.isoformat().replace("+00:00", "Z"), "abilities": domain.get_abilities(user), "count_mailboxes": 10, + "support_email": domain.support_email, }