3
from fastapi import FastAPI
4
from fastapi.testclient import TestClient
5
from pydantic import BaseModel, ConfigDict
7
from .utils import needs_pydanticv1, needs_pydanticv2
11
def test_read_with_orm_mode() -> None:
12
class PersonBase(BaseModel):
16
class Person(PersonBase):
18
def full_name(self) -> str:
19
return f"{self.name} {self.lastname}"
21
model_config = ConfigDict(from_attributes=True)
23
class PersonCreate(PersonBase):
26
class PersonRead(PersonBase):
29
model_config = {"from_attributes": True}
33
@app.post("/people/", response_model=PersonRead)
34
def create_person(person: PersonCreate) -> Any:
35
db_person = Person.model_validate(person)
38
client = TestClient(app)
40
person_data = {"name": "Dive", "lastname": "Wilson"}
41
response = client.post("/people/", json=person_data)
42
data = response.json()
43
assert response.status_code == 200, response.text
44
assert data["name"] == person_data["name"]
45
assert data["lastname"] == person_data["lastname"]
46
assert data["full_name"] == person_data["name"] + " " + person_data["lastname"]
50
def test_read_with_orm_mode_pv1() -> None:
51
class PersonBase(BaseModel):
55
class Person(PersonBase):
57
def full_name(self) -> str:
58
return f"{self.name} {self.lastname}"
62
read_with_orm_mode = True
64
class PersonCreate(PersonBase):
67
class PersonRead(PersonBase):
75
@app.post("/people/", response_model=PersonRead)
76
def create_person(person: PersonCreate) -> Any:
77
db_person = Person.from_orm(person)
80
client = TestClient(app)
82
person_data = {"name": "Dive", "lastname": "Wilson"}
83
response = client.post("/people/", json=person_data)
84
data = response.json()
85
assert response.status_code == 200, response.text
86
assert data["name"] == person_data["name"]
87
assert data["lastname"] == person_data["lastname"]
88
assert data["full_name"] == person_data["name"] + " " + person_data["lastname"]