From 54d9a91610b5d1558eba0b805d6e16393f937b28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Poulain?= Date: Sat, 6 Nov 2021 17:06:04 +0100 Subject: [PATCH 1/3] Test case for account creation on preexisting alias --- modoboa/admin/tests/test_account.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modoboa/admin/tests/test_account.py b/modoboa/admin/tests/test_account.py index 0c4bb27e7..00ed56684 100644 --- a/modoboa/admin/tests/test_account.py +++ b/modoboa/admin/tests/test_account.py @@ -119,6 +119,21 @@ class AccountTestCase(ModoTestCase): account = User.objects.get(username=values["username"]) self.assertEqual(account.language, "fr") + def test_create_account_with_existing_alias(self): + alias = models.Alias.objects.get(address="alias@test.com") + alias.set_recipients(["user@external.com"]) + values = { + "email": "tester@test.com", + "username": "tester@test.com", + "role": "SimpleUsers", + "random_password": "on", + "quota_act": True, + "is_active": True, + "stepid": "step2", + "aliases": "alias@test.com", + } + self.ajax_post(reverse("admin:account_add"), values) + def test_aliases_update_on_disable(self): """Check if aliases are updated when account is disabled.""" account = User.objects.get(username="user@test.com") From 1931abf85758f9d7ab08da7430d414863e3676f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Poulain?= Date: Sat, 6 Nov 2021 18:10:36 +0100 Subject: [PATCH 2/3] Fix account creation on preexisting alias --- modoboa/admin/forms/account.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/modoboa/admin/forms/account.py b/modoboa/admin/forms/account.py index 51d246480..c99147890 100644 --- a/modoboa/admin/forms/account.py +++ b/modoboa/admin/forms/account.py @@ -420,9 +420,11 @@ class AccountFormMail(forms.Form, DynamicForm): alias__address=alias).exists(): continue local_part, domname = split_mailbox(alias) - al = models.Alias(address=alias, enabled=account.is_active) - al.domain = models.Domain.objects.get(name=domname) - al.save() + al, _ = models.Alias.objects.get_or_create( + address=alias, + domain=models.Domain.objects.get(name=domname), + defaults={'enabled': account.is_active}, + ) al.set_recipients([self.mb.full_address]) al.post_create(user) From 626eb6ab96affe24c1e9923e3bca983ffa6ce7c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Poulain?= Date: Sat, 6 Nov 2021 18:14:43 +0100 Subject: [PATCH 3/3] Fix voiding of preexisting recipients --- modoboa/admin/forms/account.py | 2 +- modoboa/admin/models/alias.py | 9 +++++++-- modoboa/admin/tests/test_account.py | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/modoboa/admin/forms/account.py b/modoboa/admin/forms/account.py index c99147890..e406c147b 100644 --- a/modoboa/admin/forms/account.py +++ b/modoboa/admin/forms/account.py @@ -425,7 +425,7 @@ class AccountFormMail(forms.Form, DynamicForm): domain=models.Domain.objects.get(name=domname), defaults={'enabled': account.is_active}, ) - al.set_recipients([self.mb.full_address]) + al.add_recipients([self.mb.full_address]) al.post_create(user) def _update_sender_addresses(self): diff --git a/modoboa/admin/models/alias.py b/modoboa/admin/models/alias.py index e017b2110..808d0668d 100644 --- a/modoboa/admin/models/alias.py +++ b/modoboa/admin/models/alias.py @@ -137,8 +137,8 @@ class Alias(AdminObject): for admin in self.domain.admins: grant_access_to_object(admin, self) - def set_recipients(self, address_list): - """Set recipients for this alias. + def add_recipients(self, address_list): + """Add recipients for this alias. Special recipients: * local mailbox + extension: r_mailbox will be set to local mailbox @@ -187,6 +187,11 @@ class Alias(AdminObject): kwargs["r_mailbox"] = rcpt AliasRecipient(**kwargs).save() + def set_recipients(self, address_list): + """Set recipients for this alias.""" + + self.add_recipients(address_list) + # Remove old recipients self.aliasrecipient_set.exclude( address__in=address_list).delete() diff --git a/modoboa/admin/tests/test_account.py b/modoboa/admin/tests/test_account.py index 00ed56684..963c9b7be 100644 --- a/modoboa/admin/tests/test_account.py +++ b/modoboa/admin/tests/test_account.py @@ -133,6 +133,7 @@ class AccountTestCase(ModoTestCase): "aliases": "alias@test.com", } self.ajax_post(reverse("admin:account_add"), values) + self.assertTrue(alias.aliasrecipient_set.count() == 2) def test_aliases_update_on_disable(self): """Check if aliases are updated when account is disabled."""