Skip to content

Commit eb8a023

Browse files
committed
Move auth and session test client logic to their packages for now
1 parent 3f5141f commit eb8a023

4 files changed

Lines changed: 67 additions & 45 deletions

File tree

plain-auth/plain/auth/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
from .sessions import get_user, get_user_model, login, logout
22

3-
__all__ = ["login", "logout", "get_user_model", "get_user"]
3+
__all__ = [
4+
"login",
5+
"logout",
6+
"get_user_model",
7+
"get_user",
8+
]

plain-auth/plain/auth/test.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from http.cookies import SimpleCookie
2+
3+
from plain.http.request import HttpRequest
4+
from plain.runtime import settings
5+
from plain.sessions import SessionStore
6+
7+
from .sessions import get_user, login, logout
8+
9+
10+
def login_client(client, user):
11+
"""Log a user into a test client."""
12+
request = HttpRequest()
13+
if client.session:
14+
request.session = client.session
15+
else:
16+
request.session = SessionStore()
17+
login(request, user)
18+
request.session.save()
19+
session_cookie = settings.SESSION_COOKIE_NAME
20+
client.cookies[session_cookie] = request.session.session_key
21+
cookie_data = {
22+
"max-age": None,
23+
"path": "/",
24+
"domain": settings.SESSION_COOKIE_DOMAIN,
25+
"secure": settings.SESSION_COOKIE_SECURE or None,
26+
"expires": None,
27+
}
28+
client.cookies[session_cookie].update(cookie_data)
29+
30+
31+
def logout_client(client):
32+
"""Log out a user from a test client."""
33+
request = HttpRequest()
34+
if client.session:
35+
request.session = client.session
36+
request.user = get_user(request)
37+
else:
38+
request.session = SessionStore()
39+
logout(request)
40+
client.cookies = SimpleCookie()
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from plain.runtime import settings
2+
3+
from .core import SessionStore
4+
5+
6+
def get_client_session(client):
7+
"""Return the current session variables for a test client."""
8+
cookie = client.cookies.get(settings.SESSION_COOKIE_NAME)
9+
if cookie:
10+
return SessionStore(cookie.value)
11+
session = SessionStore()
12+
session.save()
13+
client.cookies[settings.SESSION_COOKIE_NAME] = session.session_key
14+
return session

plain/plain/test/client.py

Lines changed: 7 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from io import BytesIO, IOBase
77
from urllib.parse import unquote_to_bytes, urljoin, urlparse, urlsplit
88

9-
from plain.http import HttpHeaders, HttpRequest, QueryDict
9+
from plain.http import HttpHeaders, QueryDict
1010
from plain.internal import internalcode
1111
from plain.internal.handlers.base import BaseHandler
1212
from plain.internal.handlers.wsgi import WSGIRequest
@@ -775,57 +775,20 @@ def check_exception(self, response):
775775
@property
776776
def session(self):
777777
"""Return the current session variables."""
778-
from plain.sessions import SessionStore
778+
from plain.sessions.test import get_client_session
779779

780-
cookie = self.cookies.get(settings.SESSION_COOKIE_NAME)
781-
if cookie:
782-
return SessionStore(cookie.value)
783-
session = SessionStore()
784-
session.save()
785-
self.cookies[settings.SESSION_COOKIE_NAME] = session.session_key
786-
return session
780+
return get_client_session(self)
787781

788782
def force_login(self, user):
789-
self._login(user)
783+
from plain.auth.test import login_client
790784

791-
def _login(self, user):
792-
from plain.auth import login
793-
from plain.sessions import SessionStore
794-
795-
# Create a fake request to store login details.
796-
request = HttpRequest()
797-
if self.session:
798-
request.session = self.session
799-
else:
800-
request.session = SessionStore()
801-
login(request, user)
802-
# Save the session values.
803-
request.session.save()
804-
# Set the cookie to represent the session.
805-
session_cookie = settings.SESSION_COOKIE_NAME
806-
self.cookies[session_cookie] = request.session.session_key
807-
cookie_data = {
808-
"max-age": None,
809-
"path": "/",
810-
"domain": settings.SESSION_COOKIE_DOMAIN,
811-
"secure": settings.SESSION_COOKIE_SECURE or None,
812-
"expires": None,
813-
}
814-
self.cookies[session_cookie].update(cookie_data)
785+
login_client(self, user)
815786

816787
def logout(self):
817788
"""Log out the user by removing the cookies and session object."""
818-
from plain.auth import get_user, logout
819-
from plain.sessions import SessionStore
789+
from plain.auth.test import logout_client
820790

821-
request = HttpRequest()
822-
if self.session:
823-
request.session = self.session
824-
request.user = get_user(request)
825-
else:
826-
request.session = SessionStore()
827-
logout(request)
828-
self.cookies = SimpleCookie()
791+
logout_client(self)
829792

830793
def _parse_json(self, response, **extra):
831794
if not hasattr(response, "_json"):

0 commit comments

Comments
 (0)