test_mentions.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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, @{}!</p>', '<p>Hello, <a href="{}">@{}</a>!</p>'),
  11. ('<h1>Hello, @{}!</h1>', '<h1>Hello, <a href="{}">@{}</a>!</h1>'),
  12. ('<div>Hello, @{}!</div>', '<div>Hello, <a href="{}">@{}</a>!</div>'),
  13. (
  14. '<h1>Hello, <strong>@{}!</strong></h1>',
  15. '<h1>Hello, <strong><a href="{}">@{}</a>!</strong></h1>'
  16. ),
  17. (
  18. '<h1>Hello, <strong>@{}</strong>!</h1>',
  19. '<h1>Hello, <strong><a href="{}">@{}</a></strong>!</h1>'
  20. ),
  21. ]
  22. for before, after in TEST_CASES:
  23. result = {'parsed_text': before.format(self.user.username), 'mentions': []}
  24. add_mentions(MockRequest(self.user), result)
  25. outcome = after.format(self.user.get_absolute_url(), self.user.username)
  26. self.assertEqual(result['parsed_text'], outcome)
  27. self.assertEqual(result['mentions'], [self.user])
  28. def test_invalid_mentions(self):
  29. """markup extension leaves invalid mentions alone"""
  30. TEST_CASES = [
  31. '<p>Hello, Bob!</p>',
  32. '<p>Hello, @Bob!</p>',
  33. '<p>Hello, <a href="/">@{}</a>!</p>'.format(self.user.username),
  34. '<p>Hello, <a href="/"><b>@{}</b></a>!</p>'.format(self.user.username),
  35. ]
  36. for markup in TEST_CASES:
  37. result = {'parsed_text': markup, 'mentions': []}
  38. add_mentions(MockRequest(self.user), result)
  39. self.assertEqual(result['parsed_text'], markup)
  40. self.assertFalse(result['mentions'])
  41. def test_multiple_mentions(self):
  42. """markup extension handles multiple mentions"""
  43. before = '<p>Hello @{0} and @{0}, how is it going?</p>'.format(self.user.username)
  44. after = '<p>Hello <a href="{0}">@{1}</a> and <a href="{0}">@{1}</a>, how is it going?</p>'.format(
  45. self.user.get_absolute_url(), self.user.username
  46. )
  47. result = {'parsed_text': before, 'mentions': []}
  48. add_mentions(MockRequest(self.user), result)
  49. self.assertEqual(result['parsed_text'], after)
  50. self.assertEqual(result['mentions'], [self.user])
  51. def test_repeated_mention(self):
  52. """markup extension handles mentions across document"""
  53. before = '<p>Hello @{0}</p><p>@{0}, how is it going?</p>'.format(self.user.username)
  54. after = '<p>Hello <a href="{0}">@{1}</a></p><p><a href="{0}">@{1}</a>, how is it going?</p>'.format(
  55. self.user.get_absolute_url(), self.user.username
  56. )
  57. result = {'parsed_text': before, 'mentions': []}
  58. add_mentions(MockRequest(self.user), result)
  59. self.assertEqual(result['parsed_text'], after)
  60. self.assertEqual(result['mentions'], [self.user])