test_utils.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. #-*- coding: utf-8 -*-
  2. from django.core.urlresolvers import reverse
  3. from django.test import TestCase
  4. from django.test.client import RequestFactory
  5. from django.utils import timezone
  6. from ..utils import clean_return_path, format_plaintext_for_html, is_referer_local, is_request_to_misago, slugify
  7. VALID_PATHS = (
  8. "/",
  9. "/threads/",
  10. )
  11. INVALID_PATHS = (
  12. "",
  13. "somewhere/",
  14. )
  15. class IsRequestToMisagoTests(TestCase):
  16. def test_is_request_to_misago(self):
  17. """
  18. is_request_to_misago correctly detects requests directed at Misago
  19. """
  20. misago_prefix = reverse('misago:index')
  21. for path in VALID_PATHS:
  22. request = RequestFactory().get('/')
  23. request.path_info = path
  24. self.assertTrue(
  25. is_request_to_misago(request),
  26. '"%s" is not overlapped by "%s"' % (path, misago_prefix))
  27. for path in INVALID_PATHS:
  28. request = RequestFactory().get('/')
  29. request.path_info = path
  30. self.assertFalse(
  31. is_request_to_misago(request),
  32. '"%s" is overlapped by "%s"' % (path, misago_prefix))
  33. class SlugifyTests(TestCase):
  34. def test_valid_slugify_output(self):
  35. """Misago's slugify correctly slugifies string"""
  36. test_cases = (
  37. (u'Bob', u'bob'),
  38. (u'Eric The Fish', u'eric-the-fish'),
  39. (u'John Snow', u'john-snow'),
  40. (u'J0n', u'j0n'),
  41. (u'An###ne', u'anne'),
  42. (u'S**t', u'st'),
  43. (u'Łók', u'lok'),
  44. )
  45. for original, slug in test_cases:
  46. self.assertEqual(slugify(original), slug)
  47. PLAINTEXT_FORMAT_CASES = (
  48. (
  49. u'Lorem ipsum.',
  50. u'<p>Lorem ipsum.</p>'
  51. ),
  52. (
  53. u'Lorem <b>ipsum</b>.',
  54. u'<p>Lorem &lt;b&gt;ipsum&lt;/b&gt;.</p>'
  55. ),
  56. (
  57. u'Lorem "ipsum" dolor met.',
  58. u'<p>Lorem &quot;ipsum&quot; dolor met.</p>'
  59. ),
  60. (
  61. u'Lorem ipsum.\nDolor met.',
  62. u'<p>Lorem ipsum.<br />Dolor met.</p>'
  63. ),
  64. (
  65. u'Lorem ipsum.\n\nDolor met.',
  66. u'<p>Lorem ipsum.</p>\n\n<p>Dolor met.</p>'
  67. ),
  68. (
  69. u'http://misago-project.org/login/',
  70. u'<p><a href="http://misago-project.org/login/">http://misago-project.org/login/</a></p>'
  71. ),
  72. )
  73. class FormatPlaintextForHtmlTests(TestCase):
  74. def test_format_plaintext_for_html(self):
  75. """format_plaintext_for_html correctly formats plaintext for html"""
  76. for plaintext, html in PLAINTEXT_FORMAT_CASES:
  77. output = format_plaintext_for_html(plaintext)
  78. assertion_message = """
  79. format_plaintext_for_html failed to produce expected output:
  80. expected: %s
  81. return: %s
  82. """ % (html, output)
  83. self.assertEqual(output, html, assertion_message)
  84. class MockRequest(object):
  85. scheme = 'http'
  86. def __init__(self, method, meta=None, post=None):
  87. self.method = method
  88. self.META = meta or {}
  89. self.POST = post or {}
  90. class CleanReturnPathTests(TestCase):
  91. def test_get_request(self):
  92. """clean_return_path works for GET requests"""
  93. bad_request = MockRequest('GET', {
  94. 'HTTP_REFERER': 'http://cookies.com',
  95. 'HTTP_HOST': 'misago-project.org'
  96. })
  97. self.assertIsNone(clean_return_path(bad_request))
  98. bad_request = MockRequest('GET', {
  99. 'HTTP_REFERER': 'https://misago-project.org/',
  100. 'HTTP_HOST': 'misago-project.org/'
  101. })
  102. self.assertIsNone(clean_return_path(bad_request))
  103. bad_request = MockRequest('GET', {
  104. 'HTTP_REFERER': 'https://misago-project.org/',
  105. 'HTTP_HOST': 'misago-project.org/assadsa/'
  106. })
  107. self.assertIsNone(clean_return_path(bad_request))
  108. ok_request = MockRequest('GET', {
  109. 'HTTP_REFERER': 'http://misago-project.org/',
  110. 'HTTP_HOST': 'misago-project.org/'
  111. })
  112. self.assertEqual(clean_return_path(ok_request), '/')
  113. ok_request = MockRequest('GET', {
  114. 'HTTP_REFERER': 'http://misago-project.org/login/',
  115. 'HTTP_HOST': 'misago-project.org/'
  116. })
  117. self.assertEqual(clean_return_path(ok_request), '/login/')
  118. def test_post_request(self):
  119. """clean_return_path works for POST requests"""
  120. bad_request = MockRequest('POST', {
  121. 'HTTP_REFERER': 'http://misago-project.org/',
  122. 'HTTP_HOST': 'misago-project.org/'
  123. }, {'return_path': '/sdasdsa/'})
  124. self.assertIsNone(clean_return_path(bad_request))
  125. ok_request = MockRequest('POST', {
  126. 'HTTP_REFERER': 'http://misago-project.org/',
  127. 'HTTP_HOST': 'misago-project.org/'
  128. }, {'return_path': '/login/'})
  129. self.assertEqual(clean_return_path(ok_request), '/login/')
  130. class IsRefererLocalTests(TestCase):
  131. def test_local_referers(self):
  132. """local referers return true"""
  133. ok_request = MockRequest('GET', {
  134. 'HTTP_REFERER': 'http://misago-project.org/',
  135. 'HTTP_HOST': 'misago-project.org/'
  136. })
  137. self.assertTrue(is_referer_local(ok_request))
  138. ok_request = MockRequest('GET', {
  139. 'HTTP_REFERER': 'http://misago-project.org/',
  140. 'HTTP_HOST': 'misago-project.org/'
  141. })
  142. self.assertTrue(is_referer_local(ok_request))
  143. ok_request = MockRequest('GET', {
  144. 'HTTP_REFERER': 'http://misago-project.org/login/',
  145. 'HTTP_HOST': 'misago-project.org/'
  146. })
  147. self.assertTrue(is_referer_local(ok_request))
  148. def test_foreign_referers(self):
  149. """non-local referers return false"""
  150. bad_request = MockRequest('GET', {
  151. 'HTTP_REFERER': 'http://else-project.org/',
  152. 'HTTP_HOST': 'misago-project.org/'
  153. })
  154. self.assertFalse(is_referer_local(bad_request))
  155. bad_request = MockRequest('GET', {
  156. 'HTTP_REFERER': 'https://misago-project.org/',
  157. 'HTTP_HOST': 'misago-project.org/'
  158. })
  159. self.assertFalse(is_referer_local(bad_request))
  160. bad_request = MockRequest('GET', {
  161. 'HTTP_REFERER': 'http://misago-project.org/',
  162. 'HTTP_HOST': 'misago-project.org/assadsa/'
  163. })
  164. self.assertFalse(is_referer_local(bad_request))