test_poststracker.py 3.1 KB

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