test_threadstracker.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from datetime import timedelta
  2. from django.utils import timezone
  3. from ...conf.test import override_dynamic_settings
  4. from ...threads.test import reply_thread
  5. from ..threadstracker import make_read_aware
  6. def remove_tracking(thread):
  7. thread.started_on = timezone.now() - timedelta(days=4)
  8. thread.save()
  9. thread.first_post.posted_on = thread.started_on
  10. thread.first_post.save()
  11. def test_falsy_value_can_be_made_read_aware(request_mock):
  12. make_read_aware(request_mock, None)
  13. make_read_aware(request_mock, False)
  14. def test_empty_list_can_be_made_read_aware(request_mock):
  15. make_read_aware(request_mock, [])
  16. def test_read_thread_is_marked_as_read(request_mock, read_thread):
  17. make_read_aware(request_mock, read_thread)
  18. assert read_thread.is_read
  19. assert not read_thread.is_new
  20. def test_read_thread_with_hidden_post_marked_as_unread(request_mock, read_thread):
  21. reply_thread(read_thread, is_hidden=True)
  22. make_read_aware(request_mock, read_thread)
  23. assert not read_thread.is_read
  24. assert read_thread.is_new
  25. def test_read_thread_with_invisible_post_marked_as_read(request_mock, read_thread):
  26. reply_thread(read_thread, is_unapproved=True)
  27. make_read_aware(request_mock, read_thread)
  28. assert read_thread.is_read
  29. assert not read_thread.is_new
  30. def test_read_thread_with_unread_post_marked_as_unread(request_mock, read_thread):
  31. reply_thread(read_thread)
  32. make_read_aware(request_mock, read_thread)
  33. assert not read_thread.is_read
  34. assert read_thread.is_new
  35. def test_untracked_thread_with_tracked_post_is_marked_as_unread(request_mock, thread):
  36. remove_tracking(thread)
  37. reply_thread(thread)
  38. make_read_aware(request_mock, thread)
  39. assert not thread.is_read
  40. assert thread.is_new
  41. def test_tracked_thread_is_marked_as_unread(request_mock, thread):
  42. make_read_aware(request_mock, thread)
  43. assert not thread.is_read
  44. assert thread.is_new
  45. def test_thread_with_post_older_than_user_is_marked_as_read(request_mock, thread, user):
  46. remove_tracking(thread)
  47. make_read_aware(request_mock, thread)
  48. assert thread.is_read
  49. assert not thread.is_new
  50. @override_dynamic_settings(readtracker_cutoff=3)
  51. def test_non_tracked_thread_is_marked_as_read(request_mock, thread, user):
  52. user.joined_on = timezone.now() - timedelta(days=10)
  53. user.save()
  54. remove_tracking(thread)
  55. make_read_aware(request_mock, thread)
  56. assert thread.is_read
  57. assert not thread.is_new
  58. def test_read_thread_with_new_event_is_marked_as_unread(request_mock, read_thread):
  59. reply_thread(read_thread, is_event=True)
  60. make_read_aware(request_mock, read_thread)
  61. assert not read_thread.is_read
  62. assert read_thread.is_new
  63. def test_read_thread_with_hidden_event_is_marked_as_read(request_mock, read_thread):
  64. reply_thread(read_thread, is_hidden=True, is_event=True)
  65. make_read_aware(request_mock, read_thread)
  66. assert read_thread.is_read
  67. assert not read_thread.is_new
  68. def test_read_thread_with_hidden_event_visible_to_user_is_marked_as_unread(
  69. request_mock, read_thread, default_category
  70. ):
  71. request_mock.user_acl["categories"][default_category.id]["can_hide_events"] = 1
  72. reply_thread(read_thread, is_hidden=True, is_event=True)
  73. make_read_aware(request_mock, read_thread)
  74. assert not read_thread.is_read
  75. assert read_thread.is_new
  76. def test_tracked_thread_is_marked_as_read_for_anonymous_user(
  77. anonymous_request_mock, thread
  78. ):
  79. make_read_aware(anonymous_request_mock, thread)
  80. assert thread.is_read
  81. assert not thread.is_new
  82. @override_dynamic_settings(readtracker_cutoff=3)
  83. def test_non_tracked_thread_is_marked_as_read_for_anonymous_user(
  84. anonymous_request_mock, thread
  85. ):
  86. remove_tracking(thread)
  87. make_read_aware(anonymous_request_mock, thread)
  88. assert thread.is_read
  89. assert not thread.is_new