Coverage for tests/test_field_sa_column.py: 100%
49 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 Optional 1abcdefg
3import pytest 1abcdefg
4from sqlalchemy import Column, Integer, String 1abcdefg
5from sqlmodel import Field, SQLModel 1abcdefg
8def test_sa_column_takes_precedence() -> None: 1abcdefg
9 class Item(SQLModel, table=True): 1opqrstu
10 id: Optional[int] = Field( 1opqrstu
11 default=None,
12 sa_column=Column(String, primary_key=True, nullable=False),
13 )
15 # It would have been nullable with no sa_column
16 assert Item.id.nullable is False # type: ignore 1opqrstu
17 assert isinstance(Item.id.type, String) # type: ignore 1opqrstu
20def test_sa_column_no_sa_args() -> None: 1abcdefg
21 with pytest.raises(RuntimeError): 1vwxyzAB
23 class Item(SQLModel, table=True): 1vwxyzAB
24 id: Optional[int] = Field( 1vwxyzAB
25 default=None,
26 sa_column_args=[Integer],
27 sa_column=Column(Integer, primary_key=True),
28 )
31def test_sa_column_no_sa_kargs() -> None: 1abcdefg
32 with pytest.raises(RuntimeError): 1CDEFGHI
34 class Item(SQLModel, table=True): 1CDEFGHI
35 id: Optional[int] = Field( 1CDEFGHI
36 default=None,
37 sa_column_kwargs={"primary_key": True},
38 sa_column=Column(Integer, primary_key=True),
39 )
42def test_sa_column_no_type() -> None: 1abcdefg
43 with pytest.raises(RuntimeError): 1JKLMNOP
45 class Item(SQLModel, table=True): 1JKLMNOP
46 id: Optional[int] = Field( 1JKLMNOP
47 default=None,
48 sa_type=Integer,
49 sa_column=Column(Integer, primary_key=True),
50 )
53def test_sa_column_no_primary_key() -> None: 1abcdefg
54 with pytest.raises(RuntimeError): 1QRSTUVW
56 class Item(SQLModel, table=True): 1QRSTUVW
57 id: Optional[int] = Field( 1QRSTUVW
58 default=None,
59 primary_key=True,
60 sa_column=Column(Integer, primary_key=True),
61 )
64def test_sa_column_no_nullable() -> None: 1abcdefg
65 with pytest.raises(RuntimeError): 1XYZ0123
67 class Item(SQLModel, table=True): 1XYZ0123
68 id: Optional[int] = Field( 1XYZ0123
69 default=None,
70 nullable=True,
71 sa_column=Column(Integer, primary_key=True),
72 )
75def test_sa_column_no_foreign_key() -> None: 1abcdefg
76 with pytest.raises(RuntimeError): 1hijklmn
78 class Team(SQLModel, table=True): 1hijklmn
79 id: Optional[int] = Field(default=None, primary_key=True) 1hijklmn
80 name: str 1hijklmn
82 class Hero(SQLModel, table=True): 1hijklmn
83 id: Optional[int] = Field(default=None, primary_key=True) 1hijklmn
84 team_id: Optional[int] = Field( 1hijklmn
85 default=None,
86 foreign_key="team.id",
87 sa_column=Column(Integer, primary_key=True),
88 )
91def test_sa_column_no_unique() -> None: 1abcdefg
92 with pytest.raises(RuntimeError): 1456789!
94 class Item(SQLModel, table=True): 1456789!
95 id: Optional[int] = Field( 1456789!
96 default=None,
97 unique=True,
98 sa_column=Column(Integer, primary_key=True),
99 )
102def test_sa_column_no_index() -> None: 1abcdefg
103 with pytest.raises(RuntimeError): 1#$%'()*
105 class Item(SQLModel, table=True): 1#$%'()*
106 id: Optional[int] = Field( 1#$%'()*
107 default=None,
108 index=True,
109 sa_column=Column(Integer, primary_key=True),
110 )
113def test_sa_column_no_ondelete() -> None: 1abcdefg
114 with pytest.raises(RuntimeError): 1+,-./:;
116 class Item(SQLModel, table=True): 1+,-./:;
117 id: Optional[int] = Field( 1+,-./:;
118 default=None,
119 sa_column=Column(Integer, primary_key=True),
120 ondelete="CASCADE",
121 )