test_utils.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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 misago.core.utils import (clean_return_path, is_request_to_misago,
  6. slugify, time_amount)
  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 correcly 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. class MockRequest(object):
  48. scheme = 'http'
  49. def __init__(self, method, meta=None, post=None):
  50. self.method = method
  51. self.META = meta or {}
  52. self.POST = post or {}
  53. class CleanReturnPathTests(TestCase):
  54. def test_get_request(self):
  55. """clean_return_path works for GET requests"""
  56. bad_request = MockRequest('GET', {
  57. 'HTTP_REFERER': 'http://cookies.com',
  58. 'HTTP_HOST': 'misago-project.org'
  59. })
  60. self.assertIsNone(clean_return_path(bad_request))
  61. bad_request = MockRequest('GET', {
  62. 'HTTP_REFERER': 'https://misago-project.org/',
  63. 'HTTP_HOST': 'misago-project.org/'
  64. })
  65. self.assertIsNone(clean_return_path(bad_request))
  66. bad_request = MockRequest('GET', {
  67. 'HTTP_REFERER': 'https://misago-project.org/',
  68. 'HTTP_HOST': 'misago-project.org/assadsa/'
  69. })
  70. self.assertIsNone(clean_return_path(bad_request))
  71. ok_request = MockRequest('GET', {
  72. 'HTTP_REFERER': 'http://misago-project.org/',
  73. 'HTTP_HOST': 'misago-project.org/'
  74. })
  75. self.assertEqual(clean_return_path(ok_request), '/')
  76. ok_request = MockRequest('GET', {
  77. 'HTTP_REFERER': 'http://misago-project.org/register/',
  78. 'HTTP_HOST': 'misago-project.org/'
  79. })
  80. self.assertEqual(clean_return_path(ok_request), '/register/')
  81. def test_post_request(self):
  82. """clean_return_path works for POST requests"""
  83. bad_request = MockRequest('POST', {
  84. 'HTTP_REFERER': 'http://misago-project.org/',
  85. 'HTTP_HOST': 'misago-project.org/'
  86. }, {'return_path': '/sdasdsa/'})
  87. self.assertIsNone(clean_return_path(bad_request))
  88. ok_request = MockRequest('POST', {
  89. 'HTTP_REFERER': 'http://misago-project.org/',
  90. 'HTTP_HOST': 'misago-project.org/'
  91. }, {'return_path': '/register/'})
  92. self.assertEqual(clean_return_path(ok_request), '/register/')
  93. class TimeAmountTests(TestCase):
  94. def test_single_units(self):
  95. """time_amount return correct amount of time for 1 precision"""
  96. self.assertEqual(time_amount(1), "1 second")
  97. self.assertEqual(time_amount(5), "5 seconds")
  98. self.assertEqual(time_amount(35), "35 seconds")
  99. self.assertEqual(time_amount(60), "1 minute")
  100. self.assertEqual(time_amount(120), "2 minutes")
  101. self.assertEqual(time_amount(240), "4 minutes")
  102. self.assertEqual(time_amount(3600), "1 hour")
  103. self.assertEqual(time_amount(7200), "2 hours")
  104. self.assertEqual(time_amount(24 * 3600), "1 day")
  105. self.assertEqual(time_amount(5 * 24 * 3600), "5 days")
  106. def test_double_units(self):
  107. """time_amount return correct amount of time for double precision"""
  108. self.assertEqual(time_amount(61), "1 minute and 1 second")
  109. self.assertEqual(time_amount(90), "1 minute and 30 seconds")
  110. self.assertEqual(time_amount(121), "2 minutes and 1 second")
  111. self.assertEqual(time_amount(150), "2 minutes and 30 seconds")
  112. self.assertEqual(time_amount(3660), "1 hour and 1 minute")
  113. self.assertEqual(time_amount(3720), "1 hour and 2 minutes")
  114. self.assertEqual(time_amount(24 * 3600 + 1), "1 day and 1 second")
  115. self.assertEqual(time_amount(2 * 24 * 3600 + 1), "2 days and 1 second")
  116. self.assertEqual(time_amount(2 * 24 * 3600 + 5),
  117. "2 days and 5 seconds")
  118. self.assertEqual(time_amount(2 * 24 * 3600 + 3 * 3600),
  119. "2 days and 3 hours")
  120. def test_triple_units(self):
  121. """time_amount return correct amount of time for triple precision"""
  122. self.assertEqual(time_amount(3661), "1 hour, 1 minute and 1 second")
  123. self.assertEqual(time_amount(2 * 3661),
  124. "2 hours, 2 minutes and 2 seconds")