diff --git a/modoboa/extensions/admin/__init__.py b/modoboa/extensions/admin/__init__.py index a0f29e83b..12baf0961 100644 --- a/modoboa/extensions/admin/__init__.py +++ b/modoboa/extensions/admin/__init__.py @@ -153,7 +153,7 @@ def import_account_mailbox(user, account, row): :param list rom: list of fields (strings) """ account.email = row[0].strip() - if account.email != "": + if account.email: account.save() mailbox, domname = split_mailbox(account.email) try: @@ -169,8 +169,16 @@ def import_account_mailbox(user, account, row): except Mailbox.DoesNotExist: pass else: - raise Conflict(_("Mailbox %s already exists" % account.email)) - quota = int(row[1].strip()) + raise Conflict(_("Mailbox %s already exists" % account.email)) + if len(row) == 1: + quota = None + else: + try: + quota = int(row[1].strip()) + except ValueError: + raise BadRequest( + _("Account import failed (%s): wrong quota value" % account.username) + ) use_domain_quota = True if not quota else False mb = Mailbox(address=mailbox, domain=domain, user=account, use_domain_quota=use_domain_quota) diff --git a/modoboa/extensions/admin/tests/import_.py b/modoboa/extensions/admin/tests/import_.py index 8f02fed99..7d2c600d7 100644 --- a/modoboa/extensions/admin/tests/import_.py +++ b/modoboa/extensions/admin/tests/import_.py @@ -104,6 +104,16 @@ dlist; dlist@test.com; True; user1@test.com; user@extdomain.com self.assertTrue(admin.is_owner(dlist)) def test_import_invalid_quota(self): + f = ContentFile(b""" +account; user1@test.com; toto; User; One; True; SimpleUsers; user1@test.com; ; test.com +""", name="identities.csv") + resp = self.clt.post( + reverse("modoboa.extensions.admin.views.import.import_identities"), + {"sourcefile": f, "crypt_password": True} + ) + self.assertIn('wrong quota value', resp.content) + + def test_import_quota_too_big(self): self.clt.logout() self.clt.login(username="admin@test.com", password="toto") f = ContentFile(b""" @@ -115,6 +125,20 @@ account; user1@test.com; toto; User; One; True; SimpleUsers; user1@test.com; 20 ) self.assertIn('Quota is greater than the allowed', resp.content) + def test_import_missing_quota(self): + f = ContentFile(b""" +account; user1@test.com; toto; User; One; True; SimpleUsers; user1@test.com +""", name="identities.csv") + resp = self.clt.post( + reverse("modoboa.extensions.admin.views.import.import_identities"), + {"sourcefile": f, "crypt_password": True} + ) + account = User.objects.get(username="user1@test.com") + self.assertEqual( + account.mailbox_set.all()[0].quota, + account.mailbox_set.all()[0].domain.quota + ) + def test_import_duplicate(self): f = ContentFile(b""" account; admin@test.com; toto; Admin; ; True; DomainAdmins; admin@test.com; 0; test.com