test_lists_views.py 4.7 KB

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