test_helpers.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #-*- coding: utf-8 -*-
  2. import datetime
  3. from flaskbb.utils.helpers import slugify, forum_is_unread, topic_is_unread, \
  4. crop_title, render_markup, is_online, format_date, format_quote
  5. from flaskbb.utils.settings import flaskbb_config
  6. from flaskbb.forum.models import Forum
  7. def test_slugify():
  8. """Test the slugify helper method."""
  9. assert slugify(u'Hello world') == u'hello-world'
  10. assert slugify(u'¿Cómo está?') == u'como-esta'
  11. def test_forum_is_unread(guest, user, forum, topic, forumsread):
  12. """Test the forum is unread function."""
  13. # for a guest
  14. assert not forum_is_unread(None, None, guest)
  15. # for a logged in user without a forumsread
  16. assert forum_is_unread(forum, None, user)
  17. # same, just with forumsread
  18. assert forum_is_unread(forum, forumsread, user)
  19. # lets mark the forum as read
  20. # but before we have to add an read entry in forumsread and topicsread
  21. topic.update_read(user, topic.forum, forumsread)
  22. time_read = datetime.datetime.utcnow() - datetime.timedelta(hours=1)
  23. forumsread.cleared = time_read # lets cheat here a bit :P
  24. forumsread.last_read = datetime.datetime.utcnow()
  25. forumsread.save()
  26. assert not forum_is_unread(forum, forumsread, user)
  27. # read tracker is disabled
  28. flaskbb_config["TRACKER_LENGTH"] = 0
  29. assert not forum_is_unread(forum, forumsread, user)
  30. # no topics in this forum
  31. topic.delete()
  32. forum = Forum.query.filter_by(id=forum.id).first()
  33. flaskbb_config["TRACKER_LENGTH"] = 1 # activate the tracker again
  34. assert forum.topic_count == 0
  35. assert not forum_is_unread(forum, None, user)
  36. def test_topic_is_unread(guest, user, forum, topic, topicsread, forumsread):
  37. # test guest
  38. assert not topic_is_unread(None, None, guest)
  39. # compare topicsread.last_read with topic.last_post.date_created
  40. assert topic_is_unread(topic, topicsread, user, forumsread)
  41. # TopicsRead is none and the forum has never been marked as read
  42. assert topic_is_unread(topic, topicsread=None, user=user, forumsread=forumsread)
  43. # lets mark the forum as read
  44. forumsread.cleared = datetime.datetime.utcnow()
  45. forumsread.last_read = datetime.datetime.utcnow()
  46. forumsread.save()
  47. assert not topic_is_unread(topic, topicsread=None, user=user, forumsread=forumsread)
  48. # disabled tracker
  49. flaskbb_config["TRACKER_LENGTH"] = 0
  50. assert not topic_is_unread(topic, None, user, None)
  51. # post is older than tracker length
  52. time_posted = datetime.datetime.utcnow() - datetime.timedelta(days=2)
  53. flaskbb_config["TRACKER_LENGTH"] = 1
  54. topic.last_post.date_created = time_posted
  55. topic.save()
  56. assert not topic_is_unread(topic, None, user, None)
  57. def test_crop_title(default_settings):
  58. short_title = "Short title"
  59. long_title = "This is just a test title which is too long."
  60. assert crop_title(short_title) == short_title
  61. assert crop_title(long_title) == "This is just a..."
  62. def test_render_markup(default_settings):
  63. markdown = "**Bold**"
  64. bbcode = "[b]Bold[/b]"
  65. no_markup = "Bold"
  66. flaskbb_config["MARKUP_TYPE"] = "markdown"
  67. assert render_markup(markdown) == "<p><strong>Bold</strong></p>\n"
  68. flaskbb_config["MARKUP_TYPE"] = "bbcode"
  69. assert render_markup(bbcode) == "<strong>Bold</strong>"
  70. flaskbb_config["MARKUP_TYPE"] = "text"
  71. assert render_markup(no_markup) == "Bold"
  72. def test_is_online(default_settings, user):
  73. assert is_online(user)
  74. def test_format_date():
  75. date = datetime.date(2015, 2, 15)
  76. time = datetime.datetime.combine(date, datetime.datetime.min.time())
  77. assert format_date(time) == "2015-02-15"
  78. def test_format_quote(topic):
  79. expected_bbcode = "[b][url=http://localhost:5000/user/test_normal]test_normal[/url] wrote:[/b][quote]Test Content Normal[/quote]\n"
  80. expected_markdown = "**[test_normal](http://localhost:5000/user/test_normal) wrote:**\n> Test Content Normal\n"
  81. flaskbb_config["MARKUP_TYPE"] = "bbcode"
  82. assert format_quote(topic.first_post) == expected_bbcode
  83. flaskbb_config["MARKUP_TYPE"] = "markdown"
  84. assert format_quote(topic.first_post) == expected_markdown