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

1from __future__ import annotations 1stuvwxyzA

2 

3from typing import Annotated 1stuvwxyzA

4 

5from sqlalchemy import Engine 1stuvwxyzA

6from sqlmodel import Field, Session, SQLModel, select 1stuvwxyzA

7 

8 

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

15 

16 hero = Hero(name="Deadpond", secret_name="Dive Wilson", age=25) 1jklmnopqr

17 

18 engine = database_engine 1jklmnopqr

19 SQLModel.metadata.create_all(engine) 1jklmnopqr

20 

21 with Session(engine) as session: 1jklmnopqr

22 session.add(hero) 1jklmnopqr

23 session.commit() 1jklmnopqr

24 session.refresh(hero) 1jklmnopqr

25 

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

30 

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

35 

36 

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

41 

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

46 

47 engine = database_engine 1abcdefghi

48 SQLModel.metadata.create_all(engine) 1abcdefghi

49 

50 team = Team(name="Champions") 1abcdefghi

51 player = Player(name="Alice", team_id=None) 1abcdefghi

52 

53 with Session(engine) as session: 1abcdefghi

54 session.add(team) 1abcdefghi

55 session.commit() 1abcdefghi

56 session.refresh(team) 1abcdefghi

57 

58 player.team_id = team.id 1abcdefghi

59 session.add(player) 1abcdefghi

60 session.commit() 1abcdefghi

61 session.refresh(player) 1abcdefghi

62 

63 assert team.id is not None 1abcdefghi

64 assert player.team_id == team.id 1abcdefghi