test_anonymize_data.py 7.4 KB

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