Coverage for tests / test_enums.py: 100%
37 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-01-06 21:09 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-01-06 21:09 +0000
1import importlib 1abcidefgh
3import pytest 1abcidefgh
4from sqlalchemy import create_mock_engine 1abcidefgh
5from sqlalchemy.sql.type_api import TypeEngine 1abcidefgh
6from sqlmodel import SQLModel 1abcidefgh
8from . import test_enums_models 1abcidefgh
10""" 1abcdefgh
11Tests related to Enums
13Associated issues:
14* https://github.com/tiangolo/sqlmodel/issues/96
15* https://github.com/tiangolo/sqlmodel/issues/164
16"""
19def pg_dump(sql: TypeEngine, *args, **kwargs): 1abcidefgh
20 dialect = sql.compile(dialect=postgres_engine.dialect) 1jklmnopqr
21 sql_str = str(dialect).rstrip() 1jklmnopqr
22 if sql_str: 1jklmnopqr
23 print(sql_str + ";") 1jklmnopqr
26def sqlite_dump(sql: TypeEngine, *args, **kwargs): 1abcidefgh
27 dialect = sql.compile(dialect=sqlite_engine.dialect) 1stuvwxyzA
28 sql_str = str(dialect).rstrip() 1stuvwxyzA
29 if sql_str: 1stuvwxyzA
30 print(sql_str + ";") 1stuvwxyzA
33postgres_engine = create_mock_engine("postgresql://", pg_dump) 1abcidefgh
34sqlite_engine = create_mock_engine("sqlite://", sqlite_dump) 1abcidefgh
37def test_postgres_ddl_sql(clear_sqlmodel, capsys: pytest.CaptureFixture[str]): 1abcidefgh
38 assert test_enums_models, "Ensure the models are imported and registered" 1jklmnopqr
39 importlib.reload(test_enums_models) 1jklmnopqr
40 SQLModel.metadata.create_all(bind=postgres_engine, checkfirst=False) 1jklmnopqr
42 captured = capsys.readouterr() 1jklmnopqr
43 assert "CREATE TYPE myenum1 AS ENUM ('A', 'B');" in captured.out 1jklmnopqr
44 assert "CREATE TYPE myenum2 AS ENUM ('C', 'D');" in captured.out 1jklmnopqr
47def test_sqlite_ddl_sql(clear_sqlmodel, capsys: pytest.CaptureFixture[str]): 1abcidefgh
48 assert test_enums_models, "Ensure the models are imported and registered" 1stuvwxyzA
49 importlib.reload(test_enums_models) 1stuvwxyzA
50 SQLModel.metadata.create_all(bind=sqlite_engine, checkfirst=False) 1stuvwxyzA
52 captured = capsys.readouterr() 1stuvwxyzA
53 assert "enum_field VARCHAR(1) NOT NULL" in captured.out, captured 1stuvwxyzA
54 assert "CREATE TYPE" not in captured.out 1stuvwxyzA
57def test_json_schema_flat_model_pydantic_v2(): 1abcidefgh
58 assert test_enums_models.FlatModel.model_json_schema() == { 1BCDEFGHIJ
59 "title": "FlatModel",
60 "type": "object",
61 "properties": {
62 "id": {"title": "Id", "type": "string", "format": "uuid"},
63 "enum_field": {"$ref": "#/$defs/MyEnum1"},
64 },
65 "required": ["id", "enum_field"],
66 "$defs": {
67 "MyEnum1": {"enum": ["A", "B"], "title": "MyEnum1", "type": "string"}
68 },
69 }
72def test_json_schema_inherit_model_pydantic_v2(): 1abcidefgh
73 assert test_enums_models.InheritModel.model_json_schema() == { 1KLMNOPQRS
74 "title": "InheritModel",
75 "type": "object",
76 "properties": {
77 "id": {"title": "Id", "type": "string", "format": "uuid"},
78 "enum_field": {"$ref": "#/$defs/MyEnum2"},
79 },
80 "required": ["id", "enum_field"],
81 "$defs": {
82 "MyEnum2": {"enum": ["C", "D"], "title": "MyEnum2", "type": "string"}
83 },
84 }