2 changed files with 61 additions and 4 deletions
@ -0,0 +1,57 @@ |
|||||
|
import pytest |
||||
|
from fastapi import Depends, FastAPI, Security, WebSocket |
||||
|
from fastapi.security import APIKeyCookie |
||||
|
from fastapi.testclient import TestClient |
||||
|
from pydantic import BaseModel |
||||
|
from starlette.testclient import WebSocketDenialResponse |
||||
|
|
||||
|
app = FastAPI() |
||||
|
|
||||
|
api_key = APIKeyCookie(name="key") |
||||
|
|
||||
|
|
||||
|
class User(BaseModel): |
||||
|
username: str |
||||
|
|
||||
|
|
||||
|
def get_current_user(oauth_header: str = Security(api_key)): |
||||
|
return User(username=oauth_header) |
||||
|
|
||||
|
|
||||
|
@app.websocket("/ws") |
||||
|
async def websocket_endpoint( |
||||
|
websocket: WebSocket, |
||||
|
current_user: User = Depends(get_current_user), |
||||
|
): |
||||
|
await websocket.accept() |
||||
|
data = await websocket.receive_text() |
||||
|
await websocket.send_text(f"{data}:{current_user.username}") |
||||
|
|
||||
|
|
||||
|
def test_security_api_key(): |
||||
|
client = TestClient(app, cookies={"key": "secret"}) |
||||
|
with client.websocket_connect("/ws") as websocket: |
||||
|
message = "test" |
||||
|
websocket.send_text(message) |
||||
|
data = websocket.receive_text() |
||||
|
assert data == f"{message}:{client.cookies['key']}" |
||||
|
|
||||
|
|
||||
|
def test_security_api_key_no_key(): |
||||
|
client = TestClient(app) |
||||
|
|
||||
|
with pytest.raises(WebSocketDenialResponse) as exc: |
||||
|
with client.websocket_connect("/ws"): |
||||
|
pass |
||||
|
assert exc.value.status_code == 403, exc.value.text |
||||
|
|
||||
|
|
||||
|
def test_openapi_schema(): |
||||
|
client = TestClient(app) |
||||
|
response = client.get("/openapi.json") |
||||
|
assert response.status_code == 200, response.text |
||||
|
assert response.json() == { |
||||
|
"openapi": "3.1.0", |
||||
|
"info": {"title": "FastAPI", "version": "0.1.0"}, |
||||
|
"paths": {}, |
||||
|
} |
Loading…
Reference in new issue