test_thread_postlikes_api.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from django.urls import reverse
  2. from misago.core.utils import serialize_datetime
  3. from misago.threads import testutils
  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.assertEqual(response.status_code, 403)
  21. self.assertEqual(response.json(), {
  22. 'detail': "You can't see who liked this post.",
  23. })
  24. def test_no_permission_to_list(self):
  25. """api errors if user has no permission to see likes, but can see likes count"""
  26. self.override_acl({'can_see_posts_likes': 1})
  27. response = self.client.get(self.api_link)
  28. self.assertEqual(response.status_code, 403)
  29. self.assertEqual(response.json(), {
  30. 'detail': "You can't see who liked this post.",
  31. })
  32. def test_no_likes(self):
  33. """api returns empty list if post has no likes"""
  34. response = self.client.get(self.api_link)
  35. self.assertEqual(response.status_code, 200)
  36. self.assertEqual(response.json(), [])
  37. def test_likes(self):
  38. """api returns list of likes"""
  39. like = testutils.like_post(self.post, self.user)
  40. other_like = testutils.like_post(self.post, self.user)
  41. response = self.client.get(self.api_link)
  42. self.assertEqual(response.status_code, 200)
  43. self.assertEqual(
  44. response.json(), [
  45. {
  46. 'id': other_like.id,
  47. 'liked_on': serialize_datetime(other_like.liked_on),
  48. 'liker_id': self.user.id,
  49. 'username': self.user.username,
  50. 'avatars': self.user.avatars,
  51. 'url': self.user.get_absolute_url(),
  52. },
  53. {
  54. 'id': like.id,
  55. 'liked_on': serialize_datetime(like.liked_on),
  56. 'liker_id': self.user.id,
  57. 'username': self.user.username,
  58. 'avatars': self.user.avatars,
  59. 'url': self.user.get_absolute_url(),
  60. },
  61. ]
  62. )
  63. # api has no showstoppers for likes by deleted users
  64. like.liker = None
  65. like.save()
  66. other_like.liker = None
  67. other_like.save()
  68. response = self.client.get(self.api_link)
  69. self.assertEqual(response.status_code, 200)
  70. self.assertEqual(
  71. response.json(), [
  72. {
  73. 'id': other_like.id,
  74. 'liked_on': serialize_datetime(other_like.liked_on),
  75. 'liker_id': None,
  76. 'username': self.user.username,
  77. 'avatars': None,
  78. 'url': None,
  79. },
  80. {
  81. 'id': like.id,
  82. 'liked_on': serialize_datetime(like.liked_on),
  83. 'liker_id': None,
  84. 'username': self.user.username,
  85. 'avatars': None,
  86. 'url': None,
  87. },
  88. ]
  89. )