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

1from typing import Any 1nopqrst

2 

3from fastapi import FastAPI 1nopqrst

4from fastapi.testclient import TestClient 1nopqrst

5from pydantic import BaseModel, ConfigDict 1nopqrst

6 

7from .utils import needs_pydanticv1, needs_pydanticv2 1nopqrst

8 

9 

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

15 

16 class Person(PersonBase): 1ghijklm

17 @property 1ghijklm

18 def full_name(self) -> str: 1ghijklm

19 return f"{self.name} {self.lastname}" 1ghijklm

20 

21 model_config = ConfigDict(from_attributes=True) 1ghijklm

22 

23 class PersonCreate(PersonBase): 1ghijklm

24 pass 1ghijklm

25 

26 class PersonRead(PersonBase): 1ghijklm

27 full_name: str 1ghijklm

28 

29 model_config = {"from_attributes": True} 1ghijklm

30 

31 app = FastAPI() 1ghijklm

32 

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

37 

38 client = TestClient(app) 1ghijklm

39 

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

47 

48 

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

54 

55 class Person(PersonBase): 1abcdef

56 @property 1abcdef

57 def full_name(self) -> str: 1abcdef

58 return f"{self.name} {self.lastname}" 1abcdef

59 

60 class Config: 1abcdef

61 orm_mode = True 1abcdef

62 read_with_orm_mode = True 1abcdef

63 

64 class PersonCreate(PersonBase): 1abcdef

65 pass 1abcdef

66 

67 class PersonRead(PersonBase): 1abcdef

68 full_name: str 1abcdef

69 

70 class Config: 1abcdef

71 orm_mode = True 1abcdef

72 

73 app = FastAPI() 1abcdef

74 

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

79 

80 client = TestClient(app) 1abcdef

81 

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