PageRenderTime 35ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/src/mailman/model/tests/test_member.py

https://gitlab.com/noc0lour/mailman
Python | 123 lines | 77 code | 13 blank | 33 comment | 0 complexity | d13f03386f6a9ec255f15fd2688a66eb MD5 | raw file
  1. # Copyright (C) 2011-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 members."""
  18. import unittest
  19. from mailman.app.lifecycle import create_list
  20. from mailman.interfaces.action import Action
  21. from mailman.interfaces.member import MemberRole, MembershipError
  22. from mailman.interfaces.user import UnverifiedAddressError
  23. from mailman.interfaces.usermanager import IUserManager
  24. from mailman.model.member import Member
  25. from mailman.testing.helpers import set_preferred
  26. from mailman.testing.layers import ConfigLayer
  27. from mailman.utilities.datetime import now
  28. from zope.component import getUtility
  29. class TestMember(unittest.TestCase):
  30. layer = ConfigLayer
  31. def setUp(self):
  32. self._mlist = create_list('test@example.com')
  33. self._usermanager = getUtility(IUserManager)
  34. def test_cannot_set_address_with_preferred_address_subscription(self):
  35. # A user is subscribed to a mailing list with their preferred address.
  36. # You cannot set the `address` attribute on such IMembers.
  37. anne = self._usermanager.create_user('anne@example.com')
  38. set_preferred(anne)
  39. # Subscribe with the IUser object, not the address. This makes Anne a
  40. # member via her preferred address.
  41. member = self._mlist.subscribe(anne)
  42. new_address = anne.register('aperson@example.com')
  43. new_address.verified_on = now()
  44. self.assertRaises(MembershipError,
  45. setattr, member, 'address', new_address)
  46. def test_cannot_change_to_unverified_address(self):
  47. # A user is subscribed to a mailing list with an explicit address.
  48. # You cannot set the `address` attribute to an unverified address.
  49. anne = self._usermanager.create_user('anne@example.com')
  50. address = list(anne.addresses)[0]
  51. member = self._mlist.subscribe(address)
  52. new_address = anne.register('aperson@example.com')
  53. # The new address is not verified.
  54. self.assertRaises(UnverifiedAddressError,
  55. setattr, member, 'address', new_address)
  56. def test_cannot_change_to_address_uncontrolled_address(self):
  57. # A user tries to change their subscription to an address they do not
  58. # control.
  59. anne = self._usermanager.create_user('anne@example.com')
  60. address = list(anne.addresses)[0]
  61. member = self._mlist.subscribe(address)
  62. new_address = self._usermanager.create_address('nobody@example.com')
  63. new_address.verified_on = now()
  64. # The new address is not verified.
  65. self.assertRaises(MembershipError,
  66. setattr, member, 'address', new_address)
  67. def test_cannot_change_to_address_controlled_by_other_user(self):
  68. # A user tries to change their subscription to an address some other
  69. # user controls.
  70. anne = self._usermanager.create_user('anne@example.com')
  71. anne_address = list(anne.addresses)[0]
  72. bart = self._usermanager.create_user('bart@example.com')
  73. bart_address = list(bart.addresses)[0]
  74. bart_address.verified_on = now()
  75. member = self._mlist.subscribe(anne_address)
  76. # The new address is not verified.
  77. self.assertRaises(MembershipError,
  78. setattr, member, 'address', bart_address)
  79. def test_member_ctor_value_error(self):
  80. # ValueError when passing in anything but a user or address.
  81. self.assertRaises(ValueError, Member, MemberRole.member,
  82. self._mlist.list_id,
  83. 'aperson@example.com')
  84. def test_unsubscribe(self):
  85. address = self._usermanager.create_address('anne@example.com')
  86. address.verified_on = now()
  87. self._mlist.subscribe(address)
  88. self.assertEqual(len(list(self._mlist.members.members)), 1)
  89. member = self._mlist.members.get_member('anne@example.com')
  90. member.unsubscribe()
  91. self.assertEqual(len(list(self._mlist.members.members)), 0)
  92. def test_default_moderation_action(self):
  93. # Owners and moderators have their posts accepted, members and
  94. # nonmembers default to the mailing list's action for their type.
  95. anne = self._usermanager.create_user('anne@example.com')
  96. bart = self._usermanager.create_user('bart@example.com')
  97. cris = self._usermanager.create_user('cris@example.com')
  98. dana = self._usermanager.create_user('dana@example.com')
  99. set_preferred(anne)
  100. set_preferred(bart)
  101. set_preferred(cris)
  102. set_preferred(dana)
  103. anne_member = self._mlist.subscribe(anne, MemberRole.owner)
  104. bart_member = self._mlist.subscribe(bart, MemberRole.moderator)
  105. cris_member = self._mlist.subscribe(cris, MemberRole.member)
  106. dana_member = self._mlist.subscribe(dana, MemberRole.nonmember)
  107. self.assertEqual(anne_member.moderation_action, Action.accept)
  108. self.assertEqual(bart_member.moderation_action, Action.accept)
  109. self.assertIsNone(cris_member.moderation_action)
  110. self.assertIsNone(dana_member.moderation_action)