diff --git a/src/backend/mailbox_manager/admin.py b/src/backend/mailbox_manager/admin.py index 75f6b8a..71031ce 100644 --- a/src/backend/mailbox_manager/admin.py +++ b/src/backend/mailbox_manager/admin.py @@ -25,7 +25,13 @@ class MailDomainAdmin(admin.ModelAdmin): class MailDomainAccessAdmin(admin.ModelAdmin): """Admin for mail domain accesses model.""" - list_display = ("user", "domain") + list_display = ( + "user", + "domain", + "role", + "created_at", + "updated_at", + ) @admin.register(models.Mailbox) diff --git a/src/backend/mailbox_manager/enums.py b/src/backend/mailbox_manager/enums.py index 9afc0df..76218e6 100644 --- a/src/backend/mailbox_manager/enums.py +++ b/src/backend/mailbox_manager/enums.py @@ -6,6 +6,14 @@ from django.db import models from django.utils.translation import gettext_lazy as _ +class MailDomainRoleChoices(models.TextChoices): + """Defines the possible roles a user can have to access to a mail domain.""" + + VIEWER = "viewer", _("Viewer") + ADMIN = "administrator", _("Administrator") + OWNER = "owner", _("Owner") + + class MailDomainStatusChoices(models.TextChoices): """Defines the possible statuses in which a mail domain can be.""" diff --git a/src/backend/mailbox_manager/factories.py b/src/backend/mailbox_manager/factories.py index 8b876b2..5052549 100644 --- a/src/backend/mailbox_manager/factories.py +++ b/src/backend/mailbox_manager/factories.py @@ -56,7 +56,9 @@ class MailDomainAccessFactory(factory.django.DjangoModelFactory): user = factory.SubFactory(core_factories.UserFactory) domain = factory.SubFactory(MailDomainFactory) - role = factory.fuzzy.FuzzyChoice([r[0] for r in core_models.RoleChoices.choices]) + role = factory.fuzzy.FuzzyChoice( + [r[0] for r in enums.MailDomainRoleChoices.choices] + ) class MailboxFactory(factory.django.DjangoModelFactory): diff --git a/src/backend/mailbox_manager/migrations/0007_alter_maildomainaccess_role.py b/src/backend/mailbox_manager/migrations/0007_alter_maildomainaccess_role.py new file mode 100644 index 0000000..0ac8a12 --- /dev/null +++ b/src/backend/mailbox_manager/migrations/0007_alter_maildomainaccess_role.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.6 on 2024-08-02 15:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mailbox_manager', '0006_maildomain_status'), + ] + + operations = [ + migrations.AlterField( + model_name='maildomainaccess', + name='role', + field=models.CharField(choices=[('viewer', 'Viewer'), ('administrator', 'Administrator'), ('owner', 'Owner')], default='viewer', max_length=20), + ), + ] diff --git a/src/backend/mailbox_manager/models.py b/src/backend/mailbox_manager/models.py index 03bb2ab..de31c8f 100644 --- a/src/backend/mailbox_manager/models.py +++ b/src/backend/mailbox_manager/models.py @@ -9,9 +9,9 @@ from django.db import models from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ -from core.models import BaseModel, RoleChoices +from core.models import BaseModel -from mailbox_manager.enums import MailDomainStatusChoices +from mailbox_manager.enums import MailDomainRoleChoices, MailDomainStatusChoices class MailDomain(BaseModel): @@ -57,13 +57,16 @@ class MailDomain(BaseModel): except (MailDomainAccess.DoesNotExist, IndexError): role = None - is_owner_or_admin = role in [RoleChoices.OWNER, RoleChoices.ADMIN] + is_owner_or_admin = role in [ + MailDomainRoleChoices.OWNER, + MailDomainRoleChoices.ADMIN, + ] return { "get": bool(role), "patch": is_owner_or_admin, "put": is_owner_or_admin, - "delete": role == RoleChoices.OWNER, + "delete": role == MailDomainRoleChoices.OWNER, "manage_accesses": is_owner_or_admin, } @@ -86,7 +89,9 @@ class MailDomainAccess(BaseModel): blank=False, ) role = models.CharField( - max_length=20, choices=RoleChoices.choices, default=RoleChoices.MEMBER + max_length=20, + choices=MailDomainRoleChoices.choices, + default=MailDomainRoleChoices.VIEWER, ) class Meta: diff --git a/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_list.py b/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_list.py index 96451af..e5d1c7b 100644 --- a/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_list.py +++ b/src/backend/mailbox_manager/tests/api/mail_domain/test_api_mail_domains_list.py @@ -41,8 +41,8 @@ def test_api_mail_domains__list_authenticated(): str(access.domain.id) for access in factories.MailDomainAccessFactory.create_batch(5, user=user) } - factories.MailDomainFactory.create_batch(2) # Other teams - factories.MailDomainAccessFactory.create_batch(2) # Other teams and accesses + factories.MailDomainFactory.create_batch(2) # Other domains + factories.MailDomainAccessFactory.create_batch(2) # Other domains and accesses response = client.get( "/api/v1.0/mail-domains/",