diff options
Diffstat (limited to 'src/mailman/model/tests/test_domain.py')
| -rw-r--r-- | src/mailman/model/tests/test_domain.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/mailman/model/tests/test_domain.py b/src/mailman/model/tests/test_domain.py index b4a6dd75c..afde6cd53 100644 --- a/src/mailman/model/tests/test_domain.py +++ b/src/mailman/model/tests/test_domain.py @@ -30,6 +30,7 @@ from mailman.interfaces.domain import ( DomainCreatedEvent, DomainCreatingEvent, DomainDeletedEvent, DomainDeletingEvent, IDomainManager) from mailman.interfaces.listmanager import IListManager +from mailman.interfaces.usermanager import IUserManager from mailman.testing.helpers import event_subscribers from mailman.testing.layers import ConfigLayer from zope.component import getUtility @@ -78,6 +79,98 @@ class TestDomainManager(unittest.TestCase): # Trying to delete a missing domain gives you a KeyError. self.assertRaises(KeyError, self._manager.remove, 'doesnotexist.com') + def test_domain_creation_no_default_owners(self): + # If a domain is created without owners, then it has none. + domain = self._manager.add('example.org') + self.assertEqual(len(domain.owners), 0) + + def test_domain_creation_with_owner(self): + # You can create a new domain with a single owner. + domain = self._manager.add('example.org', owners=['anne@example.org']) + self.assertEqual(len(domain.owners), 1) + self.assertEqual(domain.owners[0].addresses[0].email, + 'anne@example.org') + + def test_domain_creation_with_owners(self): + # You can create a new domain with multiple owners. + domain = self._manager.add( + 'example.org', owners=['anne@example.org', + 'bart@example.net']) + self.assertEqual(len(domain.owners), 2) + self.assertEqual( + sorted(owner.addresses[0].email for owner in domain.owners), + ['anne@example.org', 'bart@example.net']) + + def test_domain_creation_creates_new_users(self): + # Domain creation with existing users does not create new users, but + # any user which doesn't yet exist (and is linked to the given + # address), gets created. + user_manager = getUtility(IUserManager) + user_manager.make_user('anne@example.com') + user_manager.make_user('bart@example.com') + domain = self._manager.add( + 'example.org', owners=['anne@example.com', + 'bart@example.com', + 'cris@example.com']) + self.assertEqual(len(domain.owners), 3) + self.assertEqual( + sorted(owner.addresses[0].email for owner in domain.owners), + ['anne@example.com', 'bart@example.com', 'cris@example.com']) + # Now cris exists as a user. + self.assertIsNotNone(user_manager.get_user('cris@example.com')) + + def test_domain_creation_with_users(self): + # Domains can be created with IUser objects. + user_manager = getUtility(IUserManager) + anne = user_manager.make_user('anne@example.com') + bart = user_manager.make_user('bart@example.com') + domain = self._manager.add('example.org', owners=[anne, bart]) + self.assertEqual(len(domain.owners), 2) + self.assertEqual( + sorted(owner.addresses[0].email for owner in domain.owners), + ['anne@example.com', 'bart@example.com']) + def sort_key(owner): + return owner.addresses[0].email + self.assertEqual(sorted(domain.owners, key=sort_key), [anne, bart]) + + def test_add_domain_owner(self): + # Domain owners can be added after the domain is created. + domain = self._manager.add('example.org') + self.assertEqual(len(domain.owners), 0) + domain.add_owner('anne@example.org') + self.assertEqual(len(domain.owners), 1) + self.assertEqual(domain.owners[0].addresses[0].email, + 'anne@example.org') + + def test_add_multiple_domain_owners(self): + # Multiple domain owners can be added after the domain is created. + domain = self._manager.add('example.org') + self.assertEqual(len(domain.owners), 0) + domain.add_owners(['anne@example.org', 'bart@example.net']) + self.assertEqual(len(domain.owners), 2) + self.assertEqual([owner.addresses[0].email for owner in domain.owners], + ['anne@example.org', 'bart@example.net']) + + def test_remove_domain_owner(self): + # Domain onwers can be removed. + domain = self._manager.add( + 'example.org', owners=['anne@example.org', + 'bart@example.net']) + domain.remove_owner('anne@example.org') + self.assertEqual(len(domain.owners), 1) + self.assertEqual([owner.addresses[0].email for owner in domain.owners], + ['bart@example.net']) + + def test_remove_missing_owner(self): + # Users which aren't owners can't be removed. + domain = self._manager.add( + 'example.org', owners=['anne@example.org', + 'bart@example.net']) + self.assertRaises(ValueError, domain.remove_owner, 'cris@example.org') + self.assertEqual(len(domain.owners), 2) + self.assertEqual([owner.addresses[0].email for owner in domain.owners], + ['anne@example.org', 'bart@example.net']) + class TestDomainLifecycleEvents(unittest.TestCase): |
