test_anonymize_data.py 7.6 KB

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