diff options
| author | Bert JW Regeer <xistence@0x58.com> | 2020-07-05 20:45:21 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-05 20:45:21 -0700 |
| commit | 5269b28e728a470b94f194bf8febd46278b1f356 (patch) | |
| tree | a7b0f7e1f227bae84baf33240d7ea1831c894ce7 /tests | |
| parent | 48a04855ad4f1f1ae6af934090f35a4ad035ed67 (diff) | |
| parent | 5f37acda1c8af7cb288e792e2c82f728fe254818 (diff) | |
| download | pyramid-5269b28e728a470b94f194bf8febd46278b1f356.tar.gz pyramid-5269b28e728a470b94f194bf8febd46278b1f356.tar.bz2 pyramid-5269b28e728a470b94f194bf8febd46278b1f356.zip | |
Merge pull request #3598 from merwok/feature/is_authenticated
Add Request.is_authenticated and is_authenticated predicate
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_config/test_predicates.py | 53 | ||||
| -rw-r--r-- | tests/test_config/test_routes.py | 12 | ||||
| -rw-r--r-- | tests/test_config/test_views.py | 40 | ||||
| -rw-r--r-- | tests/test_security.py | 23 |
4 files changed, 123 insertions, 5 deletions
diff --git a/tests/test_config/test_predicates.py b/tests/test_config/test_predicates.py index 8017fc898..7e2f32786 100644 --- a/tests/test_config/test_predicates.py +++ b/tests/test_config/test_predicates.py @@ -19,6 +19,7 @@ class TestPredicateList(unittest.TestCase): ('containment', predicates.ContainmentPredicate), ('request_type', predicates.RequestTypePredicate), ('match_param', predicates.MatchParamPredicate), + ('is_authenticated', predicates.IsAuthenticatedPredicate), ('custom', predicates.CustomPredicate), ('traverse', predicates.TraversePredicate), ): @@ -38,6 +39,19 @@ class TestPredicateList(unittest.TestCase): def test_ordering_number_of_predicates(self): from pyramid.config.predicates import predvalseq + order0, _, _ = self._callFUT( + xhr='xhr', + request_method='request_method', + path_info='path_info', + request_param='param', + match_param='foo=bar', + header='header', + accept='accept', + is_authenticated=True, + containment='containment', + request_type='request_type', + custom=predvalseq([DummyCustomPredicate()]), + ) order1, _, _ = self._callFUT( xhr='xhr', request_method='request_method', @@ -121,6 +135,7 @@ class TestPredicateList(unittest.TestCase): ) order11, _, _ = self._callFUT(xhr='xhr') order12, _, _ = self._callFUT() + self.assertTrue(order1 > order0) self.assertEqual(order1, order2) self.assertTrue(order3 > order2) self.assertTrue(order4 > order3) @@ -131,7 +146,7 @@ class TestPredicateList(unittest.TestCase): self.assertTrue(order9 > order8) self.assertTrue(order10 > order9) self.assertTrue(order11 > order10) - self.assertTrue(order12 > order10) + self.assertTrue(order12 > order11) def test_ordering_importance_of_predicates(self): from pyramid.config.predicates import predvalseq @@ -145,7 +160,8 @@ class TestPredicateList(unittest.TestCase): order7, _, _ = self._callFUT(containment='containment') order8, _, _ = self._callFUT(request_type='request_type') order9, _, _ = self._callFUT(match_param='foo=bar') - order10, _, _ = self._callFUT( + order10, _, _ = self._callFUT(is_authenticated=True) + order11, _, _ = self._callFUT( custom=predvalseq([DummyCustomPredicate()]) ) self.assertTrue(order1 > order2) @@ -157,6 +173,7 @@ class TestPredicateList(unittest.TestCase): self.assertTrue(order7 > order8) self.assertTrue(order8 > order9) self.assertTrue(order9 > order10) + self.assertTrue(order10 > order11) def test_ordering_importance_and_number(self): from pyramid.config.predicates import predvalseq @@ -296,6 +313,7 @@ class TestPredicateList(unittest.TestCase): ] ), match_param='foo=bar', + is_authenticated=False, ) self.assertEqual(predicates[0].text(), 'xhr = True') self.assertEqual( @@ -308,9 +326,10 @@ class TestPredicateList(unittest.TestCase): self.assertEqual(predicates[6].text(), 'containment = containment') self.assertEqual(predicates[7].text(), 'request_type = request_type') self.assertEqual(predicates[8].text(), "match_param foo=bar") - self.assertEqual(predicates[9].text(), 'custom predicate') - self.assertEqual(predicates[10].text(), 'classmethod predicate') - self.assertTrue(predicates[11].text().startswith('custom predicate')) + self.assertEqual(predicates[9].text(), "is_authenticated = False") + self.assertEqual(predicates[10].text(), 'custom predicate') + self.assertEqual(predicates[11].text(), 'classmethod predicate') + self.assertTrue(predicates[12].text().startswith('custom predicate')) def test_predicate_text_is_correct_when_multiple(self): _, predicates, _ = self._callFUT( @@ -434,6 +453,30 @@ class TestPredicateList(unittest.TestCase): request.headers = {'foo': 'nobar', 'spamme': 'ham'} self.assertFalse(predicates[0](Dummy(), request)) + def test_is_authenticated_true_matches(self): + _, predicates, _ = self._callFUT(is_authenticated=True) + request = DummyRequest() + request.is_authenticated = True + self.assertTrue(predicates[0](Dummy(), request)) + + def test_is_authenticated_true_fails(self): + _, predicates, _ = self._callFUT(is_authenticated=True) + request = DummyRequest() + request.is_authenticated = False + self.assertFalse(predicates[0](Dummy(), request)) + + def test_is_authenticated_false_matches(self): + _, predicates, _ = self._callFUT(is_authenticated=False) + request = DummyRequest() + request.is_authenticated = False + self.assertTrue(predicates[0](Dummy(), request)) + + def test_is_authenticated_false_fails(self): + _, predicates, _ = self._callFUT(is_authenticated=False) + request = DummyRequest() + request.is_authenticated = True + self.assertFalse(predicates[0](Dummy(), request)) + def test_unknown_predicate(self): from pyramid.exceptions import ConfigurationError diff --git a/tests/test_config/test_routes.py b/tests/test_config/test_routes.py index 8227784ec..605f61857 100644 --- a/tests/test_config/test_routes.py +++ b/tests/test_config/test_routes.py @@ -184,6 +184,18 @@ class RoutesConfiguratorMixinTests(unittest.TestCase): request.params = {} self.assertEqual(predicate(None, request), False) + def test_add_route_with_is_authenticated(self): + config = self._makeOne(autocommit=True) + config.add_route('name', 'path', is_authenticated=True) + route = self._assertRoute(config, 'name', 'path', 1) + predicate = route.predicates[0] + request = self._makeRequest(config) + request.is_authenticated = True + self.assertEqual(predicate(None, request), True) + request = self._makeRequest(config) + request.is_authenticated = False + self.assertEqual(predicate(None, request), False) + def test_add_route_with_custom_predicates(self): import warnings diff --git a/tests/test_config/test_views.py b/tests/test_config/test_views.py index 2a55ad45d..09714d82e 100644 --- a/tests/test_config/test_views.py +++ b/tests/test_config/test_views.py @@ -1742,6 +1742,46 @@ class TestViewsConfigurationMixin(unittest.TestCase): request.is_xhr = False self._assertNotFound(wrapper, None, request) + def test_add_view_with_is_authenticated_true_matches(self): + from pyramid.renderers import null_renderer as nr + + view = lambda *arg: 'OK' + config = self._makeOne(autocommit=True) + config.add_view(view=view, is_authenticated=True, renderer=nr) + wrapper = self._getViewCallable(config) + request = self._makeRequest(config) + request.is_authenticated = True + self.assertEqual(wrapper(None, request), 'OK') + + def test_add_view_with_is_authenticated_true_no_match(self): + view = lambda *arg: 'OK' + config = self._makeOne(autocommit=True) + config.add_view(view=view, is_authenticated=True) + wrapper = self._getViewCallable(config) + request = self._makeRequest(config) + request.is_authenticated = False + self._assertNotFound(wrapper, None, request) + + def test_add_view_with_is_authenticated_false_matches(self): + from pyramid.renderers import null_renderer as nr + + view = lambda *arg: 'OK' + config = self._makeOne(autocommit=True) + config.add_view(view=view, is_authenticated=False, renderer=nr) + wrapper = self._getViewCallable(config) + request = self._makeRequest(config) + request.is_authenticated = False + self.assertEqual(wrapper(None, request), 'OK') + + def test_add_view_with_is_authenticated_false_no_match(self): + view = lambda *arg: 'OK' + config = self._makeOne(autocommit=True) + config.add_view(view=view, is_authenticated=False) + wrapper = self._getViewCallable(config) + request = self._makeRequest(config) + request.is_authenticated = True + self._assertNotFound(wrapper, None, request) + def test_add_view_with_header_badregex(self): view = lambda *arg: 'OK' config = self._makeOne() diff --git a/tests/test_security.py b/tests/test_security.py index bf2908100..72598f570 100644 --- a/tests/test_security.py +++ b/tests/test_security.py @@ -393,6 +393,29 @@ class TestUnAuthenticatedUserId(unittest.TestCase): self.assertEqual(request.unauthenticated_userid, 'wat') +class TestIsAuthenticated(unittest.TestCase): + def setUp(self): + testing.setUp() + + def tearDown(self): + testing.tearDown() + + def test_no_security_policy(self): + request = _makeRequest() + self.assertIs(request.is_authenticated, False) + + def test_with_security_policy(self): + request = _makeRequest() + _registerSecurityPolicy(request.registry, '123') + self.assertIs(request.is_authenticated, True) + + def test_with_legacy_security_policy(self): + request = _makeRequest() + _registerAuthenticationPolicy(request.registry, 'yo') + _registerLegacySecurityPolicy(request.registry) + self.assertEqual(request.authenticated_userid, 'yo') + + class TestEffectivePrincipals(unittest.TestCase): def setUp(self): testing.setUp() |
