test_lists_views.py 4.5 KB

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