11# pylint: disable=inconsistent-return-statements
22# pylint: disable=redefined-outer-name
33
4- from collections .abc import AsyncIterator , Awaitable , Callable
4+ from collections .abc import Awaitable , Callable
55from typing import Any
66
77import pytest
1414 UserServicesUserPreferencesRepo ,
1515)
1616from sqlalchemy .engine .row import Row
17- from sqlalchemy .ext .asyncio import AsyncConnection , AsyncEngine
17+ from sqlalchemy .ext .asyncio import AsyncEngine
1818
1919
2020@pytest .fixture
@@ -40,54 +40,49 @@ def preference_repo(request: pytest.FixtureRequest) -> type[BasePreferencesRepo]
4040 return request .param
4141
4242
43- @pytest .fixture
44- async def connection (
45- asyncpg_engine : AsyncEngine ,
46- ) -> AsyncIterator [AsyncConnection ]:
47- async with asyncpg_engine .begin () as connection :
48- yield connection
49-
50-
5143async def _assert_save_get_preference (
52- connection : AsyncConnection ,
44+ asyncpg_engine : AsyncEngine ,
5345 preference_repo : type [BasePreferencesRepo ],
5446 * ,
5547 user_id : int ,
5648 preference_name : str ,
5749 product_name : str ,
5850 payload : Any ,
5951) -> None :
60- await preference_repo .save (
61- connection ,
62- user_id = user_id ,
63- preference_name = preference_name ,
64- product_name = product_name ,
65- payload = payload ,
66- )
67- get_res_2 : Any | None = await preference_repo .load (
68- connection ,
69- user_id = user_id ,
70- preference_name = preference_name ,
71- product_name = product_name ,
72- )
52+ async with asyncpg_engine .begin () as connection :
53+ await preference_repo .save (
54+ connection ,
55+ user_id = user_id ,
56+ preference_name = preference_name ,
57+ product_name = product_name ,
58+ payload = payload ,
59+ )
60+ async with asyncpg_engine .connect () as connection :
61+ get_res_2 : Any | None = await preference_repo .load (
62+ connection ,
63+ user_id = user_id ,
64+ preference_name = preference_name ,
65+ product_name = product_name ,
66+ )
7367 assert get_res_2 is not None
7468 assert get_res_2 == payload
7569
7670
7771async def _assert_preference_not_saved (
78- connection : AsyncConnection ,
72+ asyncpg_engine : AsyncEngine ,
7973 preference_repo : type [BasePreferencesRepo ],
8074 * ,
8175 user_id : int ,
8276 preference_name : str ,
8377 product_name : str ,
8478) -> None :
85- not_found : Any | None = await preference_repo .load (
86- connection ,
87- user_id = user_id ,
88- preference_name = preference_name ,
89- product_name = product_name ,
90- )
79+ async with asyncpg_engine .connect () as connection :
80+ not_found : Any | None = await preference_repo .load (
81+ connection ,
82+ user_id = user_id ,
83+ preference_name = preference_name ,
84+ product_name = product_name ,
85+ )
9186 assert not_found is None
9287
9388
@@ -102,26 +97,27 @@ def _get_random_payload(
10297 pytest .fail (f"Did not define a casa for { preference_repo = } . Please add one." )
10398
10499
105- async def _get_user_id ( connection : AsyncConnection , faker : Faker ) -> int :
100+ async def _create_user_id ( asyncpg_engine : AsyncEngine , faker : Faker ) -> int :
106101 data = random_user (role = faker .random_element (elements = UserRole ))
107- user_id = await connection .scalar (
108- users .insert ().values (** data ).returning (users .c .id )
109- )
102+ async with asyncpg_engine .begin () as connection :
103+ user_id = await connection .scalar (
104+ users .insert ().values (** data ).returning (users .c .id )
105+ )
110106 assert user_id
111107 return user_id
112108
113109
114110async def test_user_preference_repo_workflow (
115- connection : AsyncConnection ,
111+ asyncpg_engine : AsyncEngine ,
116112 preference_repo : type [BasePreferencesRepo ],
117113 preference_one : str ,
118114 product_name : str ,
119115 faker : Faker ,
120116):
121- user_id = await _get_user_id ( connection , faker )
117+ user_id = await _create_user_id ( asyncpg_engine , faker )
122118 # preference is not saved
123119 await _assert_preference_not_saved (
124- connection ,
120+ asyncpg_engine ,
125121 preference_repo ,
126122 user_id = user_id ,
127123 preference_name = preference_one ,
@@ -134,7 +130,7 @@ async def test_user_preference_repo_workflow(
134130
135131 # store the preference for the first time
136132 await _assert_save_get_preference (
137- connection ,
133+ asyncpg_engine ,
138134 preference_repo ,
139135 user_id = user_id ,
140136 preference_name = preference_one ,
@@ -144,7 +140,7 @@ async def test_user_preference_repo_workflow(
144140
145141 # updating the preference still works
146142 await _assert_save_get_preference (
147- connection ,
143+ asyncpg_engine ,
148144 preference_repo ,
149145 user_id = user_id ,
150146 preference_name = preference_one ,
@@ -154,29 +150,29 @@ async def test_user_preference_repo_workflow(
154150
155151
156152async def test__same_preference_name_product_name__different_users (
157- connection : AsyncConnection ,
153+ asyncpg_engine : AsyncEngine ,
158154 preference_repo : type [BasePreferencesRepo ],
159155 preference_one : str ,
160156 product_name : str ,
161157 faker : Faker ,
162158):
163- user_id_1 = await _get_user_id ( connection , faker )
164- user_id_2 = await _get_user_id ( connection , faker )
159+ user_id_1 = await _create_user_id ( asyncpg_engine , faker )
160+ user_id_2 = await _create_user_id ( asyncpg_engine , faker )
165161
166162 payload_1 = _get_random_payload (faker , preference_repo )
167163 payload_2 = _get_random_payload (faker , preference_repo )
168164 assert payload_1 != payload_2
169165
170166 # save preference for first user
171167 await _assert_preference_not_saved (
172- connection ,
168+ asyncpg_engine ,
173169 preference_repo ,
174170 user_id = user_id_1 ,
175171 preference_name = preference_one ,
176172 product_name = product_name ,
177173 )
178174 await _assert_save_get_preference (
179- connection ,
175+ asyncpg_engine ,
180176 preference_repo ,
181177 user_id = user_id_1 ,
182178 preference_name = preference_one ,
@@ -186,14 +182,14 @@ async def test__same_preference_name_product_name__different_users(
186182
187183 # save preference for second user
188184 await _assert_preference_not_saved (
189- connection ,
185+ asyncpg_engine ,
190186 preference_repo ,
191187 user_id = user_id_2 ,
192188 preference_name = preference_one ,
193189 product_name = product_name ,
194190 )
195191 await _assert_save_get_preference (
196- connection ,
192+ asyncpg_engine ,
197193 preference_repo ,
198194 user_id = user_id_2 ,
199195 preference_name = preference_one ,
@@ -203,7 +199,7 @@ async def test__same_preference_name_product_name__different_users(
203199
204200
205201async def test__same_user_preference_name__different_product_name (
206- connection : AsyncConnection ,
202+ asyncpg_engine : AsyncEngine ,
207203 create_fake_product : Callable [[str ], Awaitable [Row ]],
208204 preference_repo : type [BasePreferencesRepo ],
209205 preference_one : str ,
@@ -212,22 +208,22 @@ async def test__same_user_preference_name__different_product_name(
212208 product_1 = (await create_fake_product ("fake-product-1" ))[0 ]
213209 product_2 = (await create_fake_product ("fake-product-2" ))[0 ]
214210
215- user_id = await _get_user_id ( connection , faker )
211+ user_id = await _create_user_id ( asyncpg_engine , faker )
216212
217213 payload_1 = _get_random_payload (faker , preference_repo )
218214 payload_2 = _get_random_payload (faker , preference_repo )
219215 assert payload_1 != payload_2
220216
221217 # save for first product_name
222218 await _assert_preference_not_saved (
223- connection ,
219+ asyncpg_engine ,
224220 preference_repo ,
225221 user_id = user_id ,
226222 preference_name = preference_one ,
227223 product_name = product_1 ,
228224 )
229225 await _assert_save_get_preference (
230- connection ,
226+ asyncpg_engine ,
231227 preference_repo ,
232228 user_id = user_id ,
233229 preference_name = preference_one ,
@@ -237,14 +233,14 @@ async def test__same_user_preference_name__different_product_name(
237233
238234 # save for second product_name
239235 await _assert_preference_not_saved (
240- connection ,
236+ asyncpg_engine ,
241237 preference_repo ,
242238 user_id = user_id ,
243239 preference_name = preference_one ,
244240 product_name = product_2 ,
245241 )
246242 await _assert_save_get_preference (
247- connection ,
243+ asyncpg_engine ,
248244 preference_repo ,
249245 user_id = user_id ,
250246 preference_name = preference_one ,
@@ -254,29 +250,29 @@ async def test__same_user_preference_name__different_product_name(
254250
255251
256252async def test__same_product_name_user__different_preference_name (
257- connection : AsyncConnection ,
253+ asyncpg_engine : AsyncEngine ,
258254 preference_repo : type [BasePreferencesRepo ],
259255 preference_one : str ,
260256 preference_two : str ,
261257 product_name : str ,
262258 faker : Faker ,
263259):
264- user_id = await _get_user_id ( connection , faker )
260+ user_id = await _create_user_id ( asyncpg_engine , faker )
265261
266262 payload_1 = _get_random_payload (faker , preference_repo )
267263 payload_2 = _get_random_payload (faker , preference_repo )
268264 assert payload_1 != payload_2
269265
270266 # save first preference
271267 await _assert_preference_not_saved (
272- connection ,
268+ asyncpg_engine ,
273269 preference_repo ,
274270 user_id = user_id ,
275271 preference_name = preference_one ,
276272 product_name = product_name ,
277273 )
278274 await _assert_save_get_preference (
279- connection ,
275+ asyncpg_engine ,
280276 preference_repo ,
281277 user_id = user_id ,
282278 preference_name = preference_one ,
@@ -286,14 +282,14 @@ async def test__same_product_name_user__different_preference_name(
286282
287283 # save second preference
288284 await _assert_preference_not_saved (
289- connection ,
285+ asyncpg_engine ,
290286 preference_repo ,
291287 user_id = user_id ,
292288 preference_name = preference_two ,
293289 product_name = product_name ,
294290 )
295291 await _assert_save_get_preference (
296- connection ,
292+ asyncpg_engine ,
297293 preference_repo ,
298294 user_id = user_id ,
299295 preference_name = preference_two ,
0 commit comments