test_anonymize_data.py 7.6 KB

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