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 """)