from datetime import timedelta from django.utils import timezone from ...conf.test import override_dynamic_settings from ...threads.test import reply_thread from ..threadstracker import make_read_aware def remove_tracking(thread): thread.started_on = timezone.now() - timedelta(days=4) thread.save() thread.first_post.posted_on = thread.started_on thread.first_post.save() def test_falsy_value_can_be_made_read_aware(request_mock): make_read_aware(request_mock, None) make_read_aware(request_mock, False) def test_empty_list_can_be_made_read_aware(request_mock): make_read_aware(request_mock, []) def test_read_thread_is_marked_as_read(request_mock, read_thread): make_read_aware(request_mock, read_thread) assert read_thread.is_read assert not read_thread.is_new def test_read_thread_with_hidden_post_marked_as_unread(request_mock, read_thread): reply_thread(read_thread, is_hidden=True) make_read_aware(request_mock, read_thread) assert not read_thread.is_read assert read_thread.is_new def test_read_thread_with_invisible_post_marked_as_read(request_mock, read_thread): reply_thread(read_thread, is_unapproved=True) make_read_aware(request_mock, read_thread) assert read_thread.is_read assert not read_thread.is_new def test_read_thread_with_unread_post_marked_as_unread(request_mock, read_thread): reply_thread(read_thread) make_read_aware(request_mock, read_thread) assert not read_thread.is_read assert read_thread.is_new def test_untracked_thread_with_tracked_post_is_marked_as_unread(request_mock, thread): remove_tracking(thread) reply_thread(thread) make_read_aware(request_mock, thread) assert not thread.is_read assert thread.is_new def test_tracked_thread_is_marked_as_unread(request_mock, thread): make_read_aware(request_mock, thread) assert not thread.is_read assert thread.is_new def test_thread_with_post_older_than_user_is_marked_as_read(request_mock, thread, user): remove_tracking(thread) make_read_aware(request_mock, thread) assert thread.is_read assert not thread.is_new @override_dynamic_settings(readtracker_cutoff=3) def test_non_tracked_thread_is_marked_as_read(request_mock, thread, user): user.joined_on = timezone.now() - timedelta(days=10) user.save() remove_tracking(thread) make_read_aware(request_mock, thread) assert thread.is_read assert not thread.is_new def test_read_thread_with_new_event_is_marked_as_unread(request_mock, read_thread): reply_thread(read_thread, is_event=True) make_read_aware(request_mock, read_thread) assert not read_thread.is_read assert read_thread.is_new def test_read_thread_with_hidden_event_is_marked_as_read(request_mock, read_thread): reply_thread(read_thread, is_hidden=True, is_event=True) make_read_aware(request_mock, read_thread) assert read_thread.is_read assert not read_thread.is_new def test_read_thread_with_hidden_event_visible_to_user_is_marked_as_unread( request_mock, read_thread, default_category ): request_mock.user_acl["categories"][default_category.id]["can_hide_events"] = 1 reply_thread(read_thread, is_hidden=True, is_event=True) make_read_aware(request_mock, read_thread) assert not read_thread.is_read assert read_thread.is_new def test_tracked_thread_is_marked_as_read_for_anonymous_user( anonymous_request_mock, thread ): make_read_aware(anonymous_request_mock, thread) assert thread.is_read assert not thread.is_new @override_dynamic_settings(readtracker_cutoff=3) def test_non_tracked_thread_is_marked_as_read_for_anonymous_user( anonymous_request_mock, thread ): remove_tracking(thread) make_read_aware(anonymous_request_mock, thread) assert thread.is_read assert not thread.is_new