test_anonymize_data.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. from django.contrib.auth import get_user_model
  2. from django.test import RequestFactory
  3. from django.urls import reverse
  4. from misago.cache.versions import get_cache_versions
  5. from misago.categories.models import Category
  6. from misago.conf.dynamicsettings import DynamicSettings
  7. from misago.users.testutils import AuthenticatedUserTestCase
  8. from misago.threads import testutils
  9. from misago.threads.api.postendpoints.patch_post import patch_is_liked
  10. from misago.threads.models import Post
  11. from misago.threads.participants import (
  12. add_participant,
  13. change_owner,
  14. make_participants_aware,
  15. remove_participant,
  16. set_owner,
  17. )
  18. UserModel = get_user_model()
  19. def get_mock_user():
  20. seed = UserModel.objects.count() + 1
  21. return UserModel.objects.create_user(
  22. "bob%s" % seed, "user%s@test.com" % seed, "Pass.123"
  23. )
  24. class AnonymizeEventsTests(AuthenticatedUserTestCase):
  25. def setUp(self):
  26. super().setUp()
  27. self.factory = RequestFactory()
  28. category = Category.objects.get(slug="first-category")
  29. self.thread = testutils.post_thread(category)
  30. def get_request(self, user=None):
  31. request = self.factory.get("/customer/details")
  32. request.user = user or self.user
  33. request.user_ip = "127.0.0.1"
  34. request.cache_versions = get_cache_versions()
  35. request.settings = DynamicSettings(request.cache_versions)
  36. request.include_frontend_context = False
  37. request.frontend_context = {}
  38. return request
  39. def test_anonymize_changed_owner_event(self):
  40. """changed owner event is anonymized by user.anonymize_data"""
  41. user = get_mock_user()
  42. request = self.get_request()
  43. set_owner(self.thread, self.user)
  44. make_participants_aware(self.user, self.thread)
  45. change_owner(request, self.thread, user)
  46. user.anonymize_data()
  47. event = Post.objects.get(event_type="changed_owner")
  48. self.assertEqual(
  49. event.event_context,
  50. {
  51. "user": {
  52. "id": None,
  53. "username": user.username,
  54. "url": reverse("misago:index"),
  55. }
  56. },
  57. )
  58. def test_anonymize_added_participant_event(self):
  59. """added participant event is anonymized by user.anonymize_data"""
  60. user = get_mock_user()
  61. request = self.get_request()
  62. set_owner(self.thread, self.user)
  63. make_participants_aware(self.user, self.thread)
  64. add_participant(request, self.thread, user)
  65. user.anonymize_data()
  66. event = Post.objects.get(event_type="added_participant")
  67. self.assertEqual(
  68. event.event_context,
  69. {
  70. "user": {
  71. "id": None,
  72. "username": user.username,
  73. "url": reverse("misago:index"),
  74. }
  75. },
  76. )
  77. def test_anonymize_owner_left_event(self):
  78. """owner left event is anonymized by user.anonymize_data"""
  79. user = get_mock_user()
  80. request = self.get_request(user)
  81. set_owner(self.thread, user)
  82. make_participants_aware(user, self.thread)
  83. add_participant(request, self.thread, self.user)
  84. make_participants_aware(user, self.thread)
  85. remove_participant(request, self.thread, user)
  86. user.anonymize_data()
  87. event = Post.objects.get(event_type="owner_left")
  88. self.assertEqual(
  89. event.event_context,
  90. {
  91. "user": {
  92. "id": None,
  93. "username": user.username,
  94. "url": reverse("misago:index"),
  95. }
  96. },
  97. )
  98. def test_anonymize_removed_owner_event(self):
  99. """removed owner event is anonymized by user.anonymize_data"""
  100. user = get_mock_user()
  101. request = self.get_request()
  102. set_owner(self.thread, user)
  103. make_participants_aware(user, self.thread)
  104. add_participant(request, self.thread, self.user)
  105. make_participants_aware(user, self.thread)
  106. remove_participant(request, self.thread, user)
  107. user.anonymize_data()
  108. event = Post.objects.get(event_type="removed_owner")
  109. self.assertEqual(
  110. event.event_context,
  111. {
  112. "user": {
  113. "id": None,
  114. "username": user.username,
  115. "url": reverse("misago:index"),
  116. }
  117. },
  118. )
  119. def test_anonymize_participant_left_event(self):
  120. """participant left event is anonymized by user.anonymize_data"""
  121. user = get_mock_user()
  122. request = self.get_request(user)
  123. set_owner(self.thread, self.user)
  124. make_participants_aware(user, self.thread)
  125. add_participant(request, self.thread, user)
  126. make_participants_aware(user, self.thread)
  127. remove_participant(request, self.thread, user)
  128. user.anonymize_data()
  129. event = Post.objects.get(event_type="participant_left")
  130. self.assertEqual(
  131. event.event_context,
  132. {
  133. "user": {
  134. "id": None,
  135. "username": user.username,
  136. "url": reverse("misago:index"),
  137. }
  138. },
  139. )
  140. def test_anonymize_removed_participant_event(self):
  141. """removed participant event is anonymized by user.anonymize_data"""
  142. user = get_mock_user()
  143. request = self.get_request()
  144. set_owner(self.thread, self.user)
  145. make_participants_aware(self.user, self.thread)
  146. add_participant(request, self.thread, user)
  147. make_participants_aware(self.user, self.thread)
  148. remove_participant(request, self.thread, user)
  149. user.anonymize_data()
  150. event = Post.objects.get(event_type="removed_participant")
  151. self.assertEqual(
  152. event.event_context,
  153. {
  154. "user": {
  155. "id": None,
  156. "username": user.username,
  157. "url": reverse("misago:index"),
  158. }
  159. },
  160. )
  161. class AnonymizeLikesTests(AuthenticatedUserTestCase):
  162. def setUp(self):
  163. super().setUp()
  164. self.factory = RequestFactory()
  165. def get_request(self, user=None):
  166. request = self.factory.get("/customer/details")
  167. request.user = user or self.user
  168. request.user_ip = "127.0.0.1"
  169. return request
  170. def test_anonymize_user_likes(self):
  171. """post's last like is anonymized by user.anonymize_data"""
  172. category = Category.objects.get(slug="first-category")
  173. thread = testutils.post_thread(category)
  174. post = testutils.reply_thread(thread)
  175. post.acl = {"can_like": True}
  176. user = get_mock_user()
  177. patch_is_liked(self.get_request(self.user), post, 1)
  178. patch_is_liked(self.get_request(user), post, 1)
  179. user.anonymize_data()
  180. last_likes = Post.objects.get(pk=post.pk).last_likes
  181. self.assertEqual(
  182. last_likes,
  183. [
  184. {"id": None, "username": user.username},
  185. {"id": self.user.id, "username": self.user.username},
  186. ],
  187. )
  188. class AnonymizePostsTests(AuthenticatedUserTestCase):
  189. def setUp(self):
  190. super().setUp()
  191. self.factory = RequestFactory()
  192. def get_request(self, user=None):
  193. request = self.factory.get("/customer/details")
  194. request.user = user or self.user
  195. request.user_ip = "127.0.0.1"
  196. return request
  197. def test_anonymize_user_posts(self):
  198. """post is anonymized by user.anonymize_data"""
  199. category = Category.objects.get(slug="first-category")
  200. thread = testutils.post_thread(category)
  201. user = get_mock_user()
  202. post = testutils.reply_thread(thread, poster=user)
  203. user.anonymize_data()
  204. anonymized_post = Post.objects.get(pk=post.pk)
  205. self.assertTrue(anonymized_post.is_valid)