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

15 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-11-09 00:02 +0000

1from typing import Any 1jklmnopqr

2 

3import pytest 1jklmnopqr

4from sqlmodel import SQLModel 1jklmnopqr

5from sqlmodel._compat import PYDANTIC_MINOR_VERSION 1jklmnopqr

6 

7 

8@pytest.mark.parametrize( 1jklmnopqr

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( 1jklmnopqr

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

25): 

26 

27 class User(SQLModel): 1abcdefghi

28 name: str 1abcdefghi

29 

30 class UserLogin(User): 1abcdefghi

31 password: str 1abcdefghi

32 

33 class OuterModel(SQLModel): 1abcdefghi

34 user: User 1abcdefghi

35 

36 outer_model = OuterModel( 1abcdefghi

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

38 ) 

39 

40 assert ( 1abcdefghi

41 outer_model.model_dump(polymorphic_serialization=polymorphic_serialization) 

42 == expected_result 

43 ) 

44 

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

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

47 }