test_anonymize_data.py 8.0 KB

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