mirror of https://github.com/tiangolo/fastapi.git
add validation schema openapi in testing and support to validation_alias in Form
This commit is contained in:
parent
0c8b8a1d1e
commit
e3125fd1ed
|
|
@ -88,7 +88,7 @@ if PYDANTIC_V2:
|
|||
|
||||
@property
|
||||
def alias(self) -> str:
|
||||
a = self.field_info.alias
|
||||
a = self.field_info.validation_alias or self.field_info.alias
|
||||
return a if a is not None else self.name
|
||||
|
||||
@property
|
||||
|
|
@ -274,7 +274,7 @@ if PYDANTIC_V2:
|
|||
*, fields: Sequence[ModelField], model_name: str
|
||||
) -> Type[BaseModel]:
|
||||
field_params = {
|
||||
f"{f.field_info.alias}": (f.field_info.annotation, f.field_info)
|
||||
f"{f.alias}": (f.field_info.annotation, f.field_info)
|
||||
for f in fields
|
||||
}
|
||||
BodyModel: Type[BaseModel] = create_model(model_name, **field_params) # type: ignore[call-overload]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
from starlette.testclient import TestClient
|
||||
|
||||
from fastapi import FastAPI, Form
|
||||
|
||||
app: FastAPI = FastAPI()
|
||||
|
||||
|
||||
@app.post("/testing_alias")
|
||||
async def check_alias(id_test: int = Form(alias="otherId")):
|
||||
return {"other_id": id_test}
|
||||
|
||||
@app.post("/testing_validation_alias")
|
||||
async def check_validation_alias(id_test: int = Form(validation_alias="otherId")):
|
||||
return {"other_id": id_test}
|
||||
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
|
||||
def test_get_alias():
|
||||
response = client.post("/testing_alias", data={"otherId": "1"})
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"other_id": 1}
|
||||
|
||||
def test_get_validation_alias():
|
||||
response = client.post("/testing_validation_alias", data={"otherId": "1"})
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"other_id": 1}
|
||||
|
||||
def test_file_alias_schema():
|
||||
response = client.get("/openapi.json")
|
||||
assert response.status_code == 200, response.text
|
||||
schema = response.json()
|
||||
|
||||
assert (
|
||||
"otherId"
|
||||
in schema["components"]["schemas"]["Body_check_alias_testing_alias_post"][
|
||||
"properties"
|
||||
]
|
||||
)
|
||||
|
||||
assert (
|
||||
"otherId"
|
||||
in schema["components"]["schemas"]["Body_check_validation_alias_testing_validation_alias_post"][
|
||||
"properties"
|
||||
]
|
||||
)
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
from fastapi import FastAPI, Form
|
||||
from starlette.testclient import TestClient
|
||||
|
||||
app: FastAPI = FastAPI()
|
||||
|
||||
|
||||
@app.post("/testing_alias")
|
||||
async def check_alias(id_test: int = Form(alias="otherId")):
|
||||
return {"other_id": id_test}
|
||||
|
||||
|
||||
@app.patch("/testing")
|
||||
async def check_without_alias(id_test: int = Form()):
|
||||
return {"id_test": id_test}
|
||||
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
|
||||
def test_without_alias():
|
||||
response = client.patch("/testing", data={"id_test": 1})
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"id_test": 1}
|
||||
|
||||
|
||||
def test_get_alias():
|
||||
response = client.post("/testing_alias", data={"otherId": "1"})
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"other_id": 1}
|
||||
Loading…
Reference in New Issue