mirror of https://github.com/tiangolo/fastapi.git
99 lines
2.5 KiB
Python
99 lines
2.5 KiB
Python
import sys
|
|
|
|
import pytest
|
|
|
|
from tests.utils import skip_module_if_py_gte_314
|
|
|
|
if sys.version_info >= (3, 14):
|
|
skip_module_if_py_gte_314()
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi._compat.v1 import BaseModel
|
|
from fastapi.testclient import TestClient
|
|
|
|
|
|
def test_warns_pydantic_v1_model_in_endpoint_param() -> None:
|
|
class ParamModelV1(BaseModel):
|
|
name: str
|
|
|
|
app = FastAPI()
|
|
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match=r"pydantic\.v1 is deprecated.*Please update the param data:",
|
|
):
|
|
|
|
@app.post("/param")
|
|
def endpoint(data: ParamModelV1):
|
|
return data
|
|
|
|
client = TestClient(app)
|
|
response = client.post("/param", json={"name": "test"})
|
|
assert response.status_code == 200, response.text
|
|
assert response.json() == {"name": "test"}
|
|
|
|
|
|
def test_warns_pydantic_v1_model_in_return_type() -> None:
|
|
class ReturnModelV1(BaseModel):
|
|
name: str
|
|
|
|
app = FastAPI()
|
|
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match=r"pydantic\.v1 is deprecated.*Please update the response model",
|
|
):
|
|
|
|
@app.get("/return")
|
|
def endpoint() -> ReturnModelV1:
|
|
return ReturnModelV1(name="test")
|
|
|
|
client = TestClient(app)
|
|
response = client.get("/return")
|
|
assert response.status_code == 200, response.text
|
|
assert response.json() == {"name": "test"}
|
|
|
|
|
|
def test_warns_pydantic_v1_model_in_response_model() -> None:
|
|
class ResponseModelV1(BaseModel):
|
|
name: str
|
|
|
|
app = FastAPI()
|
|
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match=r"pydantic\.v1 is deprecated.*Please update the response model",
|
|
):
|
|
|
|
@app.get("/response-model", response_model=ResponseModelV1)
|
|
def endpoint():
|
|
return {"name": "test"}
|
|
|
|
client = TestClient(app)
|
|
response = client.get("/response-model")
|
|
assert response.status_code == 200, response.text
|
|
assert response.json() == {"name": "test"}
|
|
|
|
|
|
def test_warns_pydantic_v1_model_in_additional_responses_model() -> None:
|
|
class ErrorModelV1(BaseModel):
|
|
detail: str
|
|
|
|
app = FastAPI()
|
|
|
|
with pytest.warns(
|
|
DeprecationWarning,
|
|
match=r"pydantic\.v1 is deprecated.*In responses=\{\}, please update",
|
|
):
|
|
|
|
@app.get(
|
|
"/responses", response_model=None, responses={400: {"model": ErrorModelV1}}
|
|
)
|
|
def endpoint():
|
|
return {"ok": True}
|
|
|
|
client = TestClient(app)
|
|
response = client.get("/responses")
|
|
assert response.status_code == 200, response.text
|
|
assert response.json() == {"ok": True}
|