Coverage for tests/test_field_sa_column.py: 100%
49 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-27 00:03 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-27 00:03 +0000
1from typing import Optional 1abcdefghij
3import pytest 1abcdefghij
4from sqlalchemy import Column, Integer, String 1abcdefghij
5from sqlmodel import Field, SQLModel 1abcdefghij
8def test_sa_column_takes_precedence() -> None: 1abcdefghij
9 class Item(SQLModel, table=True): 1uvwxyzABCD
10 id: Optional[int] = Field( 1uvwxyzABCD
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 1uvwxyzABCD
17 assert isinstance(Item.id.type, String) # type: ignore 1uvwxyzABCD
20def test_sa_column_no_sa_args() -> None: 1abcdefghij
21 with pytest.raises(RuntimeError): 1EFGHIJKLMN
23 class Item(SQLModel, table=True): 1EFGHIJKLMN
24 id: Optional[int] = Field( 1EFGHIJKLMN
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: 1abcdefghij
32 with pytest.raises(RuntimeError): 1OPQRSTUVWX
34 class Item(SQLModel, table=True): 1OPQRSTUVWX
35 id: Optional[int] = Field( 1OPQRSTUVWX
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: 1abcdefghij
43 with pytest.raises(RuntimeError): 1YZ01234567
45 class Item(SQLModel, table=True): 1YZ01234567
46 id: Optional[int] = Field( 1YZ01234567
47 default=None,
48 sa_type=Integer,
49 sa_column=Column(Integer, primary_key=True),
50 )
53def test_sa_column_no_primary_key() -> None: 1abcdefghij
54 with pytest.raises(RuntimeError): 189!#$%'()*
56 class Item(SQLModel, table=True): 189!#$%'()*
57 id: Optional[int] = Field( 189!#$%'()*
58 default=None,
59 primary_key=True,
60 sa_column=Column(Integer, primary_key=True),
61 )
64def test_sa_column_no_nullable() -> None: 1abcdefghij
65 with pytest.raises(RuntimeError): 1+,-./:;=?@
67 class Item(SQLModel, table=True): 1+,-./:;=?@
68 id: Optional[int] = Field( 1+,-./:;=?@
69 default=None,
70 nullable=True,
71 sa_column=Column(Integer, primary_key=True),
72 )
75def test_sa_column_no_foreign_key() -> None: 1abcdefghij
76 with pytest.raises(RuntimeError): 1klmnopqrst
78 class Team(SQLModel, table=True): 1klmnopqrst
79 id: Optional[int] = Field(default=None, primary_key=True) 1klmnopqrst
80 name: str 1klmnopqrst
82 class Hero(SQLModel, table=True): 1klmnopqrst
83 id: Optional[int] = Field(default=None, primary_key=True) 1klmnopqrst
84 team_id: Optional[int] = Field( 1klmnopqrst
85 default=None,
86 foreign_key="team.id",
87 sa_column=Column(Integer, primary_key=True),
88 )
91def test_sa_column_no_unique() -> None: 1abcdefghij
92 with pytest.raises(RuntimeError): 2[ ] ^ _ ` { | } ~ ab
94 class Item(SQLModel, table=True): 2[ ] ^ _ ` { | } ~ ab
95 id: Optional[int] = Field( 2[ ] ^ _ ` { | } ~ ab
96 default=None,
97 unique=True,
98 sa_column=Column(Integer, primary_key=True),
99 )
102def test_sa_column_no_index() -> None: 1abcdefghij
103 with pytest.raises(RuntimeError): 2bbcbdbebfbgbhbibjbkb
105 class Item(SQLModel, table=True): 2bbcbdbebfbgbhbibjbkb
106 id: Optional[int] = Field( 2bbcbdbebfbgbhbibjbkb
107 default=None,
108 index=True,
109 sa_column=Column(Integer, primary_key=True),
110 )
113def test_sa_column_no_ondelete() -> None: 1abcdefghij
114 with pytest.raises(RuntimeError): 2lbmbnbobpbqbrbsbtbub
116 class Item(SQLModel, table=True): 2lbmbnbobpbqbrbsbtbub
117 id: Optional[int] = Field( 2lbmbnbobpbqbrbsbtbub
118 default=None,
119 sa_column=Column(Integer, primary_key=True),
120 ondelete="CASCADE",
121 )