Skip to content

Commit ee096c3

Browse files
committed
test: Add verify_session test for Django
1 parent 18933c7 commit ee096c3

File tree

3 files changed

+45
-4
lines changed

3 files changed

+45
-4
lines changed

supertokens_python/recipe/session/framework/fastapi/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ async def func(request: Request) -> Union[SessionContainer, None]:
6464
return func
6565

6666

67-
async def st_exception_handler(request: Request, exc: SuperTokensError) -> JSONResponse:
67+
async def session_exception_handler(request: Request, exc: SuperTokensError) -> JSONResponse:
6868
"""FastAPI exceptional handler for errors raised by Supertokens SDK when not using middleware
6969
7070
Usage: `app.add_exception_handler(SuperTokensError, st_exception_handler)`

tests/Django/test_django.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@
3333
create_new_session,
3434
get_session,
3535
refresh_session,
36+
create_new_session_without_request_response,
3637
)
3738
from supertokens_python.recipe.session.framework.django.asyncio import verify_session
3839

3940
import pytest
40-
from tests.utils import clean_st, reset, setup_st, start_st, create_users
41+
from tests.utils import clean_st, reset, setup_st, start_st, create_users, get_st_init_args
4142
from supertokens_python.recipe.dashboard import DashboardRecipe, InputOverrideConfig
4243
from supertokens_python.recipe.dashboard.interfaces import RecipeInterface
4344
from supertokens_python.framework import BaseRequest
@@ -111,6 +112,11 @@ async def optional_session(request: HttpRequest):
111112
return JsonResponse({"s": session.get_handle()})
112113

113114

115+
@verify_session()
116+
async def verify_view(request: HttpRequest):
117+
session: SessionContainer = request.supertokens # type: ignore
118+
return JsonResponse({"handle": session.get_handle()}) # type: ignore
119+
114120
class SupertokensTest(TestCase):
115121
def setUp(self):
116122
self.factory = RequestFactory()
@@ -874,6 +880,41 @@ async def test_search_with_provider_google_and_phone_one(self):
874880
data_json = json.loads(response.content)
875881
self.assertEqual(len(data_json["users"]), 0)
876882

883+
async def test_that_verify_session_return_401_if_access_token_is_not_sent_and_middleware_is_not_added(self):
884+
args = get_st_init_args([session.init(get_token_transfer_method=lambda *_: "header")]) # type: ignore
885+
args.update({"framework": "django"})
886+
init(**args) # type: ignore
887+
start_st()
888+
889+
# Try with middleware
890+
request = self.factory.get("/verify")
891+
response = await middleware(verify_view)(request)
892+
assert response.status_code == 401
893+
assert json.loads(response.content) == {"message": "unauthorised"}
894+
895+
# Try without middleware
896+
request = self.factory.get("/verify")
897+
response = await verify_view(request)
898+
assert response.status_code == 401
899+
assert json.loads(response.content) == {"message": "unauthorised"}
900+
901+
# Create a session and get access token
902+
s = await create_new_session_without_request_response("userId", {}, {})
903+
access_token = s.get_access_token()
904+
headers = {"HTTP_AUTHORIZATION": "Bearer " + access_token}
905+
906+
# Now try with middleware:
907+
request = self.factory.get("/verify", {}, **headers)
908+
response = await middleware(verify_view)(request)
909+
assert response.status_code == 200
910+
assert list(json.loads(response.content)) == ["handle"]
911+
912+
# Now try without middleware:
913+
request = self.factory.get("/verify", **headers)
914+
response = await verify_view(request)
915+
assert response.status_code == 200
916+
assert list(json.loads(response.content)) == ["handle"]
917+
877918

878919
def test_remove_header_works():
879920
response = HttpResponse()

tests/sessions/claims/test_verify_session.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
)
1717
from supertokens_python.recipe.session.framework.fastapi import (
1818
verify_session,
19-
st_exception_handler,
19+
session_exception_handler,
2020
)
2121
from supertokens_python.exceptions import SuperTokensError
2222
from supertokens_python.recipe.session.interfaces import (
@@ -550,7 +550,7 @@ async def client_without_middleware():
550550
async def _verify(s: Session = Depends(verify_session())): # type: ignore
551551
return {"handle": s.get_handle()}
552552

553-
app.add_exception_handler(SuperTokensError, st_exception_handler) # type: ignore
553+
app.add_exception_handler(SuperTokensError, session_exception_handler) # type: ignore
554554

555555
return TestClient(app)
556556

0 commit comments

Comments
 (0)