test_mentions.py 3.9 KB

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