from django.utils.functional import lazy
from mock import patch
from django_browserid import helpers
from django_browserid.tests import JSON_STRING, TestCase
def _lazy_request_args():
return {'siteName': 'asdf'}
lazy_request_args = lazy(_lazy_request_args, dict)
class BrowserIDInfoTests(TestCase):
def setUp(self):
patcher = patch('django_browserid.helpers.render_to_string')
self.addCleanup(patcher.stop)
self.render_to_string = patcher.start()
def test_defaults(self):
with self.settings(BROWSERID_REQUEST_ARGS={'foo': 'bar', 'baz': 1}):
output = helpers.browserid_info()
self.assertEqual(output, self.render_to_string.return_value)
expected_info = JSON_STRING({
'loginUrl': '/browserid/login/',
'logoutUrl': '/browserid/logout/',
'csrfUrl': '/browserid/csrf/',
'requestArgs': {'foo': 'bar', 'baz': 1},
})
self.render_to_string.assert_called_with('browserid/info.html', {'info': expected_info})
def test_lazy_request_args(self):
with self.settings(BROWSERID_REQUEST_ARGS=lazy_request_args()):
output = helpers.browserid_info()
self.assertEqual(output, self.render_to_string.return_value)
expected_info = JSON_STRING({
'loginUrl': '/browserid/login/',
'logoutUrl': '/browserid/logout/',
'csrfUrl': '/browserid/csrf/',
'requestArgs': {'siteName': 'asdf'},
})
self.render_to_string.assert_called_with('browserid/info.html', {'info': expected_info})
class BrowserIDJSTests(TestCase):
def test_basic(self):
output = helpers.browserid_js()
self.assertHTMLEqual(output, """
""")
def test_no_shim(self):
output = helpers.browserid_js(include_shim=False)
self.assertHTMLEqual(output, """
""")
def test_custom_shim(self):
with self.settings(BROWSERID_SHIM='http://example.com/test.js'):
output = helpers.browserid_js()
self.assertHTMLEqual(output, """
""")
def test_autologin_email(self):
"""
If BROWSERID_AUTOLOGIN_ENABLED is True, do not include the shim
and include the autologin mock script.
"""
with self.settings(BROWSERID_AUTOLOGIN_ENABLED=True):
output = helpers.browserid_js()
self.assertHTMLEqual(output, """
""")
class BrowserIDCSSTests(TestCase):
def test_basic(self):
output = helpers.browserid_css()
self.assertHTMLEqual(output, """
""")
class BrowserIDButtonTests(TestCase):
def test_basic(self):
button = helpers.browserid_button(text='asdf', next='1234', link_class='fake-button',
href="/test", attrs={'target': '_blank'})
self.assertHTMLEqual(button, """
asdf
""")
def test_json_attrs(self):
button = helpers.browserid_button(text='qwer', next='5678', link_class='fake-button',
attrs='{"target": "_blank"}')
self.assertHTMLEqual(button, """
qwer
""")
class BrowserIDLoginTests(TestCase):
def test_login_class(self):
button = helpers.browserid_login(link_class='go button')
self.assertHTMLEqual(button, """
Sign in
""")
def test_default_class(self):
"""
If no class is provided, it should default to
'browserid-login persona-button'.
"""
button = helpers.browserid_login()
self.assertHTMLEqual(button, """
Sign in
""")
def test_color_class(self):
button = helpers.browserid_login(color='dark')
self.assertHTMLEqual(button, """
Sign in
""")
def test_color_custom_class(self):
"""
If using a color and a custom link class, persona-button should
be added to the link class.
"""
button = helpers.browserid_login(link_class='go button', color='dark')
self.assertHTMLEqual(button, """
Sign in
""")
def test_next(self):
button = helpers.browserid_login(next='/foo/bar')
self.assertHTMLEqual(button, """
Sign in
""")
class BrowserIDLogoutTests(TestCase):
def test_logout_class(self):
button = helpers.browserid_logout(link_class='go button')
self.assertHTMLEqual(button, """
Sign out
""")
def test_next(self):
button = helpers.browserid_logout(next='/foo/bar')
self.assertHTMLEqual(button, """
Sign out
""")