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