test_thread_postread_api.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from django.urls import reverse
  2. from django.utils import timezone
  3. from misago.threads import test
  4. from .test_threads_api import ThreadsApiTestCase
  5. class PostReadApiTests(ThreadsApiTestCase):
  6. def setUp(self):
  7. super().setUp()
  8. self.post = test.reply_thread(
  9. self.thread, poster=self.user, posted_on=timezone.now()
  10. )
  11. self.api_link = reverse(
  12. "misago:api:thread-post-read",
  13. kwargs={"thread_pk": self.thread.pk, "pk": self.post.pk},
  14. )
  15. def test_read_anonymous(self):
  16. """api validates if reading user is authenticated"""
  17. self.logout_user()
  18. response = self.client.post(self.api_link)
  19. self.assertEqual(response.status_code, 403)
  20. self.assertEqual(
  21. response.json(), {"detail": "This action is not available to guests."}
  22. )
  23. def test_read_post(self):
  24. """api marks post as read"""
  25. response = self.client.post(self.api_link)
  26. self.assertEqual(response.status_code, 200)
  27. self.assertEqual(self.user.postread_set.count(), 1)
  28. self.user.postread_set.get(post=self.post)
  29. # one post read, first post is still unread
  30. self.assertFalse(response.json()["thread_is_read"])
  31. # read second post
  32. response = self.client.post(
  33. reverse(
  34. "misago:api:thread-post-read",
  35. kwargs={"thread_pk": self.thread.pk, "pk": self.thread.first_post.pk},
  36. )
  37. )
  38. self.assertEqual(response.status_code, 200)
  39. self.assertEqual(self.user.postread_set.count(), 2)
  40. self.user.postread_set.get(post=self.thread.first_post)
  41. # both posts are read
  42. self.assertTrue(response.json()["thread_is_read"])
  43. def test_read_subscribed_thread_post(self):
  44. """api marks post as read and updates subscription"""
  45. self.thread.subscription_set.create(
  46. user=self.user,
  47. thread=self.thread,
  48. category=self.thread.category,
  49. last_read_on=self.thread.post_set.order_by("id").first().posted_on,
  50. )
  51. response = self.client.post(self.api_link)
  52. self.assertEqual(response.status_code, 200)
  53. subscription = self.thread.subscription_set.order_by("id").last()
  54. self.assertEqual(subscription.last_read_on, self.post.posted_on)