diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index 145edfc8a..49547189e 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -269,8 +269,9 @@ class Domain(AdminObject): self.save(creator=user) def to_csv(self, csvwriter): + """Export domain and domain aliases to CSV format.""" csvwriter.writerow([ - "domain", self.name, self.quota, self.default_mailbox_quot, + "domain", self.name, self.quota, self.default_mailbox_quota, self.enabled ]) for dalias in self.domainalias_set.all(): diff --git a/modoboa/admin/tests/test_export.py b/modoboa/admin/tests/test_export.py index 639ae767a..0de4ed545 100644 --- a/modoboa/admin/tests/test_export.py +++ b/modoboa/admin/tests/test_export.py @@ -8,7 +8,6 @@ from .. import factories class ExportTestCase(ModoTestCase): - """Test case for export operations.""" @classmethod @@ -17,6 +16,14 @@ class ExportTestCase(ModoTestCase): super(ExportTestCase, cls).setUpTestData() factories.populate_database() + def __export_domains(self, domfilter=""): + self.client.get( + "{}?domfilter={}".format( + reverse("admin:_domain_list"), domfilter)) + return self.client.post( + reverse("admin:domain_export"), {"filename": "test.csv"} + ) + def __export_identities(self, idtfilter="", grpfilter=""): self.client.get( reverse("admin:_identity_list") + @@ -34,6 +41,14 @@ class ExportTestCase(ModoTestCase): continue self.assertIn(entry, list2) + def test_export_domains(self): + """Check domain export.""" + response = self.__export_domains() + self.assertListEqual( + "domain;test2.com;0;0;True\r\ndomain;test.com;50;10;True\r\n", + response.content.strip() + ) + def test_export_identities(self): response = self.__export_identities() self.assertListEqual( diff --git a/modoboa/admin/tests/test_import_.py b/modoboa/admin/tests/test_import_.py index b95c4b637..067c50cab 100644 --- a/modoboa/admin/tests/test_import_.py +++ b/modoboa/admin/tests/test_import_.py @@ -49,6 +49,22 @@ domainalias; domalias1.com; domain1.com; True self.assertFalse(dom.enabled) self.assertTrue(admin.is_owner(dom)) + def test_domain_import_bad_syntax(self): + """Check errors handling.""" + url = reverse("admin:domain_import") + f = ContentFile("domain; domain1.com; 100; True", + name="domains.csv") + response = self.client.post(url, {"sourcefile": f}) + self.assertContains(response, "Invalid line") + f = ContentFile("domain; domain1.com; XX; 100; True", + name="domains.csv") + response = self.client.post(url, {"sourcefile": f}) + self.assertContains(response, "Invalid quota value") + f = ContentFile("domain; domain1.com; 100; XX; True", + name="domains.csv") + response = self.client.post(url, {"sourcefile": f}) + self.assertContains(response, "Invalid default mailbox quota") + def test_import_domains_with_conflict(self): f = ContentFile(b"""domain;test.alias;100;10;True domainalias;test.alias;test.com;True