test_mentions.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from misago.markup.mentions import add_mentions
  2. from misago.users.testutils import AuthenticatedUserTestCase
  3. class MockRequest(object):
  4. def __init__(self, user):
  5. self.user = user
  6. class MentionsTests(AuthenticatedUserTestCase):
  7. def test_single_mention(self):
  8. """markup extension parses single mention"""
  9. TEST_CASES = [
  10. ("<p>Hello, @%s!</p>", '<p>Hello, <a href="%s">@%s</a>!</p>'),
  11. ("<h1>Hello, @%s!</h1>", '<h1>Hello, <a href="%s">@%s</a>!</h1>'),
  12. ("<div>Hello, @%s!</div>", '<div>Hello, <a href="%s">@%s</a>!</div>'),
  13. (
  14. "<h1>Hello, <strong>@%s!</strong></h1>",
  15. '<h1>Hello, <strong><a href="%s">@%s</a>!</strong></h1>',
  16. ),
  17. (
  18. "<h1>Hello, <strong>@%s</strong>!</h1>",
  19. '<h1>Hello, <strong><a href="%s">@%s</a></strong>!</h1>',
  20. ),
  21. ]
  22. for before, after in TEST_CASES:
  23. result = {"parsed_text": before % self.user.username, "mentions": []}
  24. add_mentions(MockRequest(self.user), result)
  25. expected_outcome = after % (
  26. self.user.get_absolute_url(),
  27. self.user.username,
  28. )
  29. self.assertEqual(result["parsed_text"], expected_outcome)
  30. self.assertEqual(result["mentions"], [self.user])
  31. def test_invalid_mentions(self):
  32. """markup extension leaves invalid mentions alone"""
  33. TEST_CASES = [
  34. "<p>Hello, Bob!</p>",
  35. "<p>Hello, @Bob!</p>",
  36. '<p>Hello, <a href="/">@%s</a>!</p>' % self.user.username,
  37. '<p>Hello, <a href="/"><b>@%s</b></a>!</p>' % self.user.username,
  38. ]
  39. for markup in TEST_CASES:
  40. result = {"parsed_text": markup, "mentions": []}
  41. add_mentions(MockRequest(self.user), result)
  42. self.assertEqual(result["parsed_text"], markup)
  43. self.assertFalse(result["mentions"])
  44. def test_multiple_mentions(self):
  45. """markup extension handles multiple mentions"""
  46. before = "<p>Hello @{0} and @{0}, how is it going?</p>".format(
  47. self.user.username
  48. )
  49. after = '<p>Hello <a href="{0}">@{1}</a> and <a href="{0}">@{1}</a>, how is it going?</p>'.format(
  50. self.user.get_absolute_url(), self.user.username
  51. )
  52. result = {"parsed_text": before, "mentions": []}
  53. add_mentions(MockRequest(self.user), result)
  54. self.assertEqual(result["parsed_text"], after)
  55. self.assertEqual(result["mentions"], [self.user])
  56. def test_repeated_mention(self):
  57. """markup extension handles mentions across document"""
  58. before = "<p>Hello @{0}</p><p>@{0}, how is it going?</p>".format(
  59. self.user.username
  60. )
  61. after = '<p>Hello <a href="{0}">@{1}</a></p><p><a href="{0}">@{1}</a>, how is it going?</p>'.format(
  62. self.user.get_absolute_url(), self.user.username
  63. )
  64. result = {"parsed_text": before, "mentions": []}
  65. add_mentions(MockRequest(self.user), result)
  66. self.assertEqual(result["parsed_text"], after)
  67. self.assertEqual(result["mentions"], [self.user])