Browse Source

📝 Add test to cover mixed param model openapi metadata branches

pull/15130/head
Maksim Zayats 4 months ago
parent
commit
99d7d2a916
  1. 57
      tests/test_query_cookie_header_param_models_with_siblings.py

57
tests/test_query_cookie_header_param_models_with_siblings.py

@ -35,6 +35,17 @@ def read_query_mixed(
return {"m": m.model_dump(), "extra": extra} return {"m": m.model_dump(), "extra": extra}
@app.get("/query/openapi-metadata")
def read_query_openapi_metadata(
m: Annotated[QueryModel, Query()],
documented_query: Annotated[
str | None,
Query(description="Documented query", deprecated=True),
] = None,
):
return {"m": m.model_dump(), "documented_query": documented_query}
@app.get("/header/only") @app.get("/header/only")
def read_header_only(h: Annotated[HeaderModel, Header()]): def read_header_only(h: Annotated[HeaderModel, Header()]):
return {"h": h.model_dump()} return {"h": h.model_dump()}
@ -56,6 +67,26 @@ def read_header_mixed_no_convert(
return {"h": h.model_dump(), "extra": extra} return {"h": h.model_dump(), "extra": extra}
@app.get("/header/openapi-metadata")
def read_header_openapi_metadata(
h: Annotated[HeaderModel, Header()],
hidden_header: Annotated[str | None, Header(include_in_schema=False)] = None,
documented_header: Annotated[
str | None,
Header(
description="Documented header",
openapi_examples={"demo": {"summary": "Demo", "value": "abc"}},
deprecated=True,
),
] = None,
):
return {
"h": h.model_dump(),
"hidden_header": hidden_header,
"documented_header": documented_header,
}
@app.get("/cookie/only") @app.get("/cookie/only")
def read_cookie_only(c: Annotated[CookieModel, Cookie()]): def read_cookie_only(c: Annotated[CookieModel, Cookie()]):
return {"c": c.model_dump()} return {"c": c.model_dump()}
@ -107,6 +138,15 @@ def test_query_model_with_sibling_param_openapi():
assert "m" not in parameter_names assert "m" not in parameter_names
def test_query_openapi_metadata():
parameters = app.openapi()["paths"]["/query/openapi-metadata"]["get"]["parameters"]
documented_query = next(
param for param in parameters if param["name"] == "documented_query"
)
assert documented_query["description"] == "Documented query"
assert documented_query["deprecated"] is True
def test_header_model_only_still_flattens(): def test_header_model_only_still_flattens():
response = client.get( response = client.get(
"/header/only", "/header/only",
@ -158,6 +198,23 @@ def test_header_model_with_sibling_param_convert_underscores_false():
assert parameter_names == ["x_token", "x_trace", "extra"] assert parameter_names == ["x_token", "x_trace", "extra"]
def test_header_openapi_metadata_and_hidden_params():
parameters = app.openapi()["paths"]["/header/openapi-metadata"]["get"]["parameters"]
parameter_names = [param["name"] for param in parameters]
assert parameter_names == ["x-token", "x-trace", "documented-header"]
documented_header = next(
param for param in parameters if param["name"] == "documented-header"
)
assert documented_header["description"] == "Documented header"
assert documented_header["deprecated"] is True
assert documented_header["examples"] == {
"demo": {"summary": "Demo", "value": "abc"}
}
assert "hidden-header" not in parameter_names
def test_cookie_model_only_still_flattens(): def test_cookie_model_only_still_flattens():
with client as c: with client as c:
c.cookies.clear() c.cookies.clear()

Loading…
Cancel
Save