aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJon Wayne Parrott <jjramone13@gmail.com>2016-03-14 20:50:08 -0700
committerJon Wayne Parrott <jjramone13@gmail.com>2016-03-14 20:55:57 -0700
commit9f9661a8c3909a9f75df729a03b0c5f8c5748bae (patch)
tree5826aa62b6d5e2e9776bac418b2e4af7f0e256a1 /tests
parent93cbde2194088f5bf0729d0ebbadb1e0bdd26b24 (diff)
downloadoauth2client-9f9661a8c3909a9f75df729a03b0c5f8c5748bae.tar.gz
100% coverage for oauth2client.util
Diffstat (limited to 'tests')
-rw-r--r--tests/test_util.py88
1 files changed, 84 insertions, 4 deletions
diff --git a/tests/test_util.py b/tests/test_util.py
index 5a808b4..a01cc9f 100644
--- a/tests/test_util.py
+++ b/tests/test_util.py
@@ -1,6 +1,7 @@
"""Unit tests for oauth2client.util."""
-import unittest
+import mock
+import unittest2
from oauth2client import util
@@ -8,7 +9,65 @@ from oauth2client import util
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
-class ScopeToStringTests(unittest.TestCase):
+
+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))
+ 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))
+ 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))
+ 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 = [
@@ -28,7 +87,7 @@ class ScopeToStringTests(unittest.TestCase):
self.assertEqual(expected, util.scopes_to_string(case))
-class StringToScopeTests(unittest.TestCase):
+class StringToScopeTests(unittest2.TestCase):
def test_conversion(self):
cases = [
@@ -42,5 +101,26 @@ class StringToScopeTests(unittest.TestCase):
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')
+
if __name__ == '__main__': # pragma: NO COVER
- unittest.main()
+ unittest2.main()