PageRenderTime 44ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/src/mailman/model/tests/test_roster.py

https://gitlab.com/noc0lour/mailman
Python | 227 lines | 205 code | 5 blank | 17 comment | 0 complexity | 8fbda3fab70cf04ad0a498ffadd5a3e4 MD5 | raw file
  1. # Copyright (C) 2012-2016 by the Free Software Foundation, Inc.
  2. #
  3. # This file is part of GNU Mailman.
  4. #
  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.
  9. #
  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.
  14. #
  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/>.
  17. """Test rosters."""
  18. import unittest
  19. from mailman.app.lifecycle import create_list
  20. from mailman.interfaces.address import IAddress
  21. from mailman.interfaces.member import DeliveryMode, MemberRole
  22. from mailman.interfaces.user import IUser
  23. from mailman.interfaces.usermanager import IUserManager
  24. from mailman.testing.helpers import set_preferred
  25. from mailman.testing.layers import ConfigLayer
  26. from zope.component import getUtility
  27. class TestMailingListRoster(unittest.TestCase):
  28. """Test various aspects of a mailing list's roster."""
  29. layer = ConfigLayer
  30. def setUp(self):
  31. self._mlist = create_list('test@example.com')
  32. user_manager = getUtility(IUserManager)
  33. self._anne = user_manager.create_address('anne@example.com')
  34. self._bart = user_manager.create_address('bart@example.com')
  35. self._cris = user_manager.create_address('cris@example.com')
  36. def test_no_members(self):
  37. # Nobody with any role is subscribed to the mailing list.
  38. self.assertEqual(self._mlist.owners.member_count, 0)
  39. self.assertEqual(self._mlist.moderators.member_count, 0)
  40. self.assertEqual(self._mlist.administrators.member_count, 0)
  41. self.assertEqual(self._mlist.members.member_count, 0)
  42. self.assertEqual(self._mlist.regular_members.member_count, 0)
  43. self.assertEqual(self._mlist.digest_members.member_count, 0)
  44. self.assertEqual(self._mlist.subscribers.member_count, 0)
  45. def test_one_regular_member(self):
  46. # One person getting regular delivery is subscribed to the mailing
  47. # list as a member.
  48. self._mlist.subscribe(self._anne, role=MemberRole.member)
  49. self.assertEqual(self._mlist.owners.member_count, 0)
  50. self.assertEqual(self._mlist.moderators.member_count, 0)
  51. self.assertEqual(self._mlist.administrators.member_count, 0)
  52. self.assertEqual(self._mlist.members.member_count, 1)
  53. self.assertEqual(self._mlist.regular_members.member_count, 1)
  54. self.assertEqual(self._mlist.digest_members.member_count, 0)
  55. self.assertEqual(self._mlist.subscribers.member_count, 1)
  56. def test_two_regular_members(self):
  57. # Two people getting regular delivery are subscribed to the mailing
  58. # list as members.
  59. self._mlist.subscribe(self._anne, role=MemberRole.member)
  60. self._mlist.subscribe(self._bart, role=MemberRole.member)
  61. self.assertEqual(self._mlist.owners.member_count, 0)
  62. self.assertEqual(self._mlist.moderators.member_count, 0)
  63. self.assertEqual(self._mlist.administrators.member_count, 0)
  64. self.assertEqual(self._mlist.members.member_count, 2)
  65. self.assertEqual(self._mlist.regular_members.member_count, 2)
  66. self.assertEqual(self._mlist.digest_members.member_count, 0)
  67. self.assertEqual(self._mlist.subscribers.member_count, 2)
  68. def test_one_regular_members_one_digest_member(self):
  69. # Two people are subscribed to the mailing list as members. One gets
  70. # regular delivery and one gets digest delivery.
  71. self._mlist.subscribe(self._anne, role=MemberRole.member)
  72. member = self._mlist.subscribe(self._bart, role=MemberRole.member)
  73. member.preferences.delivery_mode = DeliveryMode.mime_digests
  74. self.assertEqual(self._mlist.owners.member_count, 0)
  75. self.assertEqual(self._mlist.moderators.member_count, 0)
  76. self.assertEqual(self._mlist.administrators.member_count, 0)
  77. self.assertEqual(self._mlist.members.member_count, 2)
  78. self.assertEqual(self._mlist.regular_members.member_count, 1)
  79. self.assertEqual(self._mlist.digest_members.member_count, 1)
  80. self.assertEqual(self._mlist.subscribers.member_count, 2)
  81. def test_a_person_is_both_a_member_and_an_owner(self):
  82. # Anne is the owner of a mailing list and she gets subscribed as a
  83. # member of the mailing list, receiving regular deliveries.
  84. self._mlist.subscribe(self._anne, role=MemberRole.member)
  85. self._mlist.subscribe(self._anne, role=MemberRole.owner)
  86. self.assertEqual(self._mlist.owners.member_count, 1)
  87. self.assertEqual(self._mlist.moderators.member_count, 0)
  88. self.assertEqual(self._mlist.administrators.member_count, 1)
  89. self.assertEqual(self._mlist.members.member_count, 1)
  90. self.assertEqual(self._mlist.regular_members.member_count, 1)
  91. self.assertEqual(self._mlist.digest_members.member_count, 0)
  92. self.assertEqual(self._mlist.subscribers.member_count, 2)
  93. def test_a_bunch_of_members_and_administrators(self):
  94. # Anne is the owner of a mailing list, and Bart is a moderator. Anne
  95. # gets subscribed as a member of the mailing list, receiving regular
  96. # deliveries. Cris subscribes to the mailing list as a digest member.
  97. self._mlist.subscribe(self._anne, role=MemberRole.owner)
  98. self._mlist.subscribe(self._bart, role=MemberRole.moderator)
  99. self._mlist.subscribe(self._anne, role=MemberRole.member)
  100. member = self._mlist.subscribe(self._cris, role=MemberRole.member)
  101. member.preferences.delivery_mode = DeliveryMode.mime_digests
  102. self.assertEqual(self._mlist.owners.member_count, 1)
  103. self.assertEqual(self._mlist.moderators.member_count, 1)
  104. self.assertEqual(self._mlist.administrators.member_count, 2)
  105. self.assertEqual(self._mlist.members.member_count, 2)
  106. self.assertEqual(self._mlist.regular_members.member_count, 1)
  107. self.assertEqual(self._mlist.digest_members.member_count, 1)
  108. self.assertEqual(self._mlist.subscribers.member_count, 4)
  109. class TestMembershipsRoster(unittest.TestCase):
  110. """Test the memberships roster."""
  111. layer = ConfigLayer
  112. def setUp(self):
  113. self._ant = create_list('ant@example.com')
  114. self._bee = create_list('bee@example.com')
  115. user_manager = getUtility(IUserManager)
  116. self._anne = user_manager.make_user(
  117. 'anne@example.com', 'Anne Person')
  118. set_preferred(self._anne)
  119. def test_no_memberships(self):
  120. # An unsubscribed user has no memberships.
  121. self.assertEqual(self._anne.memberships.member_count, 0)
  122. self.assertIsNone(self._ant.members.get_member('anne@example.com'))
  123. self.assertEqual(
  124. self._ant.members.get_memberships('anne@example.com'),
  125. [])
  126. def test_subscriptions(self):
  127. # Anne subscribes to a couple of mailing lists.
  128. self._ant.subscribe(self._anne)
  129. self._bee.subscribe(self._anne)
  130. self.assertEqual(self._anne.memberships.member_count, 2)
  131. def test_subscribed_as_user(self):
  132. # Anne subscribes to a mailing list as a user and the member roster
  133. # contains her membership.
  134. self._ant.subscribe(self._anne)
  135. self.assertEqual(
  136. self._ant.members.get_member('anne@example.com').user,
  137. self._anne)
  138. memberships = self._ant.members.get_memberships('anne@example.com')
  139. self.assertEqual(
  140. [member.address.email for member in memberships],
  141. ['anne@example.com'])
  142. def test_subscribed_as_user_and_address(self):
  143. # Anne subscribes to a mailing list twice, once as a user and once
  144. # with an explicit address. She has two memberships.
  145. self._ant.subscribe(self._anne)
  146. self._ant.subscribe(self._anne.preferred_address)
  147. self.assertEqual(self._anne.memberships.member_count, 2)
  148. self.assertEqual(self._ant.members.member_count, 2)
  149. self.assertEqual(
  150. [member.address.email for member in self._ant.members.members],
  151. ['anne@example.com', 'anne@example.com'])
  152. # get_member() is defined to return the explicit address.
  153. member = self._ant.members.get_member('anne@example.com')
  154. subscriber = member.subscriber
  155. self.assertTrue(IAddress.providedBy(subscriber))
  156. self.assertFalse(IUser.providedBy(subscriber))
  157. # get_memberships() returns them all.
  158. memberships = self._ant.members.get_memberships('anne@example.com')
  159. self.assertEqual(len(memberships), 2)
  160. as_address = (memberships[0]
  161. if IAddress.providedBy(memberships[0].subscriber)
  162. else memberships[1])
  163. as_user = (memberships[1]
  164. if IUser.providedBy(memberships[1].subscriber)
  165. else memberships[0])
  166. self.assertEqual(as_address.subscriber, self._anne.preferred_address)
  167. self.assertEqual(as_user.subscriber, self._anne)
  168. # All the email addresses match.
  169. self.assertEqual(
  170. [record.address.email for record in memberships],
  171. ['anne@example.com', 'anne@example.com'])
  172. def test_memberships_users(self):
  173. self._ant.subscribe(self._anne)
  174. users = list(self._anne.memberships.users)
  175. self.assertEqual(len(users), 1)
  176. self.assertEqual(users[0], self._anne)
  177. class TestUserRoster(unittest.TestCase):
  178. """Test aspects of rosters when users are subscribed."""
  179. layer = ConfigLayer
  180. def setUp(self):
  181. self._mlist = create_list('ant@example.com')
  182. user_manager = getUtility(IUserManager)
  183. self._anne = user_manager.create_user('anne@example.com')
  184. self._bart = user_manager.create_user('bart@example.com')
  185. self._cris = user_manager.create_user('cris@example.com')
  186. self._dave = user_manager.create_user('dave@example.com')
  187. set_preferred(self._anne)
  188. set_preferred(self._bart)
  189. set_preferred(self._cris)
  190. set_preferred(self._dave)
  191. def test_narrow_get_member(self):
  192. # Ensure that when multiple users are subscribed to the same mailing
  193. # list via their preferred address, only the member in question is
  194. # returned from .get_member().
  195. self._mlist.subscribe(self._anne)
  196. self._mlist.subscribe(self._bart)
  197. self._mlist.subscribe(self._cris)
  198. self._mlist.subscribe(self._dave)
  199. member = self._mlist.members.get_member('bart@example.com')
  200. self.assertEqual(member.user, self._bart)