test_lists_views.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. from django.contrib.auth import get_user_model
  2. from django.urls import reverse
  3. from misago.acl.testutils import override_acl
  4. from misago.categories.models import Category
  5. from misago.threads.testutils import post_thread
  6. from misago.users.activepostersranking import build_active_posters_ranking
  7. from misago.users.models import Rank
  8. from misago.users.testutils import AuthenticatedUserTestCase
  9. UserModel = get_user_model()
  10. class UsersListTestCase(AuthenticatedUserTestCase):
  11. def setUp(self):
  12. super(UsersListTestCase, self).setUp()
  13. override_acl(self.user, {
  14. 'can_browse_users_list': 1,
  15. })
  16. class UsersListLanderTests(UsersListTestCase):
  17. def test_lander_no_permission(self):
  18. """lander returns 403 if user has no permission"""
  19. override_acl(self.user, {
  20. 'can_browse_users_list': 0,
  21. })
  22. response = self.client.get(reverse('misago:users'))
  23. self.assertEqual(response.status_code, 403)
  24. def test_lander_redirect(self):
  25. """lander returns redirect to valid page if user has permission"""
  26. response = self.client.get(reverse('misago:users'))
  27. self.assertEqual(response.status_code, 302)
  28. self.assertTrue(response['location'].endswith(reverse('misago:users-active-posters')))
  29. class ActivePostersTests(UsersListTestCase):
  30. def test_empty_active_posters_list(self):
  31. """empty active posters page has no showstoppers"""
  32. view_link = reverse('misago:users-active-posters')
  33. response = self.client.get(view_link)
  34. self.assertEqual(response.status_code, 200)
  35. def test_active_posters_list(self):
  36. """active posters page has no showstoppers"""
  37. category = Category.objects.get(slug='first-category')
  38. view_link = reverse('misago:users-active-posters')
  39. response = self.client.get(view_link)
  40. self.assertEqual(response.status_code, 200)
  41. # Create 50 test users and see if errors appeared
  42. for i in range(50):
  43. user = UserModel.objects.create_user(
  44. 'Bob%s' % i,
  45. 'm%s@te.com' % i,
  46. 'Pass.123',
  47. posts=12345,
  48. )
  49. post_thread(category, poster=user)
  50. build_active_posters_ranking()
  51. response = self.client.get(view_link)
  52. self.assertEqual(response.status_code, 200)
  53. class UsersRankTests(UsersListTestCase):
  54. def test_ranks(self):
  55. """ranks lists are handled correctly"""
  56. rank_user = UserModel.objects.create_user('Visible', 'visible@te.com', 'Pass.123')
  57. for rank in Rank.objects.iterator():
  58. rank_user.rank = rank
  59. rank_user.save()
  60. rank_link = reverse(
  61. 'misago:users-rank',
  62. kwargs={
  63. 'slug': rank.slug,
  64. },
  65. )
  66. response = self.client.get(rank_link)
  67. if rank.is_tab:
  68. self.assertEqual(response.status_code, 200)
  69. self.assertContains(response, rank_user.get_absolute_url())
  70. else:
  71. self.assertEqual(response.status_code, 404)
  72. def test_disabled_users(self):
  73. """ranks lists excludes disabled accounts"""
  74. rank_user = UserModel.objects.create_user(
  75. 'Visible',
  76. 'visible@te.com',
  77. 'Pass.123',
  78. is_active=False,
  79. )
  80. for rank in Rank.objects.iterator():
  81. rank_user.rank = rank
  82. rank_user.save()
  83. rank_link = reverse(
  84. 'misago:users-rank',
  85. kwargs={
  86. 'slug': rank.slug,
  87. },
  88. )
  89. response = self.client.get(rank_link)
  90. if rank.is_tab:
  91. self.assertEqual(response.status_code, 200)
  92. self.assertNotContains(response, rank_user.get_absolute_url())
  93. else:
  94. self.assertEqual(response.status_code, 404)
  95. def test_staff_see_disabled_users(self):
  96. """ranks lists shows disabled accounts for staff members"""
  97. self.user.is_staff = True
  98. self.user.save()
  99. rank_user = UserModel.objects.create_user(
  100. 'Visible',
  101. 'visible@te.com',
  102. 'Pass.123',
  103. is_active=False,
  104. )
  105. for rank in Rank.objects.iterator():
  106. rank_user.rank = rank
  107. rank_user.save()
  108. rank_link = reverse(
  109. 'misago:users-rank',
  110. kwargs={
  111. 'slug': rank.slug,
  112. },
  113. )
  114. response = self.client.get(rank_link)
  115. if rank.is_tab:
  116. self.assertEqual(response.status_code, 200)
  117. self.assertContains(response, rank_user.get_absolute_url())
  118. else:
  119. self.assertEqual(response.status_code, 404)