Browse Source
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sebastián Ramírez <[email protected]>pull/14432/head
committed by
GitHub
3 changed files with 121 additions and 3 deletions
@ -0,0 +1,111 @@ |
|||
from fastapi import Cookie, FastAPI, Header, Query |
|||
from fastapi._compat import PYDANTIC_V2 |
|||
from fastapi.testclient import TestClient |
|||
from pydantic import BaseModel |
|||
|
|||
app = FastAPI() |
|||
|
|||
|
|||
class Model(BaseModel): |
|||
param: str |
|||
|
|||
if PYDANTIC_V2: |
|||
model_config = {"extra": "allow"} |
|||
else: |
|||
|
|||
class Config: |
|||
extra = "allow" |
|||
|
|||
|
|||
@app.get("/query") |
|||
async def query_model_with_extra(data: Model = Query()): |
|||
return data |
|||
|
|||
|
|||
@app.get("/header") |
|||
async def header_model_with_extra(data: Model = Header()): |
|||
return data |
|||
|
|||
|
|||
@app.get("/cookie") |
|||
async def cookies_model_with_extra(data: Model = Cookie()): |
|||
return data |
|||
|
|||
|
|||
def test_query_pass_extra_list(): |
|||
client = TestClient(app) |
|||
resp = client.get( |
|||
"/query", |
|||
params={ |
|||
"param": "123", |
|||
"param2": ["456", "789"], # Pass a list of values as extra parameter |
|||
}, |
|||
) |
|||
assert resp.status_code == 200 |
|||
assert resp.json() == { |
|||
"param": "123", |
|||
"param2": ["456", "789"], |
|||
} |
|||
|
|||
|
|||
def test_query_pass_extra_single(): |
|||
client = TestClient(app) |
|||
resp = client.get( |
|||
"/query", |
|||
params={ |
|||
"param": "123", |
|||
"param2": "456", |
|||
}, |
|||
) |
|||
assert resp.status_code == 200 |
|||
assert resp.json() == { |
|||
"param": "123", |
|||
"param2": "456", |
|||
} |
|||
|
|||
|
|||
def test_header_pass_extra_list(): |
|||
client = TestClient(app) |
|||
|
|||
resp = client.get( |
|||
"/header", |
|||
headers=[ |
|||
("param", "123"), |
|||
("param2", "456"), # Pass a list of values as extra parameter |
|||
("param2", "789"), |
|||
], |
|||
) |
|||
assert resp.status_code == 200 |
|||
resp_json = resp.json() |
|||
assert "param2" in resp_json |
|||
assert resp_json["param2"] == ["456", "789"] |
|||
|
|||
|
|||
def test_header_pass_extra_single(): |
|||
client = TestClient(app) |
|||
|
|||
resp = client.get( |
|||
"/header", |
|||
headers=[ |
|||
("param", "123"), |
|||
("param2", "456"), |
|||
], |
|||
) |
|||
assert resp.status_code == 200 |
|||
resp_json = resp.json() |
|||
assert "param2" in resp_json |
|||
assert resp_json["param2"] == "456" |
|||
|
|||
|
|||
def test_cookie_pass_extra_list(): |
|||
client = TestClient(app) |
|||
client.cookies = [ |
|||
("param", "123"), |
|||
("param2", "456"), # Pass a list of values as extra parameter |
|||
("param2", "789"), |
|||
] |
|||
resp = client.get("/cookie") |
|||
assert resp.status_code == 200 |
|||
resp_json = resp.json() |
|||
assert "param2" in resp_json |
|||
assert resp_json["param2"] == "789" # Cookies only keep the last value |
|||
Loading…
Reference in new issue