/src/postorius/tests/mailman_api_tests/test_list_summary.py

https://gitlab.com/msapiro/postorius · Python · 196 lines · 148 code · 20 blank · 28 comment · 0 complexity · e547b4abf4c5c4f7f178bdbb1f8f82fd MD5 · raw file

  1. # -*- coding: utf-8 -*-
  2. # Copyright (C) 2012-2019 by the Free Software Foundation, Inc.
  3. #
  4. # This file is part of Postorius.
  5. #
  6. # Postorius is free software: you can redistribute it and/or modify it under
  7. # the terms of the GNU General Public License as published by the Free
  8. # Software Foundation, either version 3 of the License, or (at your option)
  9. # any later version.
  10. # Postorius 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. # Postorius. If not, see <http://www.gnu.org/licenses/>.
  17. from django.contrib.auth.models import User
  18. from django.urls import reverse
  19. from allauth.account.models import EmailAddress
  20. from postorius.forms import ListAnonymousSubscribe
  21. from postorius.tests.utils import ViewTestCase
  22. class ListSummaryPageTest(ViewTestCase):
  23. """Tests for the list summary page.
  24. Tests accessiblity and existince of the submit form depending on
  25. login status.
  26. """
  27. def setUp(self):
  28. super(ListSummaryPageTest, self).setUp()
  29. self.domain = self.mm_client.create_domain('example.com')
  30. self.foo_list = self.domain.create_list('foo')
  31. self.user = User.objects.create_user(
  32. 'testuser', 'test@example.com', 'testpass')
  33. EmailAddress.objects.create(
  34. user=self.user, email=self.user.email, verified=True)
  35. def test_list_summary_logged_out(self):
  36. # Response must contain list obj and anonymous subscribe form.
  37. response = self.client.get(reverse('list_summary',
  38. args=('foo@example.com', )))
  39. self.assertEqual(response.status_code, 200)
  40. self.assertEqual(response.context['list'].fqdn_listname,
  41. 'foo@example.com')
  42. self.assertIsInstance(response.context['anonymous_subscription_form'],
  43. ListAnonymousSubscribe)
  44. self.assertContains(response, '<form ')
  45. def test_list_summary_logged_in(self):
  46. # Response must contain list obj and the form.
  47. self.client.login(username='testuser', password='testpass')
  48. response = self.client.get(reverse('list_summary',
  49. args=('foo@example.com', )))
  50. self.assertEqual(response.status_code, 200)
  51. self.assertContains(response, '<form ')
  52. self.assertContains(response, 'Subscribe')
  53. def test_pending_subscription_request(self):
  54. mlist = self.mm_client.get_list('foo@example.com')
  55. mlist.settings['subscription_policy'] = 'moderate'
  56. mlist.settings.save()
  57. mlist.subscribe('test@example.com',
  58. pre_verified=True,
  59. pre_confirmed=True)
  60. self.client.login(username='testuser', password='testpass')
  61. response = self.client.get(reverse('list_summary',
  62. args=('foo@example.com', )))
  63. self.assertEqual(response.status_code, 200)
  64. self.assertContains(response, 'You have a subscription request '
  65. 'pending. If you don\'t hear back soon, '
  66. 'please contact the list owners.')
  67. self.assertNotContains(response, 'Unsubscribe')
  68. self.assertNotContains(response, 'Subscribe')
  69. def test_unsubscribe_button_is_available(self):
  70. mlist = self.mm_client.get_list('foo@example.com')
  71. mlist.subscribe('test@example.com',
  72. pre_verified=True,
  73. pre_confirmed=True)
  74. self.client.login(username='testuser', password='testpass')
  75. response = self.client.get(reverse('list_summary',
  76. args=('foo@example.com', )))
  77. self.assertEqual(response.status_code, 200)
  78. self.assertContains(response, 'Unsubscribe')
  79. def test_list_summary_owner(self):
  80. # Response must contain the administration menu
  81. self.mm_client.create_user('test@example.com', None)
  82. mlist = self.mm_client.get_list('foo@example.com')
  83. mlist.add_owner('test@example.com')
  84. self.client.login(username='testuser', password='testpass')
  85. response = self.client.get(reverse('list_summary',
  86. args=('foo@example.com', )))
  87. self.assertContains(response, 'Delete</a>')
  88. def test_list_summary_moderator(self):
  89. # Response must contain the administration menu
  90. self.mm_client.create_user('test@example.com', None)
  91. mlist = self.mm_client.get_list('foo@example.com')
  92. mlist.add_moderator('test@example.com')
  93. self.client.login(username='testuser', password='testpass')
  94. response = self.client.get(reverse('list_summary',
  95. args=('foo@example.com', )))
  96. self.assertContains(response, 'Held messages')
  97. self.assertNotContains(response, 'Delete</a>')
  98. def test_list_summary_is_admin_secondary_owner(self):
  99. # Response must contain the administration menu
  100. EmailAddress.objects.create(
  101. user=self.user, email='anotheremail@example.com', verified=True)
  102. user = self.mm_client.create_user('test@example.com', None)
  103. address = user.add_address('anotheremail@example.com')
  104. address.verify()
  105. mlist = self.mm_client.get_list('foo@example.com')
  106. mlist.add_owner('anotheremail@example.com')
  107. self.client.login(username='testuser', password='testpass')
  108. response = self.client.get(reverse('list_summary',
  109. args=('foo@example.com', )))
  110. self.assertContains(response, 'Delete</a>')
  111. def test_list_summary_is_admin_secondary_moderator(self):
  112. # Response must contain the administration menu
  113. EmailAddress.objects.create(
  114. user=self.user, email='anotheremail@example.com', verified=True)
  115. user = self.mm_client.create_user('test@example.com', None)
  116. address = user.add_address('anotheremail@example.com')
  117. address.verify()
  118. mlist = self.mm_client.get_list('foo@example.com')
  119. mlist.add_moderator('anotheremail@example.com')
  120. self.client.login(username='testuser', password='testpass')
  121. response = self.client.get(reverse('list_summary',
  122. args=('foo@example.com', )))
  123. self.assertEqual(response.status_code, 200)
  124. self.assertContains(response, 'Held messages')
  125. self.assertNotContains(response, 'Delete</a>')
  126. def test_metrics_not_displayed_to_anonymous(self):
  127. response = self.client.get(reverse('list_summary',
  128. args=('foo@example.com',)))
  129. self.assertNotContains(response, 'List metrics')
  130. def test_list_metrics_not_displayed_to_moderator(self):
  131. mlist = self.mm_client.get_list('foo@example.com')
  132. mlist.add_moderator('test@example.com')
  133. self.client.login(username='testuser', password='testpass')
  134. response = self.client.get(reverse('list_summary',
  135. args=('foo@example.com',)))
  136. self.assertNotContains(response, 'List metrics')
  137. def test_list_metrics_displayed_to_owner(self):
  138. mlist = self.mm_client.get_list('foo@example.com')
  139. mlist.add_owner('test@example.com')
  140. self.client.login(username='testuser', password='testpass')
  141. response = self.client.get(reverse('list_summary',
  142. args=('foo@example.com',)))
  143. self.assertContains(response, 'List metrics')
  144. def test_list_metrics_displayed_to_superuser(self):
  145. user = User.objects.create_superuser(
  146. 'testadminuser', 'testadmin@example.com', 'testpass')
  147. EmailAddress.objects.create(
  148. user=user, email=user.email, verified=True)
  149. self.assertTrue(self.client.login(username='testadminuser',
  150. password='testpass'))
  151. response = self.client.get(reverse('list_summary',
  152. args=('foo@example.com',)))
  153. self.assertContains(response, 'List metrics')
  154. def test_list_info(self):
  155. # Test that list info is rendered as markdown.
  156. settings = self.mm_client.get_list('foo@example.com').settings
  157. info = 'Welcome To FooList today. This is something very interesting.'
  158. settings['info'] = info
  159. settings.save()
  160. response = self.client.get(reverse('list_summary',
  161. args=('foo@example.com',)))
  162. self.assertContains(response, info)
  163. settings['info'] = """\
  164. Welcome To Foolist
  165. ==================
  166. ```
  167. def function:
  168. print('Hello World')
  169. ```
  170. """
  171. settings.save()
  172. response = self.client.get(reverse('list_summary',
  173. args=('foo@example.com',)))
  174. self.assertContains(response, '<pre><code>def function:')