123 lines
3.4 KiB
Python
123 lines
3.4 KiB
Python
"""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')
|