test_helpers.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. from django.utils.functional import lazy
  2. from mock import patch
  3. from django_browserid import helpers
  4. from django_browserid.tests import JSON_STRING, TestCase
  5. def _lazy_request_args():
  6. return {'siteName': 'asdf'}
  7. lazy_request_args = lazy(_lazy_request_args, dict)
  8. class BrowserIDInfoTests(TestCase):
  9. def setUp(self):
  10. patcher = patch('django_browserid.helpers.render_to_string')
  11. self.addCleanup(patcher.stop)
  12. self.render_to_string = patcher.start()
  13. def test_defaults(self):
  14. with self.settings(BROWSERID_REQUEST_ARGS={'foo': 'bar', 'baz': 1}):
  15. output = helpers.browserid_info()
  16. self.assertEqual(output, self.render_to_string.return_value)
  17. expected_info = JSON_STRING({
  18. 'loginUrl': '/browserid/login/',
  19. 'logoutUrl': '/browserid/logout/',
  20. 'csrfUrl': '/browserid/csrf/',
  21. 'requestArgs': {'foo': 'bar', 'baz': 1},
  22. })
  23. self.render_to_string.assert_called_with('browserid/info.html', {'info': expected_info})
  24. def test_lazy_request_args(self):
  25. with self.settings(BROWSERID_REQUEST_ARGS=lazy_request_args()):
  26. output = helpers.browserid_info()
  27. self.assertEqual(output, self.render_to_string.return_value)
  28. expected_info = JSON_STRING({
  29. 'loginUrl': '/browserid/login/',
  30. 'logoutUrl': '/browserid/logout/',
  31. 'csrfUrl': '/browserid/csrf/',
  32. 'requestArgs': {'siteName': 'asdf'},
  33. })
  34. self.render_to_string.assert_called_with('browserid/info.html', {'info': expected_info})
  35. class BrowserIDJSTests(TestCase):
  36. def test_basic(self):
  37. output = helpers.browserid_js()
  38. self.assertHTMLEqual(output, """
  39. <script type="text/javascript" src="https://login.persona.org/include.js"></script>
  40. <script type="text/javascript" src="static/browserid/api.js"></script>
  41. <script type="text/javascript" src="static/browserid/browserid.js"></script>
  42. """)
  43. def test_no_shim(self):
  44. output = helpers.browserid_js(include_shim=False)
  45. self.assertHTMLEqual(output, """
  46. <script type="text/javascript" src="static/browserid/api.js"></script>
  47. <script type="text/javascript" src="static/browserid/browserid.js"></script>
  48. """)
  49. def test_custom_shim(self):
  50. with self.settings(BROWSERID_SHIM='http://example.com/test.js'):
  51. output = helpers.browserid_js()
  52. self.assertHTMLEqual(output, """
  53. <script type="text/javascript" src="http://example.com/test.js"></script>
  54. <script type="text/javascript" src="static/browserid/api.js"></script>
  55. <script type="text/javascript" src="static/browserid/browserid.js"></script>
  56. """)
  57. def test_autologin_email(self):
  58. """
  59. If BROWSERID_AUTOLOGIN_ENABLED is True, do not include the shim
  60. and include the autologin mock script.
  61. """
  62. with self.settings(BROWSERID_AUTOLOGIN_ENABLED=True):
  63. output = helpers.browserid_js()
  64. self.assertHTMLEqual(output, """
  65. <script type="text/javascript" src="static/browserid/api.js"></script>
  66. <script type="text/javascript" src="static/browserid/autologin.js"></script>
  67. <script type="text/javascript" src="static/browserid/browserid.js"></script>
  68. """)
  69. class BrowserIDCSSTests(TestCase):
  70. def test_basic(self):
  71. output = helpers.browserid_css()
  72. self.assertHTMLEqual(output, """
  73. <link rel="stylesheet" href="static/browserid/persona-buttons.css" />
  74. """)
  75. class BrowserIDButtonTests(TestCase):
  76. def test_basic(self):
  77. button = helpers.browserid_button(text='asdf', next='1234', link_class='fake-button',
  78. href="/test", attrs={'target': '_blank'})
  79. self.assertHTMLEqual(button, """
  80. <a href="/test" class="fake-button" data-next="1234" target="_blank">
  81. <span>asdf</span>
  82. </a>
  83. """)
  84. def test_json_attrs(self):
  85. button = helpers.browserid_button(text='qwer', next='5678', link_class='fake-button',
  86. attrs='{"target": "_blank"}')
  87. self.assertHTMLEqual(button, """
  88. <a href="#" class="fake-button" data-next="5678" target="_blank">
  89. <span>qwer</span>
  90. </a>
  91. """)
  92. class BrowserIDLoginTests(TestCase):
  93. def test_login_class(self):
  94. button = helpers.browserid_login(link_class='go button')
  95. self.assertHTMLEqual(button, """
  96. <a href="#" class="go button browserid-login" data-next="">
  97. <span>Sign in</span>
  98. </a>
  99. """)
  100. def test_default_class(self):
  101. """
  102. If no class is provided, it should default to
  103. 'browserid-login persona-button'.
  104. """
  105. button = helpers.browserid_login()
  106. self.assertHTMLEqual(button, """
  107. <a href="#" class="browserid-login persona-button" data-next="">
  108. <span>Sign in</span>
  109. </a>
  110. """)
  111. def test_color_class(self):
  112. button = helpers.browserid_login(color='dark')
  113. self.assertHTMLEqual(button, """
  114. <a href="#" class="browserid-login persona-button dark" data-next="">
  115. <span>Sign in</span>
  116. </a>
  117. """)
  118. def test_color_custom_class(self):
  119. """
  120. If using a color and a custom link class, persona-button should
  121. be added to the link class.
  122. """
  123. button = helpers.browserid_login(link_class='go button', color='dark')
  124. self.assertHTMLEqual(button, """
  125. <a href="#" class="go button browserid-login persona-button dark" data-next="">
  126. <span>Sign in</span>
  127. </a>
  128. """)
  129. def test_next(self):
  130. button = helpers.browserid_login(next='/foo/bar')
  131. self.assertHTMLEqual(button, """
  132. <a href="#" class="browserid-login persona-button" data-next="/foo/bar">
  133. <span>Sign in</span>
  134. </a>
  135. """)
  136. class BrowserIDLogoutTests(TestCase):
  137. def test_logout_class(self):
  138. button = helpers.browserid_logout(link_class='go button')
  139. self.assertHTMLEqual(button, """
  140. <a href="/browserid/logout/" class="go button browserid-logout" data-next="">
  141. <span>Sign out</span>
  142. </a>
  143. """)
  144. def test_next(self):
  145. button = helpers.browserid_logout(next='/foo/bar')
  146. self.assertHTMLEqual(button, """
  147. <a href="/browserid/logout/" class="browserid-logout" data-next="/foo/bar">
  148. <span>Sign out</span>
  149. </a>
  150. """)