test_mentions.py 3.4 KB

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