For now, treat `DeliveryMode.summary_digests` the same as `.mime_digests`.
[mailman.git] / src / mailman / model / tests / test_member.py
blob3ad13b2783bd2bd52611e5e4aa07ea8a24f5fb44
1 # Copyright (C) 2011-2015 by the Free Software Foundation, Inc.
3 # This file is part of GNU Mailman.
5 # GNU Mailman is free software: you can redistribute it and/or modify it under
6 # the terms of the GNU General Public License as published by the Free
7 # Software Foundation, either version 3 of the License, or (at your option)
8 # any later version.
10 # GNU Mailman is distributed in the hope that it will be useful, but WITHOUT
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 # more details.
15 # You should have received a copy of the GNU General Public License along with
16 # GNU Mailman. If not, see <http://www.gnu.org/licenses/>.
18 """Test members."""
20 __all__ = [
21 'TestMember',
25 import unittest
27 from mailman.app.lifecycle import create_list
28 from mailman.interfaces.member import MemberRole, MembershipError
29 from mailman.interfaces.user import UnverifiedAddressError
30 from mailman.interfaces.usermanager import IUserManager
31 from mailman.model.member import Member
32 from mailman.testing.layers import ConfigLayer
33 from mailman.utilities.datetime import now
34 from zope.component import getUtility
38 class TestMember(unittest.TestCase):
39 layer = ConfigLayer
41 def setUp(self):
42 self._mlist = create_list('test@example.com')
43 self._usermanager = getUtility(IUserManager)
45 def test_cannot_set_address_with_preferred_address_subscription(self):
46 # A user is subscribed to a mailing list with their preferred address.
47 # You cannot set the `address` attribute on such IMembers.
48 anne = self._usermanager.create_user('anne@example.com')
49 preferred = list(anne.addresses)[0]
50 preferred.verified_on = now()
51 anne.preferred_address = preferred
52 # Subscribe with the IUser object, not the address. This makes Anne a
53 # member via her preferred address.
54 member = self._mlist.subscribe(anne)
55 new_address = anne.register('aperson@example.com')
56 new_address.verified_on = now()
57 self.assertRaises(MembershipError,
58 setattr, member, 'address', new_address)
60 def test_cannot_change_to_unverified_address(self):
61 # A user is subscribed to a mailing list with an explicit address.
62 # You cannot set the `address` attribute to an unverified address.
63 anne = self._usermanager.create_user('anne@example.com')
64 address = list(anne.addresses)[0]
65 member = self._mlist.subscribe(address)
66 new_address = anne.register('aperson@example.com')
67 # The new address is not verified.
68 self.assertRaises(UnverifiedAddressError,
69 setattr, member, 'address', new_address)
71 def test_cannot_change_to_address_uncontrolled_address(self):
72 # A user tries to change their subscription to an address they do not
73 # control.
74 anne = self._usermanager.create_user('anne@example.com')
75 address = list(anne.addresses)[0]
76 member = self._mlist.subscribe(address)
77 new_address = self._usermanager.create_address('nobody@example.com')
78 new_address.verified_on = now()
79 # The new address is not verified.
80 self.assertRaises(MembershipError,
81 setattr, member, 'address', new_address)
83 def test_cannot_change_to_address_controlled_by_other_user(self):
84 # A user tries to change their subscription to an address some other
85 # user controls.
86 anne = self._usermanager.create_user('anne@example.com')
87 anne_address = list(anne.addresses)[0]
88 bart = self._usermanager.create_user('bart@example.com')
89 bart_address = list(bart.addresses)[0]
90 bart_address.verified_on = now()
91 member = self._mlist.subscribe(anne_address)
92 # The new address is not verified.
93 self.assertRaises(MembershipError,
94 setattr, member, 'address', bart_address)
96 def test_member_ctor_value_error(self):
97 # ValueError when passing in anything but a user or address.
98 self.assertRaises(ValueError, Member, MemberRole.member,
99 self._mlist.list_id,
100 'aperson@example.com')