test_helpers.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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. get_image_info, check_image, time_utcnow
  6. from flaskbb.utils.settings import flaskbb_config
  7. from flaskbb.forum.models import Forum
  8. def test_slugify():
  9. """Test the slugify helper method."""
  10. assert slugify(u'Hello world') == u'hello-world'
  11. assert slugify(u'¿Cómo está?') == u'como-esta'
  12. def test_forum_is_unread(guest, user, forum, topic, forumsread):
  13. """Test the forum is unread function."""
  14. # for a guest
  15. assert not forum_is_unread(None, None, guest)
  16. # for a logged in user without a forumsread
  17. assert forum_is_unread(forum, None, user)
  18. # same, just with forumsread
  19. assert forum_is_unread(forum, forumsread, user)
  20. # lets mark the forum as read
  21. # but before we have to add an read entry in forumsread and topicsread
  22. topic.update_read(user, topic.forum, forumsread)
  23. time_read = datetime.datetime.utcnow() - datetime.timedelta(hours=1)
  24. forumsread.cleared = time_read # lets cheat here a bit :P
  25. forumsread.last_read = datetime.datetime.utcnow()
  26. forumsread.save()
  27. assert not forum_is_unread(forum, forumsread, user)
  28. # read tracker is disabled
  29. flaskbb_config["TRACKER_LENGTH"] = 0
  30. assert not forum_is_unread(forum, forumsread, user)
  31. # there haven't been a post since TRACKER_LENGTH and thus the forum is read
  32. flaskbb_config["TRACKER_LENGTH"] = 1
  33. # this is cheating; don't do this.
  34. forum.last_post_created = forum.last_post_created - datetime.timedelta(hours=48)
  35. forum.save()
  36. assert not forum_is_unread(forum, forumsread, user)
  37. # no topics in this forum
  38. topic.delete()
  39. forum = Forum.query.filter_by(id=forum.id).first()
  40. flaskbb_config["TRACKER_LENGTH"] = 1 # activate the tracker again
  41. assert forum.topic_count == 0
  42. assert not forum_is_unread(forum, None, user)
  43. def test_topic_is_unread(guest, user, forum, topic, topicsread, forumsread):
  44. # test guest
  45. assert not topic_is_unread(None, None, guest)
  46. # compare topicsread.last_read with topic.last_post.date_created
  47. assert topic_is_unread(topic, topicsread, user, forumsread)
  48. # TopicsRead is none and the forum has never been marked as read
  49. assert topic_is_unread(topic, topicsread=None, user=user, forumsread=forumsread)
  50. # lets mark the forum as read
  51. forumsread.cleared = time_utcnow()
  52. forumsread.last_read = time_utcnow()
  53. forumsread.save()
  54. assert not topic_is_unread(topic, topicsread=None, user=user, forumsread=forumsread)
  55. # disabled tracker
  56. flaskbb_config["TRACKER_LENGTH"] = 0
  57. assert not topic_is_unread(topic, None, user, None)
  58. # post is older than tracker length
  59. time_posted = time_utcnow() - datetime.timedelta(days=2)
  60. flaskbb_config["TRACKER_LENGTH"] = 1
  61. topic.last_post.date_created = time_posted
  62. topic.save()
  63. assert not topic_is_unread(topic, None, user, None)
  64. def test_crop_title(default_settings):
  65. short_title = "Short title"
  66. long_title = "This is just a test title which is too long."
  67. assert crop_title(short_title) == short_title
  68. assert crop_title(long_title) == "This is just a..."
  69. def test_render_markup(default_settings):
  70. markdown = "**Bold**"
  71. assert render_markup(markdown) == "<p><strong>Bold</strong></p>\n"
  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_markdown = "**[test_normal](http://localhost:5000/user/test_normal) wrote:**\n> Test Content Normal\n"
  80. actual = format_quote(topic.first_post.username, topic.first_post.content)
  81. assert actual == expected_markdown
  82. def test_get_image_info():
  83. # some random jpg/gif/png images from my imgur account
  84. jpg = "http://i.imgur.com/NgVIeRG.jpg"
  85. gif = "http://i.imgur.com/l3Vmp4m.gif"
  86. png = "http://i.imgur.com/JXzKxNs.png"
  87. jpg_img = get_image_info(jpg)
  88. assert jpg_img["content-type"] == "image/jpeg"
  89. assert jpg_img["height"] == 1024
  90. assert jpg_img["width"] == 1280
  91. assert jpg_img["size"] == 209.06
  92. gif_img = get_image_info(gif)
  93. assert gif_img["content-type"] == "image/gif"
  94. assert gif_img["height"] == 168
  95. assert gif_img["width"] == 400
  96. assert gif_img["size"] == 576.138
  97. png_img = get_image_info(png)
  98. assert png_img["content-type"] == "image/png"
  99. assert png_img["height"] == 1080
  100. assert png_img["width"] == 1920
  101. assert png_img["size"] == 269.409
  102. def test_check_image(default_settings):
  103. # test200x100.png
  104. img_width = "http://i.imgur.com/4dAWAZI.png"
  105. # test100x200.png
  106. img_height = "http://i.imgur.com/I7GwF3D.png"
  107. # test100x100.png
  108. img_ok = "http://i.imgur.com/CYV6NzT.png"
  109. # random too big image
  110. img_size = "http://i.imgur.com/l3Vmp4m.gif"
  111. # random image wrong type
  112. img_type = "https://d11xdyzr0div58.cloudfront.net/static/logos/archlinux-logo-black-scalable.f931920e6cdb.svg"
  113. data = check_image(img_width)
  114. assert "wide" in data[0]
  115. assert not data[1]
  116. data = check_image(img_height)
  117. assert "high" in data[0]
  118. assert not data[1]
  119. data = check_image(img_type)
  120. assert "type" in data[0]
  121. assert not data[1]
  122. data = check_image(img_ok)
  123. assert data[0] is None
  124. assert data[1]
  125. flaskbb_config["AVATAR_WIDTH"] = 1000
  126. flaskbb_config["AVATAR_HEIGHT"] = 1000
  127. data = check_image(img_size)
  128. assert "big" in data[0]
  129. assert not data[1]