test_profile_views.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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 import testutils
  6. from misago.users.models import Ban
  7. from misago.users.testutils import AuthenticatedUserTestCase, create_test_user
  8. UserModel = get_user_model()
  9. class UserProfileViewsTests(AuthenticatedUserTestCase):
  10. def setUp(self):
  11. super().setUp()
  12. self.link_kwargs = {"slug": self.user.slug, "pk": self.user.pk}
  13. self.category = Category.objects.get(slug="first-category")
  14. def test_outdated_slugs(self):
  15. """user profile view redirects to valid slug"""
  16. response = self.client.get(
  17. reverse("misago:user-posts", kwargs={"slug": "baww", "pk": self.user.pk})
  18. )
  19. self.assertEqual(response.status_code, 301)
  20. def test_user_disabled(self):
  21. """disabled user's profile returns 404 for non-admins"""
  22. self.user.is_staff = False
  23. self.user.save()
  24. test_user = create_test_user("Tyrael", "t123@test.com")
  25. test_user.is_active = False
  26. test_user.save()
  27. response = self.client.get(test_user.get_absolute_url())
  28. self.assertEqual(response.status_code, 404)
  29. self.user.is_staff = True
  30. self.user.save()
  31. response = self.client.get(test_user.get_absolute_url())
  32. self.assertEqual(response.status_code, 302)
  33. # profile page displays notice about user being disabled
  34. response = self.client.get(response["location"])
  35. self.assertContains(response, "account has been disabled")
  36. def test_user_posts_list(self):
  37. """user profile posts list has no showstoppers"""
  38. link = reverse("misago:user-posts", kwargs=self.link_kwargs)
  39. response = self.client.get(link)
  40. self.assertEqual(response.status_code, 200)
  41. self.assertContains(response, "You have posted no messages")
  42. thread = testutils.post_thread(category=self.category, poster=self.user)
  43. response = self.client.get(link)
  44. self.assertEqual(response.status_code, 200)
  45. self.assertContains(response, thread.get_absolute_url())
  46. post = testutils.reply_thread(thread, poster=self.user)
  47. other_post = testutils.reply_thread(thread, poster=self.user)
  48. response = self.client.get(link)
  49. self.assertEqual(response.status_code, 200)
  50. self.assertContains(response, post.get_absolute_url())
  51. self.assertContains(response, other_post.get_absolute_url())
  52. def test_user_threads_list(self):
  53. """user profile threads list has no showstoppers"""
  54. link = reverse("misago:user-threads", kwargs=self.link_kwargs)
  55. response = self.client.get(link)
  56. self.assertEqual(response.status_code, 200)
  57. self.assertContains(response, "You have no started threads.")
  58. thread = testutils.post_thread(category=self.category, poster=self.user)
  59. response = self.client.get(link)
  60. self.assertEqual(response.status_code, 200)
  61. self.assertContains(response, thread.get_absolute_url())
  62. post = testutils.reply_thread(thread, poster=self.user)
  63. other_post = testutils.reply_thread(thread, poster=self.user)
  64. response = self.client.get(link)
  65. self.assertEqual(response.status_code, 200)
  66. self.assertNotContains(response, post.get_absolute_url())
  67. self.assertNotContains(response, other_post.get_absolute_url())
  68. def test_user_followers(self):
  69. """user profile followers list has no showstoppers"""
  70. response = self.client.get(
  71. reverse("misago:user-followers", kwargs=self.link_kwargs)
  72. )
  73. self.assertEqual(response.status_code, 200)
  74. self.assertContains(response, "You have no followers.")
  75. followers = []
  76. for i in range(10):
  77. user_data = ("Follower%s" % i, "foll%s@test.com" % i, "Pass.123")
  78. followers.append(UserModel.objects.create_user(*user_data))
  79. self.user.followed_by.add(followers[-1])
  80. response = self.client.get(
  81. reverse("misago:user-followers", kwargs=self.link_kwargs)
  82. )
  83. self.assertEqual(response.status_code, 200)
  84. for i in range(10):
  85. self.assertContains(response, "Follower%s" % i)
  86. def test_user_follows(self):
  87. """user profile follows list has no showstoppers"""
  88. response = self.client.get(
  89. reverse("misago:user-follows", kwargs=self.link_kwargs)
  90. )
  91. self.assertEqual(response.status_code, 200)
  92. self.assertContains(response, "You are not following any users.")
  93. followers = []
  94. for i in range(10):
  95. user_data = ("Follower%s" % i, "foll%s@test.com" % i, "Pass.123")
  96. followers.append(UserModel.objects.create_user(*user_data))
  97. followers[-1].followed_by.add(self.user)
  98. response = self.client.get(
  99. reverse("misago:user-follows", kwargs=self.link_kwargs)
  100. )
  101. self.assertEqual(response.status_code, 200)
  102. for i in range(10):
  103. self.assertContains(response, "Follower%s" % i)
  104. def test_user_details(self):
  105. """user details page has no showstoppers"""
  106. response = self.client.get(
  107. reverse("misago:user-details", kwargs=self.link_kwargs)
  108. )
  109. self.assertEqual(response.status_code, 200)
  110. def test_username_history_list(self):
  111. """user name changes history list has no showstoppers"""
  112. response = self.client.get(
  113. reverse("misago:username-history", kwargs=self.link_kwargs)
  114. )
  115. self.assertEqual(response.status_code, 200)
  116. self.assertContains(response, "Your username was never changed.")
  117. self.user.set_username("RenamedAdmin")
  118. self.user.save()
  119. self.user.set_username("TestUser")
  120. self.user.save()
  121. response = self.client.get(
  122. reverse("misago:username-history", kwargs=self.link_kwargs)
  123. )
  124. self.assertEqual(response.status_code, 200)
  125. self.assertContains(response, "TestUser")
  126. self.assertContains(response, "RenamedAdmin")
  127. def test_user_ban_details(self):
  128. """user ban details page has no showstoppers"""
  129. test_user = create_test_user("Bob", "bob@bob.com", "pass.123")
  130. link_kwargs = {"slug": test_user.slug, "pk": test_user.pk}
  131. with patch_user_acl({"can_see_ban_details": 0}):
  132. response = self.client.get(reverse("misago:user-ban", kwargs=link_kwargs))
  133. self.assertEqual(response.status_code, 404)
  134. with patch_user_acl({"can_see_ban_details": 1}):
  135. response = self.client.get(reverse("misago:user-ban", kwargs=link_kwargs))
  136. self.assertEqual(response.status_code, 404)
  137. Ban.objects.create(
  138. banned_value=test_user.username,
  139. user_message="User m3ss4ge.",
  140. staff_message="Staff m3ss4ge.",
  141. is_checked=True,
  142. )
  143. test_user.ban_cache.delete()
  144. with patch_user_acl({"can_see_ban_details": 1}):
  145. response = self.client.get(reverse("misago:user-ban", kwargs=link_kwargs))
  146. self.assertEqual(response.status_code, 200)
  147. self.assertContains(response, "User m3ss4ge")
  148. self.assertContains(response, "Staff m3ss4ge")