test_lists_views.py 4.5 KB

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