Skip to content

Commit 5318152

Browse files
committed
Add tests
1 parent 9ba902b commit 5318152

File tree

5 files changed

+248
-0
lines changed

5 files changed

+248
-0
lines changed

tests/test_tutorial/test_str_fields_and_column_length/__init__.py

Whitespace-only changes.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import importlib
2+
import runpy
3+
import sys
4+
from types import ModuleType
5+
6+
import pytest
7+
from sqlalchemy import create_mock_engine
8+
from sqlalchemy.exc import OperationalError
9+
from sqlalchemy.sql.type_api import TypeEngine
10+
from sqlmodel import create_engine
11+
12+
from ...conftest import needs_py310
13+
14+
15+
def mysql_dump(sql: TypeEngine, *args, **kwargs):
16+
dialect = sql.compile(dialect=mysql_engine.dialect)
17+
sql_str = str(dialect).rstrip()
18+
if sql_str:
19+
print(sql_str + ";")
20+
21+
22+
mysql_engine = create_mock_engine("mysql://", mysql_dump)
23+
24+
25+
@pytest.fixture(
26+
name="mod",
27+
params=[
28+
pytest.param("tutorial001_py39"),
29+
pytest.param("tutorial001_py310", marks=needs_py310),
30+
],
31+
)
32+
def get_module(request: pytest.FixtureRequest) -> ModuleType:
33+
mod = importlib.import_module(
34+
f"docs_src.tutorial.str_fields_and_column_length.{request.param}"
35+
)
36+
return mod
37+
38+
39+
def test_sqlite_ddl_sql(mod: ModuleType, caplog: pytest.LogCaptureFixture):
40+
mod.sqlite_url = "sqlite://"
41+
mod.engine = create_engine(mod.sqlite_url, echo=True)
42+
mod.create_db_and_tables()
43+
assert "CREATE TABLE hero (" in caplog.text
44+
assert "name VARCHAR NOT NULL" in caplog.text
45+
46+
47+
def test_mysql_ddl_sql(mod: ModuleType, capsys: pytest.CaptureFixture[str]):
48+
importlib.reload(mod)
49+
50+
mod.SQLModel.metadata.create_all(bind=mysql_engine, checkfirst=False)
51+
captured = capsys.readouterr()
52+
assert "CREATE TABLE hero (" in captured.out
53+
assert "name VARCHAR(255) NOT NULL" in captured.out
54+
55+
56+
# For coverage
57+
def test_run_main(mod: ModuleType):
58+
# Remove module to avoid double-import warning
59+
sys.modules.pop(mod.__name__, None)
60+
61+
with pytest.raises(OperationalError):
62+
runpy.run_module(mod.__name__, run_name="__main__")
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import importlib
2+
import runpy
3+
import sys
4+
from types import ModuleType
5+
6+
import pytest
7+
from sqlalchemy import create_mock_engine
8+
from sqlalchemy.exc import OperationalError
9+
from sqlalchemy.sql.type_api import TypeEngine
10+
from sqlmodel import create_engine
11+
12+
from ...conftest import needs_py310
13+
14+
15+
def mysql_dump(sql: TypeEngine, *args, **kwargs):
16+
dialect = sql.compile(dialect=mysql_engine.dialect)
17+
sql_str = str(dialect).rstrip()
18+
if sql_str:
19+
print(sql_str + ";")
20+
21+
22+
mysql_engine = create_mock_engine("mysql://", mysql_dump)
23+
24+
25+
@pytest.fixture(
26+
name="mod",
27+
params=[
28+
pytest.param("tutorial002_py39"),
29+
pytest.param("tutorial002_py310", marks=needs_py310),
30+
],
31+
)
32+
def get_module(request: pytest.FixtureRequest) -> ModuleType:
33+
mod = importlib.import_module(
34+
f"docs_src.tutorial.str_fields_and_column_length.{request.param}"
35+
)
36+
return mod
37+
38+
39+
def test_sqlite_ddl_sql(mod: ModuleType, caplog: pytest.LogCaptureFixture):
40+
mod.sqlite_url = "sqlite://"
41+
mod.engine = create_engine(mod.sqlite_url, echo=True)
42+
mod.create_db_and_tables()
43+
assert "CREATE TABLE hero (" in caplog.text
44+
assert "name VARCHAR(100) NOT NULL" in caplog.text
45+
46+
47+
def test_mysql_ddl_sql(mod: ModuleType, capsys: pytest.CaptureFixture[str]):
48+
importlib.reload(mod)
49+
50+
mod.SQLModel.metadata.create_all(bind=mysql_engine, checkfirst=False)
51+
captured = capsys.readouterr()
52+
assert "CREATE TABLE hero (" in captured.out
53+
assert "name VARCHAR(100) NOT NULL" in captured.out
54+
55+
56+
# For coverage
57+
def test_run_main(mod: ModuleType):
58+
# Remove module to avoid double-import warning
59+
sys.modules.pop(mod.__name__, None)
60+
61+
with pytest.raises(OperationalError):
62+
runpy.run_module(mod.__name__, run_name="__main__")
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import importlib
2+
import runpy
3+
import sys
4+
from types import ModuleType
5+
6+
import pytest
7+
from sqlalchemy import create_mock_engine
8+
from sqlalchemy.exc import CompileError, OperationalError
9+
from sqlalchemy.sql.type_api import TypeEngine
10+
from sqlmodel import create_engine
11+
12+
from ...conftest import needs_py310
13+
14+
15+
def mysql_dump(sql: TypeEngine, *args, **kwargs):
16+
dialect = sql.compile(dialect=mysql_engine.dialect)
17+
sql_str = str(dialect).rstrip()
18+
if sql_str:
19+
print(sql_str + ";")
20+
21+
22+
mysql_engine = create_mock_engine("mysql://", mysql_dump)
23+
24+
25+
@pytest.fixture(
26+
name="mod",
27+
params=[
28+
pytest.param("tutorial003_py39"),
29+
pytest.param("tutorial003_py310", marks=needs_py310),
30+
],
31+
)
32+
def get_module(request: pytest.FixtureRequest) -> ModuleType:
33+
mod = importlib.import_module(
34+
f"docs_src.tutorial.str_fields_and_column_length.{request.param}"
35+
)
36+
return mod
37+
38+
39+
def test_sqlite_ddl_sql(mod: ModuleType, caplog: pytest.LogCaptureFixture):
40+
mod.sqlite_url = "sqlite://"
41+
mod.engine = create_engine(mod.sqlite_url, echo=True)
42+
mod.create_db_and_tables()
43+
assert "CREATE TABLE hero (" in caplog.text
44+
assert "name VARCHAR NOT NULL" in caplog.text
45+
46+
47+
def test_mysql_ddl_sql(mod: ModuleType):
48+
importlib.reload(mod)
49+
50+
with pytest.raises(CompileError) as exc_info:
51+
mod.SQLModel.metadata.create_all(bind=mysql_engine, checkfirst=False)
52+
53+
assert "VARCHAR requires a length on dialect mysql" in str(exc_info.value)
54+
55+
56+
# For coverage
57+
def test_run_main(mod: ModuleType):
58+
# Remove module to avoid double-import warning
59+
sys.modules.pop(mod.__name__, None)
60+
61+
with pytest.raises(OperationalError):
62+
runpy.run_module(mod.__name__, run_name="__main__")
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import importlib
2+
import runpy
3+
import sys
4+
from types import ModuleType
5+
6+
import pytest
7+
from sqlalchemy import create_mock_engine
8+
from sqlalchemy.exc import OperationalError
9+
from sqlalchemy.sql.type_api import TypeEngine
10+
from sqlmodel import create_engine
11+
12+
from ...conftest import needs_py310
13+
14+
15+
def mysql_dump(sql: TypeEngine, *args, **kwargs):
16+
dialect = sql.compile(dialect=mysql_engine.dialect)
17+
sql_str = str(dialect).rstrip()
18+
if sql_str:
19+
print(sql_str + ";")
20+
21+
22+
mysql_engine = create_mock_engine("mysql://", mysql_dump)
23+
24+
25+
@pytest.fixture(
26+
name="mod",
27+
params=[
28+
pytest.param("tutorial004_py39"),
29+
pytest.param("tutorial004_py310", marks=needs_py310),
30+
],
31+
)
32+
def get_module(request: pytest.FixtureRequest) -> ModuleType:
33+
mod = importlib.import_module(
34+
f"docs_src.tutorial.str_fields_and_column_length.{request.param}"
35+
)
36+
return mod
37+
38+
39+
def test_sqlite_ddl_sql(mod: ModuleType, caplog: pytest.LogCaptureFixture):
40+
mod.sqlite_url = "sqlite://"
41+
mod.engine = create_engine(mod.sqlite_url, echo=True)
42+
mod.create_db_and_tables()
43+
assert "CREATE TABLE hero (" in caplog.text
44+
assert "name VARCHAR(255) NOT NULL" in caplog.text
45+
46+
47+
def test_mysql_ddl_sql(mod: ModuleType, capsys: pytest.CaptureFixture[str]):
48+
importlib.reload(mod)
49+
50+
mod.SQLModel.metadata.create_all(bind=mysql_engine, checkfirst=False)
51+
captured = capsys.readouterr()
52+
assert "CREATE TABLE hero (" in captured.out
53+
assert "name VARCHAR(255) NOT NULL" in captured.out
54+
55+
56+
# For coverage
57+
def test_run_main(mod: ModuleType):
58+
# Remove module to avoid double-import warning
59+
sys.modules.pop(mod.__name__, None)
60+
61+
with pytest.raises(OperationalError):
62+
runpy.run_module(mod.__name__, run_name="__main__")

0 commit comments

Comments
 (0)