test_lists_views.py 4.6 KB

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