-
-
Notifications
You must be signed in to change notification settings - Fork 836
Expand file tree
/
Copy pathtest_field_sa_column.py
More file actions
132 lines (97 loc) · 3.72 KB
/
test_field_sa_column.py
File metadata and controls
132 lines (97 loc) · 3.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
from typing import Annotated
import pytest
from sqlalchemy import Column, Integer, String
from sqlmodel import Field, SQLModel
def test_sa_column_takes_precedence() -> None:
class Item(SQLModel, table=True):
id: int | None = Field(
default=None,
sa_column=Column(String, primary_key=True, nullable=False),
)
# It would have been nullable with no sa_column
assert Item.id.nullable is False # type: ignore
assert isinstance(Item.id.type, String) # type: ignore
def test_sa_column_with_annotated_metadata() -> None:
class Item(SQLModel, table=True):
id: Annotated[int | None, "meta"] = Field(
default=None,
sa_column=Column(String, primary_key=True, nullable=False),
)
assert Item.id.nullable is False # type: ignore
assert isinstance(Item.id.type, String) # type: ignore
def test_sa_column_no_sa_args() -> None:
with pytest.raises(RuntimeError):
class Item(SQLModel, table=True):
id: int | None = Field(
default=None,
sa_column_args=[Integer],
sa_column=Column(Integer, primary_key=True),
)
def test_sa_column_no_sa_kargs() -> None:
with pytest.raises(RuntimeError):
class Item(SQLModel, table=True):
id: int | None = Field(
default=None,
sa_column_kwargs={"primary_key": True},
sa_column=Column(Integer, primary_key=True),
)
def test_sa_column_no_type() -> None:
with pytest.raises(RuntimeError):
class Item(SQLModel, table=True):
id: int | None = Field(
default=None,
sa_type=Integer,
sa_column=Column(Integer, primary_key=True),
)
def test_sa_column_no_primary_key() -> None:
with pytest.raises(RuntimeError):
class Item(SQLModel, table=True):
id: int | None = Field(
default=None,
primary_key=True,
sa_column=Column(Integer, primary_key=True),
)
def test_sa_column_no_nullable() -> None:
with pytest.raises(RuntimeError):
class Item(SQLModel, table=True):
id: int | None = Field(
default=None,
nullable=True,
sa_column=Column(Integer, primary_key=True),
)
def test_sa_column_no_foreign_key() -> None:
with pytest.raises(RuntimeError):
class Team(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str
class Hero(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
team_id: int | None = Field(
default=None,
foreign_key="team.id",
sa_column=Column(Integer, primary_key=True),
)
def test_sa_column_no_unique() -> None:
with pytest.raises(RuntimeError):
class Item(SQLModel, table=True):
id: int | None = Field(
default=None,
unique=True,
sa_column=Column(Integer, primary_key=True),
)
def test_sa_column_no_index() -> None:
with pytest.raises(RuntimeError):
class Item(SQLModel, table=True):
id: int | None = Field(
default=None,
index=True,
sa_column=Column(Integer, primary_key=True),
)
def test_sa_column_no_ondelete() -> None:
with pytest.raises(RuntimeError):
class Item(SQLModel, table=True):
id: int | None = Field(
default=None,
sa_column=Column(Integer, primary_key=True),
ondelete="CASCADE",
)