mirror of https://github.com/tiangolo/fastapi.git
🐛 Fix testing security scopes when using dependency overrides (#1549)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
This commit is contained in:
parent
530fc8ff3f
commit
7dd881334d
|
|
@ -500,6 +500,7 @@ async def solve_dependencies(
|
||||||
name=sub_dependant.name,
|
name=sub_dependant.name,
|
||||||
security_scopes=sub_dependant.security_scopes,
|
security_scopes=sub_dependant.security_scopes,
|
||||||
)
|
)
|
||||||
|
use_sub_dependant.security_scopes = sub_dependant.security_scopes
|
||||||
|
|
||||||
solved_result = await solve_dependencies(
|
solved_result = await solve_dependencies(
|
||||||
request=request,
|
request=request,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
from typing import List, Tuple
|
||||||
|
|
||||||
|
from fastapi import Depends, FastAPI, Security
|
||||||
|
from fastapi.security import SecurityScopes
|
||||||
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
|
app = FastAPI()
|
||||||
|
|
||||||
|
|
||||||
|
def get_user(required_scopes: SecurityScopes):
|
||||||
|
return "john", required_scopes.scopes
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_override(required_scopes: SecurityScopes):
|
||||||
|
return "alice", required_scopes.scopes
|
||||||
|
|
||||||
|
|
||||||
|
def get_data():
|
||||||
|
return [1, 2, 3]
|
||||||
|
|
||||||
|
|
||||||
|
def get_data_override():
|
||||||
|
return [3, 4, 5]
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/user")
|
||||||
|
def read_user(
|
||||||
|
user_data: Tuple[str, List[str]] = Security(get_user, scopes=["foo", "bar"]),
|
||||||
|
data: List[int] = Depends(get_data),
|
||||||
|
):
|
||||||
|
return {"user": user_data[0], "scopes": user_data[1], "data": data}
|
||||||
|
|
||||||
|
|
||||||
|
client = TestClient(app)
|
||||||
|
|
||||||
|
|
||||||
|
def test_normal():
|
||||||
|
response = client.get("/user")
|
||||||
|
assert response.json() == {
|
||||||
|
"user": "john",
|
||||||
|
"scopes": ["foo", "bar"],
|
||||||
|
"data": [1, 2, 3],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_override_data():
|
||||||
|
app.dependency_overrides[get_data] = get_data_override
|
||||||
|
response = client.get("/user")
|
||||||
|
assert response.json() == {
|
||||||
|
"user": "john",
|
||||||
|
"scopes": ["foo", "bar"],
|
||||||
|
"data": [3, 4, 5],
|
||||||
|
}
|
||||||
|
app.dependency_overrides = {}
|
||||||
|
|
||||||
|
|
||||||
|
def test_override_security():
|
||||||
|
app.dependency_overrides[get_user] = get_user_override
|
||||||
|
response = client.get("/user")
|
||||||
|
assert response.json() == {
|
||||||
|
"user": "alice",
|
||||||
|
"scopes": ["foo", "bar"],
|
||||||
|
"data": [1, 2, 3],
|
||||||
|
}
|
||||||
|
app.dependency_overrides = {}
|
||||||
Loading…
Reference in New Issue