Browse Source

Fix tests for aliases with Pydantic V2

pull/14293/head
Yurii Motov 9 months ago
parent
commit
fbb6e1f862
  1. 0
      tests/test_aliases/__init__.py
  2. 77
      tests/test_aliases/test_file_field_aliases.py
  3. 65
      tests/test_aliases/test_form_field_aliases.py
  4. 91
      tests/test_aliases/test_form_model_aliases.py

0
tests/test_aliases/__init__.py

77
tests/test_aliases/test_file_field_aliases.py

@ -1,16 +1,20 @@
from typing import Optional from typing import List, Optional
import pytest import pytest
from dirty_equals import IsOneOf
from fastapi import FastAPI, File from fastapi import FastAPI, File
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from ..utils import needs_pydanticv2
pytestmark = needs_pydanticv2
app = FastAPI() app = FastAPI()
# ===================================================================================== # =====================================================================================
# File(alias=...) # File(alias=...)
# Current situation: Works, but schema is wrong # Current situation: Works, but schema is wrong
# Optional[list[bytes]] fails due to another issue (likely not related to aliases) # Optional[List[bytes]] fails due to another issue (likely not related to aliases)
# ------------------------------ # ------------------------------
# required field # required field
@ -26,10 +30,7 @@ def test_required_field_alias_by_name():
resp = client.post("/required-field-alias", files={"file": b"content"}) resp = client.post("/required-field-alias", files={"file": b"content"})
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "file_alias" in detail[0]["loc"] assert "file_alias" in detail[0]["loc"]
@ -100,7 +101,7 @@ def test_optional_field_alias_schema():
@app.post("/list-field-alias", operation_id="list_field_alias") @app.post("/list-field-alias", operation_id="list_field_alias")
async def list_field_alias(files: list[bytes] = File(alias="files_alias")): async def list_field_alias(files: List[bytes] = File(alias="files_alias")):
return {"file_sizes": [len(file) for file in files]} return {"file_sizes": [len(file) for file in files]}
@ -111,10 +112,7 @@ def test_list_field_alias_by_name():
) )
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "files_alias" in detail[0]["loc"] assert "files_alias" in detail[0]["loc"]
@ -151,7 +149,7 @@ def test_list_field_alias_schema():
@app.post("/optional-list-field-alias", operation_id="optional_list_field_alias") @app.post("/optional-list-field-alias", operation_id="optional_list_field_alias")
async def optional_list_field_alias( async def optional_list_field_alias(
files: Optional[list[bytes]] = File(None, alias="files_alias"), files: Optional[List[bytes]] = File(None, alias="files_alias"),
): ):
if files is None: if files is None:
return {"file_sizes": None} return {"file_sizes": None}
@ -169,7 +167,7 @@ def test_optional_list_field_alias_by_name():
@pytest.mark.xfail( @pytest.mark.xfail(
reason="Optional[list[bytes]] File type causes TypeError in FastAPI", reason="Optional[List[bytes]] File type causes TypeError in FastAPI",
raises=TypeError, raises=TypeError,
strict=False, strict=False,
) )
@ -207,7 +205,7 @@ def test_optional_list_field_alias_schema():
# ===================================================================================== # =====================================================================================
# File(validation_alias=...) # File(validation_alias=...)
# Current situation: schema is correct, but doesn't work (parameter name is used) # Current situation: schema is correct, but doesn't work (parameter name is used)
# Optional[list[bytes]] fails due to another issue (likely not related to aliases) # Optional[List[bytes]] fails due to another issue (likely not related to aliases)
# ------------------------------ # ------------------------------
@ -232,10 +230,7 @@ def test_required_field_validation_alias_by_name():
# AssertionError: assert 200 == 422 # AssertionError: assert 200 == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "file_val_alias" in detail[0]["loc"] assert "file_val_alias" in detail[0]["loc"]
@ -320,7 +315,7 @@ def test_optional_field_validation_alias_schema():
@app.post("/list-field-validation-alias", operation_id="list_field_validation_alias") @app.post("/list-field-validation-alias", operation_id="list_field_validation_alias")
async def list_field_validation_alias( async def list_field_validation_alias(
files: list[bytes] = File(validation_alias="files_val_alias"), files: List[bytes] = File(validation_alias="files_val_alias"),
): ):
return {"file_sizes": [len(file) for file in files]} return {"file_sizes": [len(file) for file in files]}
@ -337,10 +332,7 @@ def test_list_field_validation_alias_by_name():
# AssertionError: assert 200 == 422 # AssertionError: assert 200 == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "files_val_alias" in detail[0]["loc"] assert "files_val_alias" in detail[0]["loc"]
@ -379,7 +371,7 @@ def test_list_field_validation_alias_schema():
operation_id="optional_list_field_validation_alias", operation_id="optional_list_field_validation_alias",
) )
async def optional_list_field_validation_alias( async def optional_list_field_validation_alias(
files: Optional[list[bytes]] = File(None, validation_alias="files_val_alias"), files: Optional[List[bytes]] = File(None, validation_alias="files_val_alias"),
): ):
if files is None: if files is None:
return {"file_sizes": None} return {"file_sizes": None}
@ -387,7 +379,7 @@ async def optional_list_field_validation_alias(
@pytest.mark.xfail( @pytest.mark.xfail(
reason="Optional[list[bytes]] File type causes TypeError in FastAPI", reason="Optional[List[bytes]] File type causes TypeError in FastAPI",
raises=TypeError, raises=TypeError,
strict=False, strict=False,
) )
@ -436,7 +428,7 @@ def test_optional_list_field_validation_alias_schema():
# ===================================================================================== # =====================================================================================
# File(alias=..., validation_alias=...) # File(alias=..., validation_alias=...)
# Current situation: Schema is correct (validation_alias), but doesn't work (alias is used) # Current situation: Schema is correct (validation_alias), but doesn't work (alias is used)
# Optional[list[bytes]] fails due to another issue (likely not related to aliases) # Optional[List[bytes]] fails due to another issue (likely not related to aliases)
# ------------------------------ # ------------------------------
# required field # required field
@ -460,10 +452,7 @@ def test_required_field_alias_and_validation_alias_by_name():
) )
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "file_val_alias" in detail[0]["loc"] assert "file_val_alias" in detail[0]["loc"]
# Currently fails due to issue with aliases: # Currently fails due to issue with aliases:
# AssertionError: assert 'file_val_alias' in ['body', 'file_alias'] # AssertionError: assert 'file_val_alias' in ['body', 'file_alias']
@ -480,10 +469,7 @@ def test_required_field_alias_and_validation_alias_by_alias():
# AssertionError: assert 200 == 422 # AssertionError: assert 200 == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "file_val_alias" in detail[0]["loc"] assert "file_val_alias" in detail[0]["loc"]
@ -589,7 +575,7 @@ def test_optional_field_alias_and_validation_alias_schema():
operation_id="list_field_alias_and_validation_alias", operation_id="list_field_alias_and_validation_alias",
) )
async def list_field_alias_and_validation_alias( async def list_field_alias_and_validation_alias(
files: list[bytes] = File(alias="files_alias", validation_alias="files_val_alias"), files: List[bytes] = File(alias="files_alias", validation_alias="files_val_alias"),
): ):
return {"file_sizes": [len(file) for file in files]} return {"file_sizes": [len(file) for file in files]}
@ -603,10 +589,7 @@ def test_list_field_alias_and_validation_alias_by_name():
) )
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "files_val_alias" in detail[0]["loc"] assert "files_val_alias" in detail[0]["loc"]
# Currently fails due to issue with aliases: # Currently fails due to issue with aliases:
# AssertionError: assert 'files_val_alias' in ['body', 'files_alias'] # AssertionError: assert 'files_val_alias' in ['body', 'files_alias']
@ -624,10 +607,7 @@ def test_list_field_alias_and_validation_alias_by_alias():
# AssertionError: assert 200 == 422 # AssertionError: assert 200 == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "files_val_alias" in detail[0]["loc"] assert "files_val_alias" in detail[0]["loc"]
@ -668,7 +648,7 @@ def test_list_field_alias_and_validation_alias_schema():
operation_id="optional_list_field_alias_and_validation_alias", operation_id="optional_list_field_alias_and_validation_alias",
) )
async def optional_list_field_alias_and_validation_alias( async def optional_list_field_alias_and_validation_alias(
files: Optional[list[bytes]] = File( files: Optional[List[bytes]] = File(
None, alias="files_alias", validation_alias="files_val_alias" None, alias="files_alias", validation_alias="files_val_alias"
), ),
): ):
@ -688,7 +668,7 @@ def test_optional_list_field_alias_and_validation_alias_by_name():
@pytest.mark.xfail( @pytest.mark.xfail(
reason="Optional[list[bytes]] File type causes TypeError in FastAPI", reason="Optional[List[bytes]] File type causes TypeError in FastAPI",
raises=TypeError, raises=TypeError,
strict=False, strict=False,
) )
@ -754,10 +734,7 @@ def test_workaround_by_name():
resp = client.post("/workaround", files={"file": b"content"}) resp = client.post("/workaround", files={"file": b"content"})
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "file_alias" in detail[0]["loc"] assert "file_alias" in detail[0]["loc"]

65
tests/test_aliases/test_form_field_aliases.py

@ -1,10 +1,14 @@
from typing import Optional from typing import List, Optional
import pytest import pytest
from dirty_equals import IsOneOf
from fastapi import FastAPI, Form from fastapi import FastAPI, Form
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from ..utils import needs_pydanticv2
pytestmark = needs_pydanticv2
app = FastAPI() app = FastAPI()
# ===================================================================================== # =====================================================================================
@ -25,10 +29,7 @@ def test_required_field_alias_by_name():
resp = client.post("/required-field-alias", data={"param": "123"}) resp = client.post("/required-field-alias", data={"param": "123"})
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_alias" in detail[0]["loc"] assert "param_alias" in detail[0]["loc"]
@ -97,7 +98,7 @@ def test_optional_field_alias_schema():
@app.post("/list-field-alias", operation_id="list_field_alias") @app.post("/list-field-alias", operation_id="list_field_alias")
async def list_field_alias(param: list[str] = Form(alias="param_alias")): async def list_field_alias(param: List[str] = Form(alias="param_alias")):
return {"param": param} return {"param": param}
@ -106,10 +107,7 @@ def test_list_field_alias_by_name():
resp = client.post("/list-field-alias", data={"param": ["123", "456"]}) resp = client.post("/list-field-alias", data={"param": ["123", "456"]})
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_alias" in detail[0]["loc"] assert "param_alias" in detail[0]["loc"]
@ -143,7 +141,7 @@ def test_list_field_alias_schema():
@app.post("/optional-list-field-alias", operation_id="optional_list_field_alias") @app.post("/optional-list-field-alias", operation_id="optional_list_field_alias")
async def optional_list_field_alias( async def optional_list_field_alias(
param: Optional[list[str]] = Form(None, alias="param_alias"), param: Optional[List[str]] = Form(None, alias="param_alias"),
): ):
return {"param": param} return {"param": param}
@ -207,10 +205,7 @@ def test_required_field_validation_alias_by_name():
# AssertionError: assert 200 == 422 # AssertionError: assert 200 == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@ -290,7 +285,7 @@ def test_optional_field_validation_alias_schema():
@app.post("/list-field-validation-alias", operation_id="list_field_validation_alias") @app.post("/list-field-validation-alias", operation_id="list_field_validation_alias")
async def list_field_validation_alias( async def list_field_validation_alias(
param: list[str] = Form(validation_alias="param_val_alias"), param: List[str] = Form(validation_alias="param_val_alias"),
): ):
return {"param": param} return {"param": param}
@ -304,10 +299,7 @@ def test_list_field_validation_alias_by_name():
# AssertionError: assert 200 == 422 # AssertionError: assert 200 == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@ -345,7 +337,7 @@ def test_list_field_validation_alias_schema():
operation_id="optional_list_field_validation_alias", operation_id="optional_list_field_validation_alias",
) )
async def optional_list_field_validation_alias( async def optional_list_field_validation_alias(
param: Optional[list[str]] = Form(None, validation_alias="param_val_alias"), param: Optional[List[str]] = Form(None, validation_alias="param_val_alias"),
): ):
return {"param": param} return {"param": param}
@ -414,10 +406,7 @@ def test_required_field_alias_and_validation_alias_by_name():
) )
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
# Currently fails due to issue with aliases: # Currently fails due to issue with aliases:
# AssertionError: assert 'param_val_alias' in ['body', 'param_alias'] # AssertionError: assert 'param_val_alias' in ['body', 'param_alias']
@ -434,10 +423,7 @@ def test_required_field_alias_and_validation_alias_by_alias():
# AssertionError: assert 200 == 422 # AssertionError: assert 200 == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@ -535,7 +521,7 @@ def test_optional_field_alias_and_validation_alias_schema():
operation_id="list_field_alias_and_validation_alias", operation_id="list_field_alias_and_validation_alias",
) )
async def list_field_alias_and_validation_alias( async def list_field_alias_and_validation_alias(
param: list[str] = Form(alias="param_alias", validation_alias="param_val_alias"), param: List[str] = Form(alias="param_alias", validation_alias="param_val_alias"),
): ):
return {"param": param} return {"param": param}
@ -548,10 +534,7 @@ def test_list_field_alias_and_validation_alias_by_name():
) )
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
# Currently fails due to issue with aliases: # Currently fails due to issue with aliases:
# AssertionError: assert 'param_val_alias' in ['body', 'param_alias'] # AssertionError: assert 'param_val_alias' in ['body', 'param_alias']
@ -568,10 +551,7 @@ def test_list_field_alias_and_validation_alias_by_alias():
# AssertionError: assert 200 == 422 # AssertionError: assert 200 == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@ -612,7 +592,7 @@ def test_list_field_alias_and_validation_alias_schema():
operation_id="optional_list_field_alias_and_validation_alias", operation_id="optional_list_field_alias_and_validation_alias",
) )
async def optional_list_field_alias_and_validation_alias( async def optional_list_field_alias_and_validation_alias(
param: Optional[list[str]] = Form( param: Optional[List[str]] = Form(
None, alias="param_alias", validation_alias="param_val_alias" None, alias="param_alias", validation_alias="param_val_alias"
), ),
): ):
@ -686,10 +666,7 @@ def test_workaround_by_name():
resp = client.post("/workaround", data={"param": "123"}) resp = client.post("/workaround", data={"param": "123"})
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_alias" in detail[0]["loc"] assert "param_alias" in detail[0]["loc"]

91
tests/test_aliases/test_form_model_aliases.py

@ -1,11 +1,14 @@
from typing import Annotated, Optional from typing import List, Optional
import pytest import pytest
from dirty_equals import IsOneOf
from fastapi import FastAPI, Form from fastapi import FastAPI, Form
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from ..utils import needs_pydanticv2
pytestmark = needs_pydanticv2
app = FastAPI() app = FastAPI()
# ===================================================================================== # =====================================================================================
@ -21,7 +24,7 @@ class RequiredFieldAliasModel(BaseModel):
@app.post("/required-field-alias-model") @app.post("/required-field-alias-model")
async def required_field_alias_model(data: Annotated[RequiredFieldAliasModel, Form()]): async def required_field_alias_model(data: RequiredFieldAliasModel = Form(...)):
return {"param": data.param} return {"param": data.param}
@ -30,10 +33,7 @@ def test_required_field_alias_model_by_name():
resp = client.post("/required-field-alias-model", data={"param": "123"}) resp = client.post("/required-field-alias-model", data={"param": "123"})
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_alias" in detail[0]["loc"] assert "param_alias" in detail[0]["loc"]
@ -61,7 +61,7 @@ class OptionalFieldAliasModel(BaseModel):
@app.post("/optional-field-alias-model") @app.post("/optional-field-alias-model")
async def optional_field_alias_model(data: Annotated[OptionalFieldAliasModel, Form()]): async def optional_field_alias_model(data: OptionalFieldAliasModel = Form(...)):
return {"param": data.param} return {"param": data.param}
@ -95,11 +95,11 @@ def test_optional_field_alias_model_schema():
class ListFieldAliasModel(BaseModel): class ListFieldAliasModel(BaseModel):
param: list[str] = Field(alias="param_alias") param: List[str] = Field(alias="param_alias")
@app.post("/list-field-alias-model") @app.post("/list-field-alias-model")
async def list_field_alias_model(data: Annotated[ListFieldAliasModel, Form()]): async def list_field_alias_model(data: ListFieldAliasModel = Form(...)):
return {"param": data.param} return {"param": data.param}
@ -108,10 +108,7 @@ def test_list_field_alias_model_by_name():
resp = client.post("/list-field-alias-model", data={"param": ["123", "456"]}) resp = client.post("/list-field-alias-model", data={"param": ["123", "456"]})
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_alias" in detail[0]["loc"] assert "param_alias" in detail[0]["loc"]
@ -139,12 +136,12 @@ def test_list_field_alias_model_schema():
class OptionalListFieldAliasModel(BaseModel): class OptionalListFieldAliasModel(BaseModel):
param: Optional[list[str]] = Field(None, alias="param_alias") param: Optional[List[str]] = Field(None, alias="param_alias")
@app.post("/optional-list-field-alias-model") @app.post("/optional-list-field-alias-model")
async def optional_list_field_alias_model( async def optional_list_field_alias_model(
data: Annotated[OptionalListFieldAliasModel, Form()], data: OptionalListFieldAliasModel = Form(...),
): ):
return {"param": data.param} return {"param": data.param}
@ -170,8 +167,12 @@ def test_optional_list_field_alias_model_by_alias():
def test_optional_list_field_alias_model_schema(): def test_optional_list_field_alias_model_schema():
openapi = app.openapi() openapi = app.openapi()
body_schema = openapi["components"]["schemas"]["OptionalListFieldAliasModel"] body_schema = openapi["components"]["schemas"]["OptionalListFieldAliasModel"]
assert len(body_schema["properties"]) == 1 assert body_schema["properties"] == {
assert "param_alias" in body_schema["properties"] "param_alias": {
"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}],
"title": "Param Alias",
}
}
# ===================================================================================== # =====================================================================================
@ -192,7 +193,7 @@ class RequiredFieldValidationAliasModel(BaseModel):
operation_id="required_field_validation_alias_model", operation_id="required_field_validation_alias_model",
) )
async def required_field_validation_alias_model( async def required_field_validation_alias_model(
data: Annotated[RequiredFieldValidationAliasModel, Form()], data: RequiredFieldValidationAliasModel = Form(...),
): ):
return {"param": data.param} return {"param": data.param}
@ -202,10 +203,7 @@ def test_required_field_validation_alias_model_by_name():
resp = client.post("/required-field-validation-alias-model", data={"param": "123"}) resp = client.post("/required-field-validation-alias-model", data={"param": "123"})
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@ -239,7 +237,7 @@ class OptionalFieldValidationAliasModel(BaseModel):
operation_id="optional_field_validation_alias_model", operation_id="optional_field_validation_alias_model",
) )
async def optional_field_validation_alias_model( async def optional_field_validation_alias_model(
data: Annotated[OptionalFieldValidationAliasModel, Form()], data: OptionalFieldValidationAliasModel = Form(...),
): ):
return {"param": data.param} return {"param": data.param}
@ -276,7 +274,7 @@ def test_optional_field_validation_alias_model_schema():
class ListFieldValidationAliasModel(BaseModel): class ListFieldValidationAliasModel(BaseModel):
param: list[str] = Field(validation_alias="param_val_alias") param: List[str] = Field(validation_alias="param_val_alias")
@app.post( @app.post(
@ -284,7 +282,7 @@ class ListFieldValidationAliasModel(BaseModel):
operation_id="list_field_validation_alias_model", operation_id="list_field_validation_alias_model",
) )
async def list_field_validation_alias_model( async def list_field_validation_alias_model(
data: Annotated[ListFieldValidationAliasModel, Form()], data: ListFieldValidationAliasModel = Form(...),
): ):
return {"param": data.param} return {"param": data.param}
@ -296,10 +294,7 @@ def test_list_field_validation_alias_model_by_name():
) )
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@ -334,7 +329,7 @@ def test_list_field_validation_alias_model_schema():
class OptionalListFieldValidationAliasModel(BaseModel): class OptionalListFieldValidationAliasModel(BaseModel):
param: Optional[list[str]] = Field(None, validation_alias="param_val_alias") param: Optional[List[str]] = Field(None, validation_alias="param_val_alias")
@app.post( @app.post(
@ -342,7 +337,7 @@ class OptionalListFieldValidationAliasModel(BaseModel):
operation_id="optional_list_field_validation_alias_model", operation_id="optional_list_field_validation_alias_model",
) )
async def optional_list_field_validation_alias_model( async def optional_list_field_validation_alias_model(
data: Annotated[OptionalListFieldValidationAliasModel, Form()], data: OptionalListFieldValidationAliasModel = Form(...),
): ):
return {"param": data.param} return {"param": data.param}
@ -401,7 +396,7 @@ class RequiredFieldAliasAndValidationAliasModel(BaseModel):
operation_id="required_field_alias_and_validation_alias_model", operation_id="required_field_alias_and_validation_alias_model",
) )
async def required_field_alias_and_validation_alias_model( async def required_field_alias_and_validation_alias_model(
data: Annotated[RequiredFieldAliasAndValidationAliasModel, Form()], data: RequiredFieldAliasAndValidationAliasModel = Form(...),
): ):
return {"param": data.param} return {"param": data.param}
@ -413,10 +408,7 @@ def test_required_field_alias_and_validation_alias_model_by_name():
) )
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@ -427,10 +419,7 @@ def test_required_field_alias_and_validation_alias_model_by_alias():
) )
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@ -469,7 +458,7 @@ class OptionalFieldAliasAndValidationAliasModel(BaseModel):
operation_id="optional_field_alias_and_validation_alias_model", operation_id="optional_field_alias_and_validation_alias_model",
) )
async def optional_field_alias_and_validation_alias_model( async def optional_field_alias_and_validation_alias_model(
data: Annotated[OptionalFieldAliasAndValidationAliasModel, Form()], data: OptionalFieldAliasAndValidationAliasModel = Form(...),
): ):
return {"param": data.param} return {"param": data.param}
@ -520,7 +509,7 @@ def test_optional_field_alias_and_validation_alias_model_schema():
class ListFieldAliasAndValidationAliasModel(BaseModel): class ListFieldAliasAndValidationAliasModel(BaseModel):
param: list[str] = Field(alias="param_alias", validation_alias="param_val_alias") param: List[str] = Field(alias="param_alias", validation_alias="param_val_alias")
@app.post( @app.post(
@ -528,7 +517,7 @@ class ListFieldAliasAndValidationAliasModel(BaseModel):
operation_id="list_field_alias_and_validation_alias_model", operation_id="list_field_alias_and_validation_alias_model",
) )
async def list_field_alias_and_validation_alias_model( async def list_field_alias_and_validation_alias_model(
data: Annotated[ListFieldAliasAndValidationAliasModel, Form()], data: ListFieldAliasAndValidationAliasModel = Form(...),
): ):
return {"param": data.param} return {"param": data.param}
@ -540,10 +529,7 @@ def test_list_field_alias_and_validation_alias_model_by_name():
) )
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@ -555,10 +541,7 @@ def test_list_field_alias_and_validation_alias_model_by_alias():
) )
assert resp.status_code == 422 assert resp.status_code == 422
detail = resp.json()["detail"] detail = resp.json()["detail"]
assert detail[0]["msg"] == IsOneOf( assert detail[0]["msg"] == "Field required"
"Field required",
"field required", # TODO: remove when deprecating Pydantic v1
)
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@ -596,7 +579,7 @@ def test_list_field_alias_and_validation_alias_model_schema():
class OptionalListFieldAliasAndValidationAliasModel(BaseModel): class OptionalListFieldAliasAndValidationAliasModel(BaseModel):
param: Optional[list[str]] = Field( param: Optional[List[str]] = Field(
None, alias="param_alias", validation_alias="param_val_alias" None, alias="param_alias", validation_alias="param_val_alias"
) )
@ -606,7 +589,7 @@ class OptionalListFieldAliasAndValidationAliasModel(BaseModel):
operation_id="optional_list_field_alias_and_validation_alias_model", operation_id="optional_list_field_alias_and_validation_alias_model",
) )
async def optional_list_field_alias_and_validation_alias_model( async def optional_list_field_alias_and_validation_alias_model(
data: Annotated[OptionalListFieldAliasAndValidationAliasModel, Form()], data: OptionalListFieldAliasAndValidationAliasModel = Form(...),
): ):
return {"param": data.param} return {"param": data.param}

Loading…
Cancel
Save