Browse Source

Added tests for more helper functions

sh4nks 10 years ago
parent
commit
fbb0150bdb
3 changed files with 95 additions and 8 deletions
  1. 2 2
      flaskbb/utils/helpers.py
  2. 17 4
      tests/fixtures/forum.py
  3. 76 2
      tests/unit/utils/test_helpers.py

+ 2 - 2
flaskbb/utils/helpers.py

@@ -191,7 +191,7 @@ def topic_is_unread(topic, topicsread, user, forumsread=None):
         days=flaskbb_config["TRACKER_LENGTH"])
         days=flaskbb_config["TRACKER_LENGTH"])
 
 
     # disable tracker if read_cutoff is set to 0
     # disable tracker if read_cutoff is set to 0
-    if read_cutoff == 0:
+    if flaskbb_config["TRACKER_LENGTH"] == 0:
         return False
         return False
 
 
     # check read_cutoff
     # check read_cutoff
@@ -310,7 +310,7 @@ def format_date(value, format='%Y-%m-%d'):
     return value.strftime(format)
     return value.strftime(format)
 
 
 
 
-def time_since(time):
+def time_since(time):  # pragma: no cover
     """Returns a string representing time since e.g.
     """Returns a string representing time since e.g.
     3 days ago, 5 hours ago.
     3 days ago, 5 hours ago.
 
 

+ 17 - 4
tests/fixtures/forum.py

@@ -2,7 +2,8 @@
 import datetime
 import datetime
 import pytest
 import pytest
 
 
-from flaskbb.forum.models import Forum, Category, Topic, Post, ForumsRead
+from flaskbb.forum.models import Forum, Category, Topic, Post, ForumsRead, \
+    TopicsRead
 
 
 
 
 @pytest.fixture
 @pytest.fixture
@@ -64,17 +65,29 @@ def topic_in_locked_forum(forum_locked, user):
 
 
 
 
 @pytest.fixture
 @pytest.fixture
-def forumsread_last_read():
+def last_read():
     """The datetime of the formsread last_read."""
     """The datetime of the formsread last_read."""
     return datetime.datetime.utcnow() - datetime.timedelta(hours=1)
     return datetime.datetime.utcnow() - datetime.timedelta(hours=1)
 
 
 
 
 @pytest.fixture
 @pytest.fixture
-def forumsread(user, forum, forumsread_last_read):
+def forumsread(user, forum, last_read):
     """Create a forumsread object for the user and a forum."""
     """Create a forumsread object for the user and a forum."""
     forumsread = ForumsRead()
     forumsread = ForumsRead()
     forumsread.user_id = user.id
     forumsread.user_id = user.id
     forumsread.forum_id = forum.id
     forumsread.forum_id = forum.id
-    forumsread.last_read = forumsread_last_read
+    forumsread.last_read = last_read
     forumsread.save()
     forumsread.save()
     return forumsread
     return forumsread
+
+
+@pytest.fixture
+def topicsread(user, topic, last_read):
+    """Create a topicsread object for the user and a topic."""
+    topicsread = TopicsRead()
+    topicsread.user_id = user.id
+    topicsread.topic_id = topic.id
+    topicsread.forum_id = topic.forum_id
+    topicsread.last_read = last_read
+    topicsread.save()
+    return topicsread

+ 76 - 2
tests/unit/utils/test_helpers.py

@@ -1,6 +1,7 @@
 #-*- coding: utf-8 -*-
 #-*- coding: utf-8 -*-
 import datetime
 import datetime
-from flaskbb.utils.helpers import slugify, forum_is_unread
+from flaskbb.utils.helpers import slugify, forum_is_unread, topic_is_unread, \
+    crop_title, render_markup, is_online, format_date, format_quote
 from flaskbb.utils.settings import flaskbb_config
 from flaskbb.utils.settings import flaskbb_config
 from flaskbb.forum.models import Forum
 from flaskbb.forum.models import Forum
 
 
@@ -24,7 +25,7 @@ def test_forum_is_unread(guest, user, forum, topic, forumsread):
     # same, just with forumsread
     # same, just with forumsread
     assert forum_is_unread(forum, forumsread, user)
     assert forum_is_unread(forum, forumsread, user)
 
 
-    # lets clear the forumsread relation
+    # lets mark the forum as read
     # but before we have to add an read entry in forumsread and topicsread
     # but before we have to add an read entry in forumsread and topicsread
     topic.update_read(user, topic.forum, forumsread)
     topic.update_read(user, topic.forum, forumsread)
 
 
@@ -44,3 +45,76 @@ def test_forum_is_unread(guest, user, forum, topic, forumsread):
     flaskbb_config["TRACKER_LENGTH"] = 1  # activate the tracker again
     flaskbb_config["TRACKER_LENGTH"] = 1  # activate the tracker again
     assert forum.topic_count == 0
     assert forum.topic_count == 0
     assert not forum_is_unread(forum, None, user)
     assert not forum_is_unread(forum, None, user)
+
+
+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 = datetime.datetime.utcnow()
+    forumsread.last_read = datetime.datetime.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 = datetime.datetime.utcnow() - datetime.timedelta(days=2)
+    flaskbb_config["TRACKER_LENGTH"] = 1
+    topic.last_post.date_created = time_posted
+    topic.save()
+    assert not topic_is_unread(topic, None, user, None)
+
+
+def test_crop_title(default_settings):
+    short_title = "Short title"
+    long_title = "This is just a test title which is too long."
+
+    assert crop_title(short_title) == short_title
+    assert crop_title(long_title) == "This is just a..."
+
+
+def test_render_markup(default_settings):
+    markdown = "**Bold**"
+    bbcode = "[b]Bold[/b]"
+    no_markup = "Bold"
+
+    flaskbb_config["MARKUP_TYPE"] = "markdown"
+    assert render_markup(markdown) == "<p><strong>Bold</strong></p>\n"
+
+    flaskbb_config["MARKUP_TYPE"] = "bbcode"
+    assert render_markup(bbcode) == "<strong>Bold</strong>"
+
+    flaskbb_config["MARKUP_TYPE"] = "text"
+    assert render_markup(no_markup) == "Bold"
+
+
+def test_is_online(default_settings, user):
+    assert is_online(user)
+
+
+def test_format_date():
+    date = datetime.date(2015, 02, 15)
+    time = datetime.datetime.combine(date, datetime.datetime.min.time())
+    assert format_date(time) == "2015-02-15"
+
+
+def test_format_quote(topic):
+    expected_bbcode = "[b][url=http://localhost:5000/user/test_normal]test_normal[/url] wrote:[/b][quote]Test Content Normal[/quote]\n"
+    expected_markdown = "**[test_normal](http://localhost:5000/user/test_normal) wrote:**\n> Test Content Normal\n"
+
+    flaskbb_config["MARKUP_TYPE"] = "bbcode"
+    assert format_quote(topic.first_post) == expected_bbcode
+
+    flaskbb_config["MARKUP_TYPE"] = "markdown"
+    print format_quote(topic.first_post)
+    assert format_quote(topic.first_post) == expected_markdown