Coverage for tests / test_field_sa_relationship.py: 100%

5 statements  

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

1import pytest 1qrstuvwx

2from sqlalchemy.orm import relationship 1qrstuvwx

3from sqlmodel import Field, Relationship, SQLModel 1qrstuvwx

4 

5 

6def test_sa_relationship_no_args() -> None: 1qrstuvwx

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

8 

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

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

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

12 headquarters: str 1abcde

13 

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

15 back_populates="team", 1abkcldem

16 sa_relationship_args=["Hero"], 1abkcldem

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

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: 1qrstuvwx

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

32 

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

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

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

36 headquarters: str 1fghij

37 

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

39 back_populates="team", 1fgnhoijp

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

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

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")