Coverage for tests/test_ondelete_raises.py: 100%
22 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-07 05:42 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-07 05:42 +0000
1from typing import Any, List, Union 1hijklmn
3import pytest 1hijklmn
4from sqlmodel import Field, Relationship, SQLModel 1hijklmn
7def test_ondelete_requires_nullable(clear_sqlmodel: Any) -> None: 1hijklmn
8 with pytest.raises(RuntimeError) as exc: 1abcdefg
10 class Team(SQLModel, table=True): 1abcdefg
11 id: Union[int, None] = Field(default=None, primary_key=True) 1abcdefg
13 heroes: List["Hero"] = Relationship( 1abcdefg
14 back_populates="team", passive_deletes="all"
15 )
17 class Hero(SQLModel, table=True): 1abcdefg
18 id: Union[int, None] = Field(default=None, primary_key=True) 1abcdefg
19 name: str = Field(index=True) 1abcdefg
20 secret_name: str 1abcdefg
21 age: Union[int, None] = Field(default=None, index=True) 1abcdefg
23 team_id: int = Field(foreign_key="team.id", ondelete="SET NULL") 1abcdefg
24 team: Team = Relationship(back_populates="heroes") 1abcdefg
26 assert 'ondelete="SET NULL" requires nullable=True' in str(exc.value) 1abcdefg
29def test_ondelete_requires_foreign_key(clear_sqlmodel: Any) -> None: 1hijklmn
30 with pytest.raises(RuntimeError) as exc: 1opqrstu
32 class Team(SQLModel, table=True): 1opqrstu
33 id: Union[int, None] = Field(default=None, primary_key=True) 1opqrstu
35 age: int = Field(ondelete="CASCADE") 1opqrstu
37 assert "ondelete can only be used with foreign_key" in str(exc.value) 1opqrstu