Coverage for tests/test_read_with_orm_mode.py: 100%
64 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-12-04 08:29 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2025-12-04 08:29 +0000
1from typing import Any 1nopqrst
3from fastapi import FastAPI 1nopqrst
4from fastapi.testclient import TestClient 1nopqrst
5from pydantic import BaseModel, ConfigDict 1nopqrst
7from .utils import needs_pydanticv1, needs_pydanticv2 1nopqrst
10@needs_pydanticv2 1nopqrst
11def test_read_with_orm_mode() -> None: 1nopqrst
12 class PersonBase(BaseModel): 1ghijklm
13 name: str 1ghijklm
14 lastname: str 1ghijklm
16 class Person(PersonBase): 1ghijklm
17 @property 1ghijklm
18 def full_name(self) -> str: 1ghijklm
19 return f"{self.name} {self.lastname}" 1ghijklm
21 model_config = ConfigDict(from_attributes=True) 1ghijklm
23 class PersonCreate(PersonBase): 1ghijklm
24 pass 1ghijklm
26 class PersonRead(PersonBase): 1ghijklm
27 full_name: str 1ghijklm
29 model_config = {"from_attributes": True} 1ghijklm
31 app = FastAPI() 1ghijklm
33 @app.post("/people/", response_model=PersonRead) 1ghijklm
34 def create_person(person: PersonCreate) -> Any: 1ghijklm
35 db_person = Person.model_validate(person) 1ghijklm
36 return db_person 1ghijklm
38 client = TestClient(app) 1ghijklm
40 person_data = {"name": "Dive", "lastname": "Wilson"} 1ghijklm
41 response = client.post("/people/", json=person_data) 1ghijklm
42 data = response.json() 1ghijklm
43 assert response.status_code == 200, response.text 1ghijklm
44 assert data["name"] == person_data["name"] 1ghijklm
45 assert data["lastname"] == person_data["lastname"] 1ghijklm
46 assert data["full_name"] == person_data["name"] + " " + person_data["lastname"] 1ghijklm
49@needs_pydanticv1 1nopqrst
50def test_read_with_orm_mode_pv1() -> None: 1nopqrst
51 class PersonBase(BaseModel): 1abcdef
52 name: str 1abcdef
53 lastname: str 1abcdef
55 class Person(PersonBase): 1abcdef
56 @property 1abcdef
57 def full_name(self) -> str: 1abcdef
58 return f"{self.name} {self.lastname}" 1abcdef
60 class Config: 1abcdef
61 orm_mode = True 1abcdef
62 read_with_orm_mode = True 1abcdef
64 class PersonCreate(PersonBase): 1abcdef
65 pass 1abcdef
67 class PersonRead(PersonBase): 1abcdef
68 full_name: str 1abcdef
70 class Config: 1abcdef
71 orm_mode = True 1abcdef
73 app = FastAPI() 1abcdef
75 @app.post("/people/", response_model=PersonRead) 1abcdef
76 def create_person(person: PersonCreate) -> Any: 1abcdef
77 db_person = Person.from_orm(person) 1abcdef
78 return db_person 1abcdef
80 client = TestClient(app) 1abcdef
82 person_data = {"name": "Dive", "lastname": "Wilson"} 1abcdef
83 response = client.post("/people/", json=person_data) 1abcdef
84 data = response.json() 1abcdef
85 assert response.status_code == 200, response.text 1abcdef
86 assert data["name"] == person_data["name"] 1abcdef
87 assert data["lastname"] == person_data["lastname"] 1abcdef
88 assert data["full_name"] == person_data["name"] + " " + person_data["lastname"] 1abcdef