Skip to content

Commit 8e20ce5

Browse files
committed
Added test for Async Engine migrations
1 parent ed448b1 commit 8e20ce5

File tree

4 files changed

+167
-0
lines changed

4 files changed

+167
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/bin/env python
2+
import ellar_cli.click as click
3+
from ellar.app import AppFactory, current_injector
4+
from ellar.common.utils.importer import get_main_directory_by_stack
5+
from ellar_cli.main import create_ellar_cli
6+
from models import User
7+
from sqlalchemy.ext.asyncio import AsyncSession
8+
9+
from ellar_sqlalchemy import EllarSQLAlchemyModule
10+
11+
12+
def bootstrap():
13+
path = get_main_directory_by_stack(
14+
"__main__/__parent__/__parent__/dumbs/default_async", stack_level=1
15+
)
16+
application = AppFactory.create_app(
17+
modules=[
18+
EllarSQLAlchemyModule.setup(
19+
databases="sqlite+aiosqlite:///app.db",
20+
migration_options={"context_configure": {"compare_types": False}},
21+
root_path=str(path),
22+
)
23+
]
24+
)
25+
return application
26+
27+
28+
cli = create_ellar_cli("default_async:bootstrap")
29+
30+
31+
@cli.command()
32+
@click.run_as_async
33+
async def add_user():
34+
session = current_injector.get(AsyncSession)
35+
user = User(name="default App Ellar")
36+
session.add(user)
37+
38+
await session.commit()
39+
await session.refresh(user)
40+
await session.close()
41+
42+
click.echo(f"<User name={user.name} id={user.id}>")
43+
44+
45+
if __name__ == "__main__":
46+
cli()
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#!/bin/env python
2+
import ellar_cli.click as click
3+
from ellar.app import AppFactory, current_injector
4+
from ellar.common.utils.importer import get_main_directory_by_stack
5+
from ellar_cli.main import create_ellar_cli
6+
from models import Group, User
7+
from sqlalchemy.ext.asyncio import AsyncSession
8+
9+
from ellar_sqlalchemy import EllarSQLAlchemyModule
10+
11+
12+
def bootstrap():
13+
path = get_main_directory_by_stack(
14+
"__main__/__parent__/__parent__/dumbs/multiple_async", stack_level=1
15+
)
16+
application = AppFactory.create_app(
17+
modules=[
18+
EllarSQLAlchemyModule.setup(
19+
databases={
20+
"default": "sqlite+aiosqlite:///app.db",
21+
"db1": "sqlite+aiosqlite:///app2.db",
22+
},
23+
migration_options={"context_configure": {"compare_types": False}},
24+
root_path=str(path),
25+
)
26+
]
27+
)
28+
return application
29+
30+
31+
cli = create_ellar_cli("multiple_database_async:bootstrap")
32+
33+
34+
@cli.command()
35+
@click.run_as_async
36+
async def add_user():
37+
session = current_injector.get(AsyncSession)
38+
user = User(name="Multiple Database App Ellar")
39+
group = Group(name="group")
40+
41+
session.add(user)
42+
session.add(group)
43+
44+
await session.commit()
45+
46+
await session.refresh(user)
47+
await session.refresh(group)
48+
49+
await session.close()
50+
51+
click.echo(
52+
f"<User name={user.name} id={user.id} and Group name={group.name} id={group.id}>"
53+
)
54+
55+
56+
if __name__ == "__main__":
57+
cli()

tests/test_migrations/test_migrations_commands.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,33 @@ def test_other_alembic_commands():
132132
result = run_command("default.py db downgrade")
133133
assert result.returncode == 1
134134
assert b"Relative revision -1 didn't produce 1 migrations" in result.stderr
135+
136+
137+
@clean_directory("default_async")
138+
def test_migrate_upgrade_async():
139+
result = run_command("default_async.py db init")
140+
assert result.returncode == 0
141+
assert (
142+
b"tests/dumbs/default_async/migrations/alembic.ini' before proceeding."
143+
in result.stdout
144+
)
145+
146+
result = run_command("default_async.py db check")
147+
assert result.returncode == 1
148+
149+
result = run_command("default_async.py db migrate")
150+
assert result.returncode == 0
151+
152+
result = run_command("default_async.py db check")
153+
assert result.returncode == 1
154+
155+
result = run_command("default_async.py db upgrade")
156+
assert result.returncode == 0
157+
158+
result = run_command("default_async.py db check")
159+
assert result.returncode == 0
160+
assert result.stdout == b"No new upgrade operations detected.\n"
161+
162+
result = run_command("default_async.py add-user")
163+
assert result.returncode == 0
164+
assert result.stdout == b"<User name=default App Ellar id=1>\n"

tests/test_migrations/test_multiple_database.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,37 @@ def test_migrate_upgrade_multiple_database_with_model_changes():
5454
b"Detected type change from VARCHAR(length=256) to String(length=128)"
5555
in result.stderr
5656
)
57+
58+
59+
@clean_directory("multiple_async")
60+
def test_migrate_upgrade_for_multiple_database_async():
61+
with set_env_variable("multiple_db", "true"):
62+
result = run_command("multiple_database_async.py db init")
63+
assert result.returncode == 0
64+
assert (
65+
b"tests/dumbs/multiple_async/migrations/alembic.ini' before proceeding."
66+
in result.stdout
67+
)
68+
69+
result = run_command("multiple_database_async.py db check")
70+
assert result.returncode == 1
71+
72+
result = run_command("multiple_database_async.py db migrate")
73+
assert result.returncode == 0
74+
75+
result = run_command("multiple_database_async.py db check")
76+
assert result.returncode == 1
77+
78+
result = run_command("multiple_database_async.py db upgrade")
79+
assert result.returncode == 0
80+
81+
result = run_command("multiple_database_async.py db check")
82+
assert result.returncode == 0
83+
assert result.stdout == b"No new upgrade operations detected.\n"
84+
85+
result = run_command("multiple_database_async.py add-user")
86+
assert result.returncode == 0
87+
assert (
88+
result.stdout
89+
== b"<User name=Multiple Database App Ellar id=1 and Group name=group id=1>\n"
90+
)

0 commit comments

Comments
 (0)