
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
122 lines
3.4 KiB
Python
122 lines
3.4 KiB
Python
from typing import Optional
|
|
|
|
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: Optional[int] = 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_no_sa_args() -> None:
|
|
with pytest.raises(RuntimeError):
|
|
|
|
class Item(SQLModel, table=True):
|
|
id: Optional[int] = 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: Optional[int] = 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: Optional[int] = 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: Optional[int] = 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: Optional[int] = 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: Optional[int] = Field(default=None, primary_key=True)
|
|
name: str
|
|
|
|
class Hero(SQLModel, table=True):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
team_id: Optional[int] = 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: Optional[int] = 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: Optional[int] = 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: Optional[int] = Field(
|
|
default=None,
|
|
sa_column=Column(Integer, primary_key=True),
|
|
ondelete="CASCADE",
|
|
)
|