test_poststracker.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from datetime import timedelta
  2. from django.test import TestCase
  3. from django.utils import timezone
  4. from ...categories.models import Category
  5. from ...conf import settings
  6. from ...threads import test
  7. from ...users.test import create_test_user
  8. from ..models import PostRead
  9. from ..poststracker import make_read_aware, save_read
  10. class AnonymousUser:
  11. is_authenticated = False
  12. is_anonymous = True
  13. class PostsTrackerTests(TestCase):
  14. def setUp(self):
  15. self.user = create_test_user("User", "user@example.com")
  16. self.category = Category.objects.get(slug="first-category")
  17. self.thread = test.post_thread(self.category)
  18. def test_falsy_value(self):
  19. """passing falsy value to readtracker causes no errors"""
  20. make_read_aware(self.user, None)
  21. make_read_aware(self.user, False)
  22. make_read_aware(self.user, [])
  23. def test_anon_post_before_cutoff(self):
  24. """non-tracked post is marked as read for anonymous users"""
  25. posted_on = timezone.now() - timedelta(days=settings.MISAGO_READTRACKER_CUTOFF)
  26. post = test.reply_thread(self.thread, posted_on=posted_on)
  27. make_read_aware(AnonymousUser(), post)
  28. self.assertTrue(post.is_read)
  29. self.assertFalse(post.is_new)
  30. def test_anon_post_after_cutoff(self):
  31. """tracked post is marked as read for anonymous users"""
  32. post = test.reply_thread(self.thread, posted_on=timezone.now())
  33. make_read_aware(AnonymousUser(), post)
  34. self.assertTrue(post.is_read)
  35. self.assertFalse(post.is_new)
  36. def test_user_post_before_cutoff(self):
  37. """untracked post is marked as read for authenticated users"""
  38. posted_on = timezone.now() - timedelta(days=settings.MISAGO_READTRACKER_CUTOFF)
  39. post = test.reply_thread(self.thread, posted_on=posted_on)
  40. make_read_aware(self.user, post)
  41. self.assertTrue(post.is_read)
  42. self.assertFalse(post.is_new)
  43. def test_user_unread_post(self):
  44. """tracked post is marked as unread for authenticated users"""
  45. post = test.reply_thread(self.thread, posted_on=timezone.now())
  46. make_read_aware(self.user, post)
  47. self.assertFalse(post.is_read)
  48. self.assertTrue(post.is_new)
  49. def test_user_created_after_post(self):
  50. """tracked post older than user is marked as read"""
  51. posted_on = timezone.now() - timedelta(days=1)
  52. post = test.reply_thread(self.thread, posted_on=posted_on)
  53. make_read_aware(self.user, post)
  54. self.assertTrue(post.is_read)
  55. self.assertFalse(post.is_new)
  56. def test_user_read_post(self):
  57. """tracked post is marked as read for authenticated users with read entry"""
  58. post = test.reply_thread(self.thread, posted_on=timezone.now())
  59. save_read(self.user, post)
  60. make_read_aware(self.user, post)
  61. self.assertTrue(post.is_read)
  62. self.assertFalse(post.is_new)