mirror of
				https://github.com/fastapi/sqlmodel.git
				synced 2025-10-31 18:15:44 +08:00 
			
		
		
		
	 86ab09f7ec
			
		
	
	86ab09f7ec
	
	
	
		
			
			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",
 | |
|             )
 |