| """Unit tests for oauth2client.util.""" | |
| import mock | |
| import unittest2 | |
| from oauth2client import util | |
| __author__ = 'jcgregorio@google.com (Joe Gregorio)' | |
| class PositionalTests(unittest2.TestCase): | |
| def test_usage(self): | |
| util.positional_parameters_enforcement = util.POSITIONAL_EXCEPTION | |
| # 1 positional arg, 1 keyword-only arg. | |
| @util.positional(1) | |
| def fn(pos, kwonly=None): | |
| return True | |
| self.assertTrue(fn(1)) | |
| self.assertTrue(fn(1, kwonly=2)) | |
| with self.assertRaises(TypeError): | |
| fn(1, 2) | |
| # No positional, but a required keyword arg. | |
| @util.positional(0) | |
| def fn2(required_kw): | |
| return True | |
| self.assertTrue(fn2(required_kw=1)) | |
| with self.assertRaises(TypeError): | |
| fn2(1) | |
| # Unspecified positional, should automatically figure out 1 positional | |
| # 1 keyword-only (same as first case above). | |
| @util.positional | |
| def fn3(pos, kwonly=None): | |
| return True | |
| self.assertTrue(fn3(1)) | |
| self.assertTrue(fn3(1, kwonly=2)) | |
| with self.assertRaises(TypeError): | |
| fn3(1, 2) | |
| @mock.patch('oauth2client.util.logger') | |
| def test_enforcement_warning(self, mock_logger): | |
| util.positional_parameters_enforcement = util.POSITIONAL_WARNING | |
| @util.positional(1) | |
| def fn(pos, kwonly=None): | |
| return True | |
| self.assertTrue(fn(1, 2)) | |
| self.assertTrue(mock_logger.warning.called) | |
| @mock.patch('oauth2client.util.logger') | |
| def test_enforcement_ignore(self, mock_logger): | |
| util.positional_parameters_enforcement = util.POSITIONAL_IGNORE | |
| @util.positional(1) | |
| def fn(pos, kwonly=None): | |
| return True | |
| self.assertTrue(fn(1, 2)) | |
| self.assertFalse(mock_logger.warning.called) | |
| class ScopeToStringTests(unittest2.TestCase): | |
| def test_iterables(self): | |
| cases = [ | |
| ('', ''), | |
| ('', ()), | |
| ('', []), | |
| ('', ('',)), | |
| ('', ['', ]), | |
| ('a', ('a',)), | |
| ('b', ['b', ]), | |
| ('a b', ['a', 'b']), | |
| ('a b', ('a', 'b')), | |
| ('a b', 'a b'), | |
| ('a b', (s for s in ['a', 'b'])), | |
| ] | |
| for expected, case in cases: | |
| self.assertEqual(expected, util.scopes_to_string(case)) | |
| class StringToScopeTests(unittest2.TestCase): | |
| def test_conversion(self): | |
| cases = [ | |
| (['a', 'b'], ['a', 'b']), | |
| ('', []), | |
| ('a', ['a']), | |
| ('a b c d e f', ['a', 'b', 'c', 'd', 'e', 'f']), | |
| ] | |
| for case, expected in cases: | |
| self.assertEqual(expected, util.string_to_scopes(case)) | |
| class AddQueryParameterTests(unittest2.TestCase): | |
| def test__add_query_parameter(self): | |
| self.assertEqual( | |
| util._add_query_parameter('/action', 'a', None), | |
| '/action') | |
| self.assertEqual( | |
| util._add_query_parameter('/action', 'a', 'b'), | |
| '/action?a=b') | |
| self.assertEqual( | |
| util._add_query_parameter('/action?a=b', 'a', 'c'), | |
| '/action?a=c') | |
| # Order is non-deterministic. | |
| self.assertIn( | |
| util._add_query_parameter('/action?a=b', 'c', 'd'), | |
| ['/action?a=b&c=d', '/action?c=d&a=b']) | |
| self.assertEqual( | |
| util._add_query_parameter('/action', 'a', ' ='), | |
| '/action?a=+%3D') |