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) |