@@ -147,3 +147,47 @@ def test_enforcer_set_watcher(enforcer, watcher):
147147 assert enforcer .e .watcher is None
148148 enforcer .set_watcher (watcher ())
149149 assert isinstance (enforcer .e .watcher , watcher )
150+
151+
152+ @pytest .mark .parametrize (
153+ "owner, method, status" ,
154+ [
155+ (["alice" ], "GET" , 200 ),
156+ (["alice" ], "POST" , 201 ),
157+ (["alice" ], "DELETE" , 202 ),
158+ (["bob" ], "GET" , 200 ),
159+ (["bob" ], "POST" , 401 ),
160+ (["bob" ], "DELETE" , 401 ),
161+ (["admin" ], "GET" , 401 ),
162+ (["users" ], "GET" , 200 ),
163+ (["alice" , "bob" ], "POST" , 201 ),
164+ (["noexist" , "testnoexist" ], "POST" , 401 ),
165+ ],
166+ )
167+ def test_enforcer_with_owner_loader (app_fixture , enforcer , owner , method , status ):
168+ @app_fixture .route ("/" )
169+ @enforcer .enforcer
170+ def index ():
171+ return jsonify ({"message" : "passed" }), 200
172+
173+ @app_fixture .route ("/item" , methods = ["GET" , "POST" , "DELETE" ])
174+ @enforcer .enforcer
175+ def item ():
176+ if request .method == "GET" :
177+ return jsonify ({"message" : "passed" }), 200
178+ elif request .method == "POST" :
179+ return jsonify ({"message" : "passed" }), 201
180+ elif request .method == "DELETE" :
181+ return jsonify ({"message" : "passed" }), 202
182+
183+ @enforcer .owner_loader
184+ def owner_loader ():
185+ return owner
186+
187+ c = app_fixture .test_client ()
188+ # c.post('/add', data=dict(title='2nd Item', text='The text'))
189+ rv = c .get ("/" )
190+ assert rv .status_code == 401
191+ caller = getattr (c , method .lower ())
192+ rv = caller ("/item" )
193+ assert rv .status_code == status
0 commit comments