test_thread_postlikes_api.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from django.urls import reverse
  2. from misago.threads import testutils
  3. from misago.threads.serializers import PostLikeSerializer
  4. from .test_threads_api import ThreadsApiTestCase
  5. class ThreadPostLikesApiTestCase(ThreadsApiTestCase):
  6. def setUp(self):
  7. super(ThreadPostLikesApiTestCase, self).setUp()
  8. self.post = testutils.reply_thread(self.thread, poster=self.user)
  9. self.api_link = reverse(
  10. 'misago:api:thread-post-likes',
  11. kwargs={
  12. 'thread_pk': self.thread.pk,
  13. 'pk': self.post.pk,
  14. }
  15. )
  16. def test_no_permission(self):
  17. """api errors if user has no permission to see likes"""
  18. self.override_acl({'can_see_posts_likes': 0})
  19. response = self.client.get(self.api_link)
  20. self.assertContains(response, "You can't see who liked this post.", status_code=403)
  21. def test_no_permission_to_list(self):
  22. """api errors if user has no permission to see likes, but can see likes count"""
  23. self.override_acl({'can_see_posts_likes': 1})
  24. response = self.client.get(self.api_link)
  25. self.assertContains(response, "You can't see who liked this post.", status_code=403)
  26. def test_no_likes(self):
  27. """api returns empty list if post has no likes"""
  28. response = self.client.get(self.api_link)
  29. self.assertEqual(response.status_code, 200)
  30. self.assertEqual(response.json(), [])
  31. def test_likes(self):
  32. """api returns list of likes"""
  33. like = testutils.like_post(self.post, self.user)
  34. other_like = testutils.like_post(self.post, self.user)
  35. response = self.client.get(self.api_link)
  36. self.assertEqual(response.status_code, 200)
  37. self.assertEqual(
  38. response.json(), [
  39. PostLikeSerializer({
  40. 'id': other_like.id,
  41. 'liked_on': other_like.liked_on,
  42. 'liker_id': other_like.liker_id,
  43. 'liker_name': other_like.liker_name,
  44. 'liker_slug': other_like.liker_slug,
  45. 'liker__avatars': self.user.avatars,
  46. }).data,
  47. PostLikeSerializer({
  48. 'id': like.id,
  49. 'liked_on': like.liked_on,
  50. 'liker_id': like.liker_id,
  51. 'liker_name': like.liker_name,
  52. 'liker_slug': like.liker_slug,
  53. 'liker__avatars': self.user.avatars,
  54. }).data,
  55. ]
  56. )
  57. # api has no showstoppers for likes by deleted users
  58. like.liker = None
  59. like.save()
  60. other_like.liker = None
  61. other_like.save()
  62. response = self.client.get(self.api_link)
  63. self.assertEqual(response.status_code, 200)
  64. self.assertEqual(
  65. response.json(), [
  66. PostLikeSerializer({
  67. 'id': other_like.id,
  68. 'liked_on': other_like.liked_on,
  69. 'liker_id': other_like.liker_id,
  70. 'liker_name': other_like.liker_name,
  71. 'liker_slug': other_like.liker_slug,
  72. 'liker__avatars': None,
  73. }).data,
  74. PostLikeSerializer({
  75. 'id': like.id,
  76. 'liked_on': like.liked_on,
  77. 'liker_id': like.liker_id,
  78. 'liker_name': like.liker_name,
  79. 'liker_slug': like.liker_slug,
  80. 'liker__avatars': None,
  81. }).data,
  82. ]
  83. )