Coverage for tests / test_pydantic / test_model_dump.py: 100%

15 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-06-10 09:40 +0000

1from typing import Any 1ijklmnop

2 

3import pytest 1ijklmnop

4from sqlmodel import SQLModel 1ijklmnop

5from sqlmodel._compat import PYDANTIC_MINOR_VERSION 1ijklmnop

6 

7 

8@pytest.mark.parametrize( 1ijklmnop

9 ("polymorphic_serialization", "expected_result"), 

10 [ 

11 (None, {"user": {"name": "pydantic"}}), 

12 (False, {"user": {"name": "pydantic"}}), 

13 pytest.param( 

14 True, 

15 {"user": {"name": "pydantic", "password": "password"}}, 

16 marks=pytest.mark.skipif( 

17 PYDANTIC_MINOR_VERSION < (2, 13), 

18 reason="polymorphic_serialization is only available in Pydantic v2.13+", 

19 ), 

20 ), 

21 ], 

22) 

23def test_polymorphic_serialization( 1ijklmnop

24 polymorphic_serialization: bool | None, expected_result: dict[str, Any] 

25): 

26 

27 class User(SQLModel): 1abcdefgh

28 name: str 1abcdefgh

29 

30 class UserLogin(User): 1abcdefgh

31 password: str 1abcdefgh

32 

33 class OuterModel(SQLModel): 1abcdefgh

34 user: User 1abcdefgh

35 

36 outer_model = OuterModel( 1abcdefgh

37 user=UserLogin(name="pydantic", password="password"), 

38 ) 

39 

40 assert ( 1abcdefgh

41 outer_model.model_dump(polymorphic_serialization=polymorphic_serialization) 

42 == expected_result 

43 ) 

44 

45 assert outer_model.model_dump(polymorphic_serialization=False) == { 1abcdefgh

46 "user": {"name": "pydantic"} 

47 }