test_context_processors.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from django.test import TestCase
  2. from .. import context_processors
  3. class MockRequest(object):
  4. path_info = '/'
  5. def __init__(self, secure, host):
  6. self.secure = secure
  7. self.host = host
  8. def is_secure(self):
  9. return self.secure
  10. def get_host(self):
  11. return self.host
  12. class MetaMockRequest(object):
  13. def __init__(self, meta):
  14. self.META = meta
  15. class SiteAddressTests(TestCase):
  16. def test_site_address_for_http(self):
  17. """Correct SITE_ADDRESS set for HTTP request"""
  18. mock_request = MockRequest(False, 'somewhere.com')
  19. self.assertEqual(
  20. context_processors.site_address(mock_request),
  21. {
  22. 'REQUEST_PATH': '/',
  23. 'SITE_ADDRESS': 'http://somewhere.com',
  24. 'SITE_HOST': 'somewhere.com',
  25. 'SITE_PROTOCOL': 'http',
  26. })
  27. def test_site_address_for_https(self):
  28. """Correct SITE_ADDRESS set for HTTPS request"""
  29. mock_request = MockRequest(True, 'somewhere.com')
  30. self.assertEqual(
  31. context_processors.site_address(mock_request),
  32. {
  33. 'REQUEST_PATH': '/',
  34. 'SITE_ADDRESS': 'https://somewhere.com',
  35. 'SITE_HOST': 'somewhere.com',
  36. 'SITE_PROTOCOL': 'https',
  37. })
  38. class InternetExplorerTests(TestCase):
  39. def test_internet_explorer(self):
  40. """frontend_context returns true if user agent contains 'Trident/'"""
  41. IE_USERAGENTS = (
  42. 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
  43. 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)',
  44. 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)',
  45. 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',
  46. 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)',
  47. 'Mozilla/5.0 (IE 11.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko',
  48. 'Mozilla/5.0 (IE 11.0; Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko',
  49. )
  50. NONIE_USERAGENTS = (
  51. 'Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Edge/12.0',
  52. 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.9600',
  53. 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240',
  54. 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10547',
  55. 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; Xbox; Xbox One) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586',
  56. 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 Edge/14.14359',
  57. 'Mozilla/5.0 (Windows; U; Windows NT 5.0; es-ES; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3',
  58. 'Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.7.9) Gecko/20050711 Firefox/1.0.5',
  59. 'Mozilla/5.0 (Windows; Windows NT 6.1; rv:2.0b2) Gecko/20100720 Firefox/4.0b2',
  60. 'Mozilla/5.0 (X11; Linux x86_64; rv:2.0b4) Gecko/20100818 Firefox/4.0b4',
  61. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2) Gecko/20100308 Ubuntu/10.04 (lucid) Firefox/3.6 GTB7.1',
  62. 'Mozilla/5.0 (Linux; Android 4.1; Galaxy Nexus Build/JRN84D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19',
  63. 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3',
  64. 'Mozilla/5.0 (iPad; U; CPU OS 5_1_1 like Mac OS X; en-us) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3',
  65. 'Mozilla/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/55.0.2883.79 Mobile/14C92 Safari/602.1',
  66. 'Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; de-de) AppleWebKit/533.17.9 (KHTML, like Gecko)',
  67. 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A5376e',
  68. )
  69. for useragent in IE_USERAGENTS:
  70. context = context_processors.internet_explorer(MetaMockRequest({
  71. 'HTTP_USER_AGENT': useragent
  72. }))
  73. self.assertEqual(context, {'is_ie': True})
  74. for useragent in NONIE_USERAGENTS:
  75. context = context_processors.internet_explorer(MetaMockRequest({
  76. 'HTTP_USER_AGENT': useragent
  77. }))
  78. self.assertEqual(context, {'is_ie': False})
  79. def test_no_useragent(self):
  80. """no user agent causes no error"""
  81. context = context_processors.internet_explorer(MetaMockRequest({}))
  82. self.assertEqual(context, {'is_ie': False})
  83. def test_empty_useragent(self):
  84. """empty user agent causes no error"""
  85. context = context_processors.internet_explorer(MetaMockRequest({
  86. 'HTTP_USER_AGENT': ''
  87. }))
  88. self.assertEqual(context, {'is_ie': False})
  89. class FrontendContextTests(TestCase):
  90. def test_frontend_context(self):
  91. """frontend_context is available in templates"""
  92. mock_request = MockRequest(False, 'somewhere.com')
  93. mock_request.include_frontend_context = True
  94. mock_request.frontend_context = {'someValue': 'Something'}
  95. self.assertEqual(
  96. context_processors.frontend_context(mock_request),
  97. {'frontend_context': {'someValue': 'Something'}})
  98. mock_request.include_frontend_context = False
  99. self.assertEqual(context_processors.frontend_context(mock_request), {})