test_mentions.py 2.6 KB

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