def first_unread(self, topicsread, user, forumsread=None): """Returns the url to the first unread post if any else to the topic itself. :param topicsread: The topicsread object for the topic :param user: The user who should be checked if he has read the last post in the topic :param forumsread: The forumsread object in which the topic is. If you also want to check if the user has marked the forum as read, than you will also need to pass an forumsread object. """ # If the topic is unread try to get the first unread post if topic_is_unread(self, topicsread, user, forumsread): query = Post.query.filter(Post.topic_id == self.id) if topicsread is not None: query = query.filter(Post.date_created > topicsread.last_read) post = query.order_by(Post.id.asc()).first() if post is not None: return post.url return self.url
def test_topic_is_unread(guest, user, forum, topic, topicsread, forumsread): # test guest assert not topic_is_unread(None, None, guest) # compare topicsread.last_read with topic.last_post.date_created assert topic_is_unread(topic, topicsread, user, forumsread) # TopicsRead is none and the forum has never been marked as read assert topic_is_unread(topic, topicsread=None, user=user, forumsread=forumsread) # lets mark the forum as read forumsread.cleared = time_utcnow() forumsread.last_read = time_utcnow() forumsread.save() assert not topic_is_unread( topic, topicsread=None, user=user, forumsread=forumsread) # disabled tracker flaskbb_config["TRACKER_LENGTH"] = 0 assert not topic_is_unread(topic, None, user, None) # post is older than tracker length time_posted = time_utcnow() - dt.timedelta(days=2) flaskbb_config["TRACKER_LENGTH"] = 1 topic.last_post.date_created = time_posted topic.last_updated = time_posted topic.save() assert not topic_is_unread(topic, None, user, None)
def test_topic_is_unread(guest, user, forum, topic, topicsread, forumsread): # test guest assert not topic_is_unread(None, None, guest) # compare topicsread.last_read with topic.last_post.date_created assert topic_is_unread(topic, topicsread, user, forumsread) # TopicsRead is none and the forum has never been marked as read assert topic_is_unread(topic, topicsread=None, user=user, forumsread=forumsread) # lets mark the forum as read forumsread.cleared = time_utcnow() forumsread.last_read = time_utcnow() forumsread.save() assert not topic_is_unread(topic, topicsread=None, user=user, forumsread=forumsread) # disabled tracker flaskbb_config["TRACKER_LENGTH"] = 0 assert not topic_is_unread(topic, None, user, None) # post is older than tracker length time_posted = time_utcnow() - dt.timedelta(days=2) flaskbb_config["TRACKER_LENGTH"] = 1 topic.last_post.date_created = time_posted topic.last_updated = time_posted topic.save() assert not topic_is_unread(topic, None, user, None)