test_mentions.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. from ..htmlparser import parse_html_string, print_html_string
  2. from ..mentions import add_mentions
  3. def test_util_replaces_mention_with_link_to_user_profile_in_parsed_text(user):
  4. parsing_result = {"parsed_text": f"<p>Hello, @{user.username}!</p>", "mentions": []}
  5. root_node = parse_html_string(parsing_result["parsed_text"])
  6. add_mentions(parsing_result, root_node)
  7. parsing_result["parsed_text"] = print_html_string(root_node)
  8. assert parsing_result["parsed_text"] == (
  9. f'<p>Hello, <a href="{user.get_absolute_url()}">@{user.username}</a>!</p>'
  10. )
  11. def test_util_adds_mention_to_parsig_result(user):
  12. parsing_result = {"parsed_text": f"<p>Hello, @{user.username}!</p>", "mentions": []}
  13. root_node = parse_html_string(parsing_result["parsed_text"])
  14. add_mentions(parsing_result, root_node)
  15. parsing_result["parsed_text"] = print_html_string(root_node)
  16. assert parsing_result["mentions"] == [user.id]
  17. def test_mentions_arent_added_for_nonexisting_user(user):
  18. parsing_result = {"parsed_text": f"<p>Hello, @OtherUser!</p>", "mentions": []}
  19. root_node = parse_html_string(parsing_result["parsed_text"])
  20. add_mentions(parsing_result, root_node)
  21. parsing_result["parsed_text"] = print_html_string(root_node)
  22. assert parsing_result["parsed_text"] == "<p>Hello, @OtherUser!</p>"
  23. def test_util_replaces_multiple_mentions_with_link_to_user_profiles_in_parsed_text(
  24. user, other_user
  25. ):
  26. parsing_result = {
  27. "parsed_text": f"<p>Hello, @{user.username} and @{other_user.username}!</p>",
  28. "mentions": [],
  29. }
  30. root_node = parse_html_string(parsing_result["parsed_text"])
  31. add_mentions(parsing_result, root_node)
  32. parsing_result["parsed_text"] = print_html_string(root_node)
  33. assert (
  34. f'<a href="{user.get_absolute_url()}">@{user.username}</a>'
  35. in parsing_result["parsed_text"]
  36. )
  37. assert (
  38. f'<a href="{other_user.get_absolute_url()}">@{other_user.username}</a>'
  39. in parsing_result["parsed_text"]
  40. )
  41. def test_util_adds_multiple_mentions_to_parsig_result(user, other_user):
  42. parsing_result = {
  43. "parsed_text": f"<p>Hello, @{user.username} and @{other_user.username}!</p>",
  44. "mentions": [],
  45. }
  46. root_node = parse_html_string(parsing_result["parsed_text"])
  47. add_mentions(parsing_result, root_node)
  48. parsing_result["parsed_text"] = print_html_string(root_node)
  49. assert parsing_result["mentions"] == [user.id, other_user.id]
  50. def test_util_handles_repeated_mentions_of_same_user(user):
  51. parsing_result = {
  52. "parsed_text": f"<p>Hello, @{user.username} and @{user.username}!</p>",
  53. "mentions": [],
  54. }
  55. root_node = parse_html_string(parsing_result["parsed_text"])
  56. add_mentions(parsing_result, root_node)
  57. parsing_result["parsed_text"] = print_html_string(root_node)
  58. assert parsing_result["mentions"] == [user.id]
  59. def test_util_skips_mentions_in_links(user, snapshot):
  60. parsing_result = {
  61. "parsed_text": f'<p>Hello, <a href="/">@{user.username}</a></p>',
  62. "mentions": [],
  63. }
  64. root_node = parse_html_string(parsing_result["parsed_text"])
  65. add_mentions(parsing_result, root_node)
  66. parsing_result["parsed_text"] = print_html_string(root_node)
  67. assert parsing_result["parsed_text"] == (
  68. f'<p>Hello, <a href="/">@{user.username}</a></p>'
  69. )
  70. assert parsing_result["mentions"] == []
  71. def test_util_handles_text_without_mentions(db):
  72. parsing_result = {"parsed_text": f"<p>Hello, world!</p>", "mentions": []}
  73. root_node = parse_html_string(parsing_result["parsed_text"])
  74. add_mentions(parsing_result, root_node)
  75. parsing_result["parsed_text"] = print_html_string(root_node)
  76. assert parsing_result["parsed_text"] == ("<p>Hello, world!</p>")
  77. assert parsing_result["mentions"] == []