diff --git a/tests/test_forms_fields_set.py b/tests/test_forms_fields_set.py index 8140dc24db..9ad7d8c92f 100644 --- a/tests/test_forms_fields_set.py +++ b/tests/test_forms_fields_set.py @@ -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}