-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconftest.py
More file actions
147 lines (118 loc) · 3.47 KB
/
conftest.py
File metadata and controls
147 lines (118 loc) · 3.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import typing as t
import pytest
from ellar.testing import Test
from ellar_sql import EllarSQLModule, EllarSQLService, model
from ellar_sql.model.database_binds import __model_database_metadata__
super_classes_as_dataclass = [
(
(model.MappedAsDataclass, model.DeclarativeBase),
{"metaclass": type(model.DeclarativeBase)},
),
(
(
model.MappedAsDataclass,
model.DeclarativeBaseNoMeta,
),
{"metaclass": type(model.DeclarativeBaseNoMeta)},
),
]
test_classes = [
object,
(
(model.DeclarativeBase,),
{"metaclass": type(model.DeclarativeBase)},
),
(
(model.DeclarativeBaseNoMeta,),
{"metaclass": type(model.DeclarativeBaseNoMeta)},
),
]
@pytest.fixture(params=test_classes)
def base_super_class(request: pytest.FixtureRequest, ignore_base) -> t.Tuple:
if request.param is not object:
yield request.param
else:
yield ((request.param,), {})
@pytest.fixture(params=super_classes_as_dataclass)
def base_super_class_as_dataclass(
request: pytest.FixtureRequest, ignore_base
) -> t.Tuple:
yield request.param
@pytest.fixture()
def ignore_base():
copy = __model_database_metadata__.copy()
__model_database_metadata__.clear()
yield
__model_database_metadata__.update(copy)
@pytest.fixture()
def db_service(tmp_path) -> EllarSQLService:
return EllarSQLService(
databases={
"default": {"url": "sqlite:///:memory:", "echo": True, "future": True}
},
root_path=str(tmp_path),
)
@pytest.fixture()
def db_service_async(tmp_path) -> EllarSQLService:
return EllarSQLService(
databases={
"default": {
"url": "sqlite+aiosqlite:///:memory:",
"echo": True,
"future": True,
}
},
root_path=str(tmp_path),
)
@pytest.fixture()
def app_setup(tmp_path):
def _setup(**kwargs):
sql_module = kwargs.pop("sql_module", {})
sql_module.setdefault(
"databases",
{
"default": {
"url": "sqlite://",
"echo": True,
"future": True,
}
},
)
sql_module.setdefault("migration_options", {"directory": "migrations"})
tm = Test.create_test_module(
modules=[EllarSQLModule.setup(root_path=str(tmp_path), **sql_module)],
**kwargs,
)
return tm.create_application()
return _setup
@pytest.fixture()
def app_setup_async(tmp_path):
def _setup(**kwargs):
sql_module = kwargs.pop("sql_module", {})
sql_module.setdefault(
"databases",
{
"default": {
"url": "sqlite+aiosqlite://",
"echo": True,
"future": True,
}
},
)
sql_module.setdefault("migration_options", {"directory": "migrations"})
tm = Test.create_test_module(
modules=[EllarSQLModule.setup(root_path=str(tmp_path), **sql_module)],
**kwargs,
)
return tm.create_application()
return _setup
@pytest.fixture()
async def app_ctx(app_setup):
app = app_setup()
async with app.application_context():
yield app
@pytest.fixture()
async def app_ctx_async(app_setup_async):
app = app_setup_async()
async with app.application_context():
yield app