diff --git a/modoboa/admin/api/v2/serializers.py b/modoboa/admin/api/v2/serializers.py index 98af9b13d..9c2d77829 100644 --- a/modoboa/admin/api/v2/serializers.py +++ b/modoboa/admin/api/v2/serializers.py @@ -356,12 +356,14 @@ class WritableAccountSerializer(v1_serializers.WritableAccountSerializer): instance.set_password(password) if mailbox_data: creator = self.context["request"].user - if instance.mailbox: + if hasattr(instance, "mailbox"): if "username" in validated_data: mailbox_data["email"] = validated_data["username"] instance.email = validated_data["username"] instance.mailbox.update_from_dict(creator, mailbox_data) - else: + elif "username" in validated_data: + mailbox_data["full_address"] = validated_data["username"] + instance.email = validated_data["username"] self._create_mailbox(creator, instance, mailbox_data) instance.save() self.set_permissions(instance, domains) diff --git a/modoboa/admin/api/v2/tests.py b/modoboa/admin/api/v2/tests.py index 4705f117d..09b83a756 100644 --- a/modoboa/admin/api/v2/tests.py +++ b/modoboa/admin/api/v2/tests.py @@ -158,6 +158,38 @@ class AccountViewSetTestCase(ModoAPITestCase): with self.assertRaises(core_models.User.DoesNotExist): account.refresh_from_db() + def test_update(self): + account = core_models.User.objects.get(username="user@test.com") + url = reverse("v2:account-detail", args=[account.pk]) + data = { + "username": "user@test.com", + "role": "SimpleUsers", + "password": "Toto12345", + "mailbox": { + "quota": 10 + } + } + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + def test_update_admin(self): + account = core_models.User.objects.get(username="admin") + url = reverse("v2:account-detail", args=[account.pk]) + data = { + "username": "superadmin@test.com", + "role": "SuperAdmins", + "password": "Toto12345", + "mailbox": { + "quota": 10 + } + } + resp = self.client.patch(url, data, format="json") + self.assertEqual(resp.status_code, 200) + + account.refresh_from_db() + self.assertEqual(account.email, data["username"]) + self.assertEqual(account.mailbox.full_address, data["username"]) + class IdentityViewSetTestCase(ModoAPITestCase): @@ -235,6 +267,10 @@ class UserAccountViewSetTestCase(ModoAPITestCase): 2 ) + resp = self.client.get(url) + self.assertEqual(resp.status_code, 200) + self.assertTrue(resp.json()["keepcopies"]) + data = {"keepcopies": False} resp = self.client.post(url, data, format="json") self.assertEqual(resp.status_code, 200)