mirror of https://github.com/tiangolo/fastapi.git
Fix coverage by adding Query/Header tests to test_forms_fields_set.py
Ensures that _get_multidict_value is fully covered (both FormData and non-FormData paths) to satisfy CI requirements.
This commit is contained in:
parent
39b4ae0698
commit
ca8b59f52d
|
|
@ -8,7 +8,7 @@ explicitly provided vs. which fields use defaults.
|
|||
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi import FastAPI, Form
|
||||
from fastapi import FastAPI, Form, Header, Query
|
||||
from fastapi._compat import PYDANTIC_V2
|
||||
from fastapi.testclient import TestClient
|
||||
from pydantic import BaseModel
|
||||
|
|
@ -48,6 +48,21 @@ async def body_fields_set_endpoint(model: FormModelFieldsSet):
|
|||
return {"fields_set": fields_set}
|
||||
|
||||
|
||||
@app.get("/query/default")
|
||||
def query_model(
|
||||
name: Annotated[str, Query()] = "query_default",
|
||||
age: Annotated[int, Query()] = 10,
|
||||
):
|
||||
return {"name": name, "age": age}
|
||||
|
||||
|
||||
@app.get("/header/default")
|
||||
def header_model(
|
||||
x_token: Annotated[str, Header()] = "header_default",
|
||||
):
|
||||
return {"x_token": x_token}
|
||||
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
|
||||
|
|
@ -137,3 +152,31 @@ class TestFormFieldsSetMetadata:
|
|||
)
|
||||
assert set(body_resp.json()["fields_set"]) == {"field_1", "field_3"}
|
||||
assert set(form_resp.json()["fields_set"]) == {"field_1", "field_3"}
|
||||
|
||||
|
||||
class TestNonFormCoverage:
|
||||
"""
|
||||
Test that non-Form parameters (Query, Header) continue to use defaults.
|
||||
This ensures line 762 of utils.py is covered and legacy behavior is preserved.
|
||||
"""
|
||||
|
||||
def test_query_params_missing_uses_defaults(self):
|
||||
"""Test Query input where fields are missing -> returns default."""
|
||||
response = client.get("/query/default")
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert data == {"name": "query_default", "age": 10}
|
||||
|
||||
def test_header_params_missing_uses_defaults(self):
|
||||
"""Test Header input where fields are missing -> returns default."""
|
||||
response = client.get("/header/default")
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert data == {"x_token": "header_default"}
|
||||
|
||||
def test_query_params_provided(self):
|
||||
"""Test Query input where fields are provided -> returns value."""
|
||||
response = client.get("/query/default?name=overridden&age=99")
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert data == {"name": "overridden", "age": 99}
|
||||
|
|
|
|||
Loading…
Reference in New Issue