Coverage for tests / test_future_annotations.py: 100%
47 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-11-09 00:02 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-11-09 00:02 +0000
1from __future__ import annotations 1stuvwxyzA
3from typing import Annotated 1stuvwxyzA
5from sqlalchemy import Engine 1stuvwxyzA
6from sqlmodel import Field, Session, SQLModel, select 1stuvwxyzA
9def test_model_with_future_annotations(database_engine: Engine): 1stuvwxyzA
10 class Hero(SQLModel, table=True): 1jklmnopqr
11 id: Annotated[int | None, Field(primary_key=True)] = None 1jklmnopqr
12 name: str 1jklmnopqr
13 secret_name: str 1jklmnopqr
14 age: int | None = None 1jklmnopqr
16 hero = Hero(name="Deadpond", secret_name="Dive Wilson", age=25) 1jklmnopqr
18 engine = database_engine 1jklmnopqr
19 SQLModel.metadata.create_all(engine) 1jklmnopqr
21 with Session(engine) as session: 1jklmnopqr
22 session.add(hero) 1jklmnopqr
23 session.commit() 1jklmnopqr
24 session.refresh(hero) 1jklmnopqr
26 assert hero.id is not None 1jklmnopqr
27 assert hero.name == "Deadpond" 1jklmnopqr
28 assert hero.secret_name == "Dive Wilson" 1jklmnopqr
29 assert hero.age == 25 1jklmnopqr
31 with Session(engine) as session: 1jklmnopqr
32 heroes = session.exec(select(Hero)).all() 1jklmnopqr
33 assert len(heroes) == 1 1jklmnopqr
34 assert heroes[0].name == "Deadpond" 1jklmnopqr
37def test_model_with_string_annotations(database_engine: Engine): 1stuvwxyzA
38 class Team(SQLModel, table=True): 1abcdefghi
39 id: Annotated[int | None, Field(primary_key=True)] = None 1abcdefghi
40 name: str 1abcdefghi
42 class Player(SQLModel, table=True): 1abcdefghi
43 id: Annotated[int | None, Field(primary_key=True)] = None 1abcdefghi
44 name: str 1abcdefghi
45 team_id: Annotated[int | None, Field(foreign_key="team.id")] = None 1abcdefghi
47 engine = database_engine 1abcdefghi
48 SQLModel.metadata.create_all(engine) 1abcdefghi
50 team = Team(name="Champions") 1abcdefghi
51 player = Player(name="Alice", team_id=None) 1abcdefghi
53 with Session(engine) as session: 1abcdefghi
54 session.add(team) 1abcdefghi
55 session.commit() 1abcdefghi
56 session.refresh(team) 1abcdefghi
58 player.team_id = team.id 1abcdefghi
59 session.add(player) 1abcdefghi
60 session.commit() 1abcdefghi
61 session.refresh(player) 1abcdefghi
63 assert team.id is not None 1abcdefghi
64 assert player.team_id == team.id 1abcdefghi