test_categoriestracker.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. from datetime import timedelta
  2. import pytest
  3. from django.utils import timezone
  4. from ...conf.test import override_dynamic_settings
  5. from ...threads.test import reply_thread
  6. from ..categoriestracker import make_read_aware
  7. from ..poststracker import save_read
  8. def remove_tracking(thread):
  9. thread.started_on = timezone.now() - timedelta(days=4)
  10. thread.save()
  11. thread.first_post.posted_on = thread.started_on
  12. thread.first_post.save()
  13. @pytest.fixture
  14. def read_thread(user, thread):
  15. save_read(user, thread.first_post)
  16. return thread
  17. def test_falsy_value_can_be_made_read_aware(request_mock):
  18. make_read_aware(request_mock, None)
  19. make_read_aware(request_mock, False)
  20. def test_empty_list_can_be_made_read_aware(request_mock):
  21. make_read_aware(request_mock, [])
  22. def test_empty_category_is_marked_as_read(request_mock, default_category):
  23. make_read_aware(request_mock, default_category)
  24. assert default_category.is_read
  25. assert not default_category.is_new
  26. def test_category_with_tracked_post_is_marked_as_read(
  27. request_mock, post, default_category
  28. ):
  29. make_read_aware(request_mock, default_category)
  30. assert not default_category.is_read
  31. assert default_category.is_new
  32. def test_category_with_post_older_than_user_is_marked_as_read(
  33. request_mock, post, default_category
  34. ):
  35. post.posted_on = timezone.now() - timedelta(days=1)
  36. post.save()
  37. make_read_aware(request_mock, default_category)
  38. assert default_category.is_read
  39. assert not default_category.is_new
  40. @override_dynamic_settings(readtracker_cutoff=3)
  41. def test_category_with_post_older_than_cutoff_is_marked_as_read(
  42. request_mock, user, post, default_category
  43. ):
  44. user.joined_on = timezone.now() - timedelta(days=5)
  45. user.save()
  46. post.posted_on = timezone.now() - timedelta(days=4)
  47. post.save()
  48. make_read_aware(request_mock, default_category)
  49. assert default_category.is_read
  50. assert not default_category.is_new
  51. def test_category_with_read_post_is_marked_as_read(
  52. request_mock, user, post, default_category
  53. ):
  54. save_read(user, post)
  55. make_read_aware(request_mock, default_category)
  56. assert default_category.is_read
  57. assert not default_category.is_new
  58. def test_category_with_post_in_thread_older_than_user_is_marked_as_unread(
  59. request_mock, thread, default_category
  60. ):
  61. remove_tracking(thread)
  62. reply_thread(thread)
  63. make_read_aware(request_mock, default_category)
  64. assert not default_category.is_read
  65. assert default_category.is_new
  66. def test_category_with_post_in_invisible_thread_is_marked_as_read(
  67. request_mock, hidden_thread, default_category
  68. ):
  69. reply_thread(hidden_thread)
  70. make_read_aware(request_mock, default_category)
  71. assert default_category.is_read
  72. assert not default_category.is_new
  73. def test_category_with_read_post_in_thread_older_than_user_is_marked_as_read(
  74. request_mock, user, thread, default_category
  75. ):
  76. remove_tracking(thread)
  77. post = reply_thread(thread)
  78. save_read(user, post)
  79. make_read_aware(request_mock, default_category)
  80. assert default_category.is_read
  81. assert not default_category.is_new
  82. def test_category_with_read_post_in_read_thread_is_marked_as_read(
  83. request_mock, user, read_thread, default_category
  84. ):
  85. post = reply_thread(read_thread)
  86. save_read(user, post)
  87. make_read_aware(request_mock, default_category)
  88. assert default_category.is_read
  89. assert not default_category.is_new
  90. def test_category_with_invisible_post_in_read_thread_is_marked_as_read(
  91. request_mock, user, read_thread, default_category
  92. ):
  93. reply_thread(read_thread, is_unapproved=True)
  94. make_read_aware(request_mock, default_category)
  95. assert default_category.is_read
  96. assert not default_category.is_new
  97. def test_category_with_new_event_in_read_thread_is_marked_as_unread(
  98. request_mock, read_thread, default_category
  99. ):
  100. reply_thread(read_thread, is_event=True)
  101. make_read_aware(request_mock, default_category)
  102. assert not default_category.is_read
  103. assert default_category.is_new
  104. def test_category_with_hidden_event_in_read_thread_is_marked_as_read(
  105. request_mock, read_thread, default_category
  106. ):
  107. reply_thread(read_thread, is_hidden=True, is_event=True)
  108. make_read_aware(request_mock, default_category)
  109. assert default_category.is_read
  110. assert not default_category.is_new
  111. def test_category_with_hidden_event_visible_to_user_in_read_thread_is_marked_as_unread(
  112. request_mock, read_thread, default_category
  113. ):
  114. request_mock.user_acl["categories"][default_category.id]["can_hide_events"] = 1
  115. reply_thread(read_thread, is_hidden=True, is_event=True)
  116. make_read_aware(request_mock, default_category)
  117. assert not default_category.is_read
  118. assert default_category.is_new
  119. def test_empty_category_is_marked_as_read_for_anonymous_user(
  120. anonymous_request_mock, default_category
  121. ):
  122. make_read_aware(anonymous_request_mock, default_category)
  123. assert default_category.is_read
  124. assert not default_category.is_new
  125. def test_category_with_tracked_thread_is_marked_as_read_for_anonymous_user(
  126. anonymous_request_mock, thread, default_category
  127. ):
  128. make_read_aware(anonymous_request_mock, default_category)
  129. assert default_category.is_read
  130. assert not default_category.is_new
  131. @override_dynamic_settings(readtracker_cutoff=3)
  132. def test_category_with_non_tracked_thread_is_marked_as_read_for_anonymous_user(
  133. anonymous_request_mock, thread, default_category
  134. ):
  135. remove_tracking(thread)
  136. make_read_aware(anonymous_request_mock, default_category)
  137. assert default_category.is_read
  138. assert not default_category.is_new