Coverage for tests / test_field_sa_relationship.py: 100%

5 statements  

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

1import pytest 1stuvwxyzA

2from sqlalchemy.orm import relationship 1stuvwxyzA

3from sqlmodel import Field, Relationship, SQLModel 1stuvwxyzA

4 

5 

6def test_sa_relationship_no_args() -> None: 1stuvwxyzA

7 with pytest.raises(RuntimeError): # pragma: no cover 1abcmdnefo

8 

9 class Team(SQLModel, table=True): 1abcmdnefo

10 id: int | None = Field(default=None, primary_key=True) 1abcmdnefo

11 name: str = Field(index=True) 1abcmdnefo

12 headquarters: str 1abcdef

13 

14 heroes: list["Hero"] = Relationship( 1abcmdnefo

15 back_populates="team", 1abcmdnefo

16 sa_relationship_args=["Hero"], 1abcmdnefo

17 sa_relationship=relationship("Hero", back_populates="team"), 1abcmdnefo

18 ) 

19 

20 class Hero(SQLModel, table=True): 

21 id: int | None = Field(default=None, primary_key=True) 

22 name: str = Field(index=True) 

23 secret_name: str 

24 age: int | None = Field(default=None, index=True) 

25 

26 team_id: int | None = Field(default=None, foreign_key="team.id") 

27 team: Team | None = Relationship(back_populates="heroes") 

28 

29 

30def test_sa_relationship_no_kwargs() -> None: 1stuvwxyzA

31 with pytest.raises(RuntimeError): # pragma: no cover 1ghipjqklr

32 

33 class Team(SQLModel, table=True): 1ghipjqklr

34 id: int | None = Field(default=None, primary_key=True) 1ghipjqklr

35 name: str = Field(index=True) 1ghipjqklr

36 headquarters: str 1ghijkl

37 

38 heroes: list["Hero"] = Relationship( 1ghipjqklr

39 back_populates="team", 1ghipjqklr

40 sa_relationship_kwargs={"lazy": "selectin"}, 1ghipjqklr

41 sa_relationship=relationship("Hero", back_populates="team"), 1ghipjqklr

42 ) 

43 

44 class Hero(SQLModel, table=True): 

45 id: int | None = Field(default=None, primary_key=True) 

46 name: str = Field(index=True) 

47 secret_name: str 

48 age: int | None = Field(default=None, index=True) 

49 

50 team_id: int | None = Field(default=None, foreign_key="team.id") 

51 team: Team | None = Relationship(back_populates="heroes")