Added a test context manager to log in when doing Flask test client requests
This commit is contained in:
parent
2ad5b20880
commit
791906521f
@ -210,6 +210,11 @@ def login_user(oauth_token: str, *, load_from_db=False):
|
|||||||
user = _load_user(oauth_token)
|
user = _load_user(oauth_token)
|
||||||
else:
|
else:
|
||||||
user = UserClass(oauth_token)
|
user = UserClass(oauth_token)
|
||||||
|
login_user_object(user)
|
||||||
|
|
||||||
|
|
||||||
|
def login_user_object(user: UserClass):
|
||||||
|
"""Log in the given user."""
|
||||||
flask_login.login_user(user, remember=True)
|
flask_login.login_user(user, remember=True)
|
||||||
g.current_user = user
|
g.current_user = user
|
||||||
user_authenticated.send(None)
|
user_authenticated.send(None)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# -*- encoding: utf-8 -*-
|
# -*- encoding: utf-8 -*-
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
|
import contextlib
|
||||||
import copy
|
import copy
|
||||||
import datetime
|
import datetime
|
||||||
import json
|
import json
|
||||||
@ -327,6 +328,31 @@ class AbstractPillarTest(TestMinimal):
|
|||||||
|
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def login_as(self, user_id: typing.Union[str, ObjectId]):
|
||||||
|
"""Context manager, within the context the app context is active and the user logged in.
|
||||||
|
|
||||||
|
The logging-in happens when a request starts, so it's only active when
|
||||||
|
e.g. self.get() or self.post() or somesuch request is used.
|
||||||
|
"""
|
||||||
|
from pillar.auth import UserClass, login_user_object
|
||||||
|
|
||||||
|
if isinstance(user_id, str):
|
||||||
|
user_oid = ObjectId(user_id)
|
||||||
|
elif isinstance(user_id, ObjectId):
|
||||||
|
user_oid = user_id
|
||||||
|
else:
|
||||||
|
raise TypeError(f'invalid type {type(user_id)} for parameter user_id')
|
||||||
|
user_doc = self.fetch_user_from_db(user_oid)
|
||||||
|
|
||||||
|
def signal_handler(sender, **kwargs):
|
||||||
|
login_user_object(user)
|
||||||
|
|
||||||
|
with self.app.app_context():
|
||||||
|
user = UserClass.construct('', user_doc)
|
||||||
|
with flask.request_started.connected_to(signal_handler, self.app):
|
||||||
|
yield
|
||||||
|
|
||||||
def create_valid_auth_token(self, user_id, token='token'):
|
def create_valid_auth_token(self, user_id, token='token'):
|
||||||
from pillar.api.utils import utcnow
|
from pillar.api.utils import utcnow
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user