Coverage for tests / test_future_annotations.py: 100%

46 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-06-10 09:40 +0000

1from __future__ import annotations 1qrstuvwx

2 

3from typing import Annotated 1qrstuvwx

4 

5from sqlmodel import Field, Session, SQLModel, create_engine, select 1qrstuvwx

6 

7 

8def test_model_with_future_annotations(clear_sqlmodel): 1qrstuvwx

9 class Hero(SQLModel, table=True): 1ijklmnop

10 id: Annotated[int | None, Field(primary_key=True)] = None 1ijklmnop

11 name: str 1ijklmnop

12 secret_name: str 1ijklmnop

13 age: int | None = None 1ijklmnop

14 

15 hero = Hero(name="Deadpond", secret_name="Dive Wilson", age=25) 1ijklmnop

16 

17 engine = create_engine("sqlite://") 1ijklmnop

18 SQLModel.metadata.create_all(engine) 1ijklmnop

19 

20 with Session(engine) as session: 1ijklmnop

21 session.add(hero) 1ijklmnop

22 session.commit() 1ijklmnop

23 session.refresh(hero) 1ijklmnop

24 

25 assert hero.id is not None 1ijklmnop

26 assert hero.name == "Deadpond" 1ijklmnop

27 assert hero.secret_name == "Dive Wilson" 1ijklmnop

28 assert hero.age == 25 1ijklmnop

29 

30 with Session(engine) as session: 1ijklmnop

31 heroes = session.exec(select(Hero)).all() 1ijklmnop

32 assert len(heroes) == 1 1ijklmnop

33 assert heroes[0].name == "Deadpond" 1ijklmnop

34 

35 

36def test_model_with_string_annotations(clear_sqlmodel): 1qrstuvwx

37 class Team(SQLModel, table=True): 1abcdefgh

38 id: Annotated[int | None, Field(primary_key=True)] = None 1abcdefgh

39 name: str 1abcdefgh

40 

41 class Player(SQLModel, table=True): 1abcdefgh

42 id: Annotated[int | None, Field(primary_key=True)] = None 1abcdefgh

43 name: str 1abcdefgh

44 team_id: Annotated[int | None, Field(foreign_key="team.id")] = None 1abcdefgh

45 

46 engine = create_engine("sqlite://") 1abcdefgh

47 SQLModel.metadata.create_all(engine) 1abcdefgh

48 

49 team = Team(name="Champions") 1abcdefgh

50 player = Player(name="Alice", team_id=None) 1abcdefgh

51 

52 with Session(engine) as session: 1abcdefgh

53 session.add(team) 1abcdefgh

54 session.commit() 1abcdefgh

55 session.refresh(team) 1abcdefgh

56 

57 player.team_id = team.id 1abcdefgh

58 session.add(player) 1abcdefgh

59 session.commit() 1abcdefgh

60 session.refresh(player) 1abcdefgh

61 

62 assert team.id is not None 1abcdefgh

63 assert player.team_id == team.id 1abcdefgh