jurov
2014-12-15 8729b3c625f9914a23dddd9edbef7584e849f40c
commit | author | age
f7efc0 1 import unittest
TS 2
826ba0 3 class AuthenticatedPredicateTests(unittest.TestCase):
f7efc0 4
TS 5     def _getFUT(self):
6         from repoze.who.restrict import authenticated_predicate
7         return authenticated_predicate()
8
9     def test___call___no_identity_returns_False(self):
10         predicate = self._getFUT()
11         environ = {}
826ba0 12         self.assertFalse(predicate(environ))
f7efc0 13
TS 14     def test___call___w_REMOTE_AUTH_returns_True(self):
15         predicate = self._getFUT()
16         environ = {'REMOTE_USER': 'fred'}
826ba0 17         self.assertTrue(predicate(environ))
f7efc0 18
TS 19     def test___call___w_repoze_who_identity_returns_True(self):
20         predicate = self._getFUT()
21         environ = {'repoze.who.identity': {'login': 'fred'}}
826ba0 22         self.assertTrue(predicate(environ))
f7efc0 23
826ba0 24 class MakeAuthenticatedRestrictionTests(unittest.TestCase):
421f0e 25
TS 26     def _getFUT(self):
27         from repoze.who.restrict import make_authenticated_restriction
28         return make_authenticated_restriction
29
30     def test_enabled(self):
31         fut = self._getFUT()
32         app = DummyApp()
33
34         filter = fut(app, {}, enabled=True)
35
826ba0 36         self.assertTrue(filter.app is app)
TS 37         self.assertTrue(filter.enabled)
9c92d9 38         predicate = filter.predicate
826ba0 39         self.assertTrue(predicate({'REMOTE_USER': 'fred'}))
TS 40         self.assertTrue(predicate({'repoze.who.identity': {'login': 'fred'}}))
421f0e 41
826ba0 42 class PredicateRestrictionTests(unittest.TestCase):
f7efc0 43
TS 44     def _getTargetClass(self):
45         from repoze.who.restrict import PredicateRestriction
46         return PredicateRestriction
47
48     def _makeOne(self, app=None, **kw):
49         if app is None:
50             app = DummyApp()
51         return self._getTargetClass()(app, **kw)
52
53     def test___call___disabled_predicate_false_calls_app_not_predicate(self):
54         _tested = []
55         def _factory():
d13829 56             def _predicate(env):  # pragma: no cover
TS 57                 assert False
f7efc0 58             return _predicate
TS 59
60         def _start_response(status, headers):
d13829 61             assert False  # pragma: no cover
f7efc0 62         environ = {'testing': True}
TS 63
64         restrict = self._makeOne(predicate=_factory, enabled=False)
65         restrict(environ, _start_response)
66
67         self.assertEqual(len(_tested), 0)
68         self.assertEqual(restrict.app.environ, environ)
69
70     def test___call___enabled_predicate_false_returns_401(self):
71         _tested = []
72         def _factory():
73             def _predicate(env):
74                 _tested.append(env)
75                 return False
76             return _predicate
77
78         _started = []
79         def _start_response(status, headers):
80             _started.append((status, headers))
81         environ = {'testing': True}
82
83         restrict = self._makeOne(predicate=_factory)
84         restrict(environ, _start_response)
85
86         self.assertEqual(len(_tested), 1)
87         self.assertEqual(len(_started), 1, _started)
88         self.assertEqual(_started[0][0], '401 Unauthorized')
89         self.assertEqual(restrict.app.environ, None)
90
91     def test___call___enabled_predicate_true_calls_app(self):
92         _tested = []
93         def _factory():
94             def _predicate(env):
95                 _tested.append(env)
96                 return True
97             return _predicate
98
99         def _start_response(status, headers):
d13829 100             assert False  # pragma: no cover
f7efc0 101         environ = {'testing': True, 'REMOTE_USER': 'fred'}
TS 102
103         restrict = self._makeOne(predicate=_factory)
104         restrict(environ, _start_response)
105
106         self.assertEqual(len(_tested), 1)
107         self.assertEqual(restrict.app.environ, environ)
108
826ba0 109 class MakePredicateRestrictionTests(unittest.TestCase):
f7efc0 110
TS 111     def _getFUT(self):
112         from repoze.who.restrict import make_predicate_restriction
113         return make_predicate_restriction
114
115     def test_non_string_predicate_no_args(self):
116         fut = self._getFUT()
117         app = DummyApp()
118         def _predicate(env):
d13829 119             return True  # pragma: no cover
f7efc0 120         def _factory():
TS 121             return _predicate
122
123         filter = fut(app, {}, predicate=_factory)
124
826ba0 125         self.assertTrue(filter.app is app)
TS 126         self.assertTrue(filter.predicate is _predicate)
127         self.assertTrue(filter.enabled)
f7efc0 128
TS 129     def test_disabled_non_string_predicate_w_args(self):
130         fut = self._getFUT()
131         app = DummyApp()
132
133         filter = fut(app, {}, predicate=DummyPredicate, enabled=False,
134                      foo='Foo')
135
826ba0 136         self.assertTrue(filter.app is app)
TS 137         self.assertTrue(isinstance(filter.predicate, DummyPredicate))
f7efc0 138         self.assertEqual(filter.predicate.foo, 'Foo')
826ba0 139         self.assertFalse(filter.enabled)
f7efc0 140
TS 141     def test_enabled_string_predicate_w_args(self):
142         fut = self._getFUT()
143         app = DummyApp()
144
145         filter = fut(app, {},
146                      predicate='repoze.who.tests.test_restrict:DummyPredicate',
147                      enabled=True, foo='Foo')
148
826ba0 149         self.assertTrue(filter.app is app)
TS 150         self.assertTrue(isinstance(filter.predicate, DummyPredicate))
f7efc0 151         self.assertEqual(filter.predicate.foo, 'Foo')
826ba0 152         self.assertTrue(filter.enabled)
f7efc0 153
TS 154
d13829 155 class DummyApp(object):
f7efc0 156     environ = None
TS 157     def __call__(self, environ, start_response):
158         self.environ = environ
159         return []
160
d13829 161 class DummyPredicate(object):
f7efc0 162     def __init__(self, **kw):
TS 163         self.__dict__.update(kw)