Skip to content

Commit 9ee5c59

Browse files
committed
add test websocket query or path token
1 parent 0b31d2e commit 9ee5c59

File tree

2 files changed

+133
-0
lines changed

2 files changed

+133
-0
lines changed

tests/test_decode_token.py

+3
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ def test_get_raw_token(client,default_access_token,encoded_token):
116116
assert response.status_code == 200
117117
assert response.json() == default_access_token
118118

119+
def test_get_raw_jwt(default_access_token,encoded_token,Authorize):
120+
assert Authorize.get_raw_jwt(encoded_token) == default_access_token
121+
119122
def test_get_jwt_jti(client,default_access_token,encoded_token,Authorize):
120123
assert Authorize.get_jti(encoded_token=encoded_token) == default_access_token['jti']
121124

tests/test_websocket.py

+130
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
import pytest
2+
from fastapi_jwt_auth import AuthJWT
3+
from fastapi_jwt_auth.exceptions import AuthJWTException
4+
from fastapi import FastAPI, Depends, WebSocket, Query
5+
from fastapi.testclient import TestClient
6+
7+
@pytest.fixture(scope='function')
8+
def client():
9+
app = FastAPI()
10+
11+
@app.websocket('/jwt-required')
12+
async def websocket_jwt_required(
13+
websocket: WebSocket,
14+
token: str = Query(...),
15+
Authorize: AuthJWT = Depends()
16+
):
17+
await websocket.accept()
18+
try:
19+
Authorize.jwt_required("websocket",token=token)
20+
await websocket.send_text("Successfully Login!")
21+
except AuthJWTException as err:
22+
await websocket.send_text(err.message)
23+
await websocket.close()
24+
25+
@app.websocket('/jwt-optional')
26+
async def websocket_jwt_optional(
27+
websocket: WebSocket,
28+
token: str = Query(...),
29+
Authorize: AuthJWT = Depends()
30+
):
31+
await websocket.accept()
32+
try:
33+
Authorize.jwt_optional("websocket",token=token)
34+
decoded_token = Authorize.get_raw_jwt(token)
35+
if decoded_token:
36+
await websocket.send_text("hello world")
37+
await websocket.send_text("hello anonym")
38+
except AuthJWTException as err:
39+
await websocket.send_text(err.message)
40+
await websocket.close()
41+
42+
@app.websocket('/jwt-refresh-required')
43+
async def websocket_jwt_refresh_required(
44+
websocket: WebSocket,
45+
token: str = Query(...),
46+
Authorize: AuthJWT = Depends()
47+
):
48+
await websocket.accept()
49+
try:
50+
Authorize.jwt_refresh_token_required("websocket",token=token)
51+
await websocket.send_text("Successfully Login!")
52+
except AuthJWTException as err:
53+
await websocket.send_text(err.message)
54+
await websocket.close()
55+
56+
@app.websocket('/fresh-jwt-required')
57+
async def websocket_fresh_jwt_required(
58+
websocket: WebSocket,
59+
token: str = Query(...),
60+
Authorize: AuthJWT = Depends()
61+
):
62+
await websocket.accept()
63+
try:
64+
Authorize.fresh_jwt_required("websocket",token=token)
65+
await websocket.send_text("Successfully Login!")
66+
except AuthJWTException as err:
67+
await websocket.send_text(err.message)
68+
await websocket.close()
69+
70+
client = TestClient(app)
71+
return client
72+
73+
@pytest.mark.parametrize("url",["/jwt-required","/jwt-refresh-required","/fresh-jwt-required"])
74+
def test_missing_token_websocket(client,url):
75+
token_type = "access" if url != "/jwt-refresh-required" else "refresh"
76+
with client.websocket_connect(url + "?token=") as websocket:
77+
data = websocket.receive_text()
78+
assert data == f"Missing {token_type} token from Query or Path"
79+
80+
@pytest.mark.parametrize("url",["/jwt-required","/jwt-optional","/fresh-jwt-required"])
81+
def test_only_access_token_allowed_websocket(client,url,Authorize):
82+
token = Authorize.create_refresh_token(subject='test')
83+
with client.websocket_connect(url + f"?token={token}") as websocket:
84+
data = websocket.receive_text()
85+
assert data == 'Only access tokens are allowed'
86+
87+
def test_jwt_required_websocket(client,Authorize):
88+
url = '/jwt-required'
89+
token = Authorize.create_access_token(subject='test')
90+
with client.websocket_connect(url + f"?token={token}") as websocket:
91+
data = websocket.receive_text()
92+
assert data == 'Successfully Login!'
93+
94+
def test_jwt_optional_websocket(client,Authorize):
95+
url = '/jwt-optional'
96+
# if token not define return anonym user
97+
with client.websocket_connect(url + "?token=") as websocket:
98+
data = websocket.receive_text()
99+
assert data == "hello anonym"
100+
101+
token = Authorize.create_access_token(subject='test')
102+
with client.websocket_connect(url + f"?token={token}") as websocket:
103+
data = websocket.receive_text()
104+
assert data == "hello world"
105+
106+
def test_refresh_required_websocket(client,Authorize):
107+
url = '/jwt-refresh-required'
108+
# only refresh token allowed
109+
token = Authorize.create_access_token(subject='test')
110+
with client.websocket_connect(url + f"?token={token}") as websocket:
111+
data = websocket.receive_text()
112+
assert data == "Only refresh tokens are allowed"
113+
114+
token = Authorize.create_refresh_token(subject='test')
115+
with client.websocket_connect(url + f"?token={token}") as websocket:
116+
data = websocket.receive_text()
117+
assert data == "Successfully Login!"
118+
119+
def test_fresh_jwt_required_websocket(client,Authorize):
120+
url = '/fresh-jwt-required'
121+
# only fresh token allowed
122+
token = Authorize.create_access_token(subject='test')
123+
with client.websocket_connect(url + f"?token={token}") as websocket:
124+
data = websocket.receive_text()
125+
assert data == "Fresh token required"
126+
127+
token = Authorize.create_access_token(subject='test',fresh=True)
128+
with client.websocket_connect(url + f"?token={token}") as websocket:
129+
data = websocket.receive_text()
130+
assert data == "Successfully Login!"

0 commit comments

Comments
 (0)