def test_read_root_category(self): """read_category reads its subcategories for user""" root_category = Category.objects.root_category() categoriestracker.read_category(self.user, root_category) child_read = self.user.categoryread_set.get(category=self.category) self.assertTrue(child_read.last_read_on > timezone.now() - timedelta(seconds=3))
def read_private_threads(user): category = Category.objects.private_threads() read_category(user, category) user.sync_unread_private_threads = False user.unread_private_threads = 0 user.save(update_fields=['sync_unread_private_threads', 'unread_private_threads'])
def read_private_threads(user): category = Category.objects.private_threads() read_category(user, category) user.sync_unread_private_threads = False user.unread_private_threads = 0 user.save(update_fields=["sync_unread_private_threads", "unread_private_threads"])
def test_read_root_category(self): """read_category reads category and its subcategories for user""" root_category = Category.objects.root_category() categoriestracker.read_category(self.user, root_category) root_read = self.user.categoryread_set.get(category=root_category) child_read = self.user.categoryread_set.get(category=self.category) self.assertEqual(root_read.last_read_on, child_read.last_read_on)
def read_private_threads(user): user.lock() category = Category.objects.private_threads() read_category(user, category) user.sync_unread_private_threads = False user.unread_private_threads = 0 user.save(update_fields=['sync_unread_private_threads', 'unread_private_threads'])
def test_read_category_prunes_threadreads(self): """read_category prunes threadreads in this category""" thread = self.post_thread(timezone.now()) threadstracker.make_read_aware(self.user, thread) threadstracker.read_thread(self.user, thread, thread.last_post) self.assertTrue(self.user.threadread_set.exists()) categoriestracker.read_category(self.user, self.category) self.assertTrue(self.user.categoryread_set.get(category=self.category)) self.assertFalse(self.user.threadread_set.exists())
def read_threads(user, pk): user.lock() category_id = get_int_or_404(pk) threads_tree_id = trees_map.get_tree_id_for_root(THREADS_ROOT_NAME) category = get_object_or_404(Category, id=category_id, tree_id=threads_tree_id) if category.level: allow_see_category(user, category) allow_browse_category(user, category) read_category(user, category)
def read(self, request): if request.query_params.get('category'): category_id = get_int_or_404(request.query_params.get('category')) category = get_object_or_404(Category.objects, id=category_id, tree_id=self.TREE_ID, ) allow_see_category(request.user, category) allow_browse_category(request.user, category) else: category = Category.objects.root_category() read_category(request.user, category) return Response({'detail': 'ok'})
def read_threads(user, pk): user.lock() category_id = get_int_or_404(pk) threads_tree_id = trees_map.get_tree_id_for_root(THREADS_ROOT_NAME) category = get_object_or_404(Category, id=category_id, tree_id=threads_tree_id, ) if category.level: allow_see_category(user, category) allow_browse_category(user, category) read_category(user, category)
def read(self, request): if request.query_params.get('category'): threads_tree_id = trees_map.get_tree_id_for_root(THREADS_ROOT_NAME) category_id = get_int_or_404(request.query_params.get('category')) category = get_object_or_404(Category, id=category_id, tree_id=threads_tree_id, ) allow_see_category(request.user, category) allow_browse_category(request.user, category) else: category = Category.objects.root_category() read_category(request.user, category) return Response({'detail': 'ok'})
def read(self, request, pk): request.user.lock() category_id = get_int_or_404(pk) threads_tree_id = trees_map.get_tree_id_for_root(THREADS_ROOT_NAME) category = get_object_or_404(Category, id=category_id, tree_id=threads_tree_id, ) if category.level: allow_see_category(request.user, category) allow_browse_category(request.user, category) read_category(request.user, category) return Response({'detail': 'ok'})
def test_thread_read_category_cutoff(self): """thread read is handled when category cutoff is present""" self.reply_thread() add_acl(self.user, self.categories) threadstracker.make_read_aware(self.user, self.thread) self.assertFalse(self.thread.is_read) categoriestracker.read_category(self.user, self.category) threadstracker.make_read_aware(self.user, self.thread) self.assertTrue(self.thread.is_read) categoriestracker.make_read_aware(self.user, self.categories) self.assertTrue(self.category.is_read) posts = list(self.thread.post_set.order_by('id')) threadstracker.make_posts_read_aware(self.user, self.thread, posts) for post in posts: self.assertTrue(post.is_read) # post reply self.reply_thread() # test if only last post is unread posts = list(self.thread.post_set.order_by('id')) threadstracker.make_read_aware(self.user, self.thread) threadstracker.make_posts_read_aware(self.user, self.thread, posts) for post in posts[:-1]: self.assertTrue(post.is_read) self.assertTrue(posts[-1].is_new) # last post read will change readstate of categories threadstracker.make_read_aware(self.user, self.thread) threadstracker.read_thread(self.user, self.thread, posts[-1]) categoriestracker.make_read_aware(self.user, self.categories) self.assertTrue(self.category.is_read)
def test_read_leaf_category(self): """read_category reads leaf category for user""" categoriestracker.read_category(self.user, self.category) self.assertTrue(self.user.categoryread_set.get(category=self.category))
def read_category(request, category_id): category = get_object_or_404(Category.objects, id=category_id) categoriestracker.read_category(request.user, category) messages.info(request, _("Threads were marked as read.")) return redirect(category.get_absolute_url())