-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_utils.py
More file actions
133 lines (89 loc) · 3.76 KB
/
Copy pathtest_utils.py
File metadata and controls
133 lines (89 loc) · 3.76 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
import typing as t
import pytest
from ellar.app import App
from ellar.common import NotFound
from ellar.threading.sync_worker import execute_coroutine
from ellar_sql import (
EllarSQLService,
first_or_404,
first_or_none,
get_or_404,
get_or_none,
model,
one_or_404,
)
def _create_model():
class User(model.Model):
id: model.Mapped[int] = model.Column(model.Integer, primary_key=True)
name: model.Mapped[str] = model.Column(model.String)
return User
def _seed_model(app: App):
user_model = _create_model()
db_service = app.injector.get(EllarSQLService)
session = db_service.session_factory()
db_service.create_all()
session.add(user_model(name="First User"))
res = session.commit()
if isinstance(res, t.Coroutine):
execute_coroutine(res)
return user_model
async def test_get_or_404_works(ignore_base, app_ctx, anyio_backend):
user_model = _seed_model(app_ctx)
user_instance = await get_or_404(user_model, 1)
assert user_instance.name == "First User"
with pytest.raises(NotFound):
await get_or_404(user_model, 2)
async def test_get_or_404_async_works(ignore_base, app_ctx_async, anyio_backend):
if anyio_backend == "asyncio":
user_model = _seed_model(app_ctx_async)
user_instance = await get_or_404(user_model, 1)
assert user_instance.name == "First User"
with pytest.raises(NotFound):
await get_or_404(user_model, 2)
async def test_get_or_none_async_works(ignore_base, app_ctx_async, anyio_backend):
if anyio_backend == "asyncio":
user_model = _seed_model(app_ctx_async)
user_instance = await get_or_none(user_model, 1)
assert user_instance.name == "First User"
assert await get_or_none(user_model, 2) is None
async def test_first_or_404_works(ignore_base, app_ctx, anyio_backend):
user_model = _seed_model(app_ctx)
user_instance = await first_or_404(
model.select(user_model).where(user_model.id == 1)
)
assert user_instance.name == "First User"
with pytest.raises(NotFound):
await first_or_404(model.select(user_model).where(user_model.id == 2))
async def test_first_or_none_works(ignore_base, app_ctx, anyio_backend):
user_model = _seed_model(app_ctx)
user_instance = await first_or_none(
model.select(user_model).where(user_model.id == 1)
)
assert user_instance.name == "First User"
assert (
await first_or_none(model.select(user_model).where(user_model.id == 2)) is None
)
async def test_first_or_404_async_works(ignore_base, app_ctx_async, anyio_backend):
if anyio_backend == "asyncio":
user_model = _seed_model(app_ctx_async)
user_instance = await first_or_404(
model.select(user_model).where(user_model.id == 1)
)
assert user_instance.name == "First User"
with pytest.raises(NotFound):
await first_or_404(model.select(user_model).where(user_model.id == 2))
async def test_one_or_404_works(ignore_base, app_ctx, anyio_backend):
user_model = _seed_model(app_ctx)
user_instance = await one_or_404(model.select(user_model).where(user_model.id == 1))
assert user_instance.name == "First User"
with pytest.raises(NotFound):
await one_or_404(model.select(user_model).where(user_model.id == 2))
async def test_one_or_404_async_works(ignore_base, app_ctx_async, anyio_backend):
if anyio_backend == "asyncio":
user_model = _seed_model(app_ctx_async)
user_instance = await one_or_404(
model.select(user_model).where(user_model.id == 1)
)
assert user_instance.name == "First User"
with pytest.raises(NotFound):
await one_or_404(model.select(user_model).where(user_model.id == 2))