-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathtest_row_factories.py
More file actions
71 lines (57 loc) · 1.97 KB
/
test_row_factories.py
File metadata and controls
71 lines (57 loc) · 1.97 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
from collections.abc import Callable
from dataclasses import dataclass
from typing import Any
import pytest
from psqlpy import ConnectionPool
from psqlpy.row_factories import class_row, tuple_row
pytestmark = pytest.mark.anyio
async def test_tuple_row(
psql_pool: ConnectionPool,
table_name: str,
number_database_records: int,
) -> None:
connection = await psql_pool.connection()
conn_result = await connection.execute(
querystring=f"SELECT * FROM {table_name}",
)
tuple_res = conn_result.row_factory(row_factory=tuple_row)
assert len(tuple_res) == number_database_records
assert isinstance(tuple_res[0], tuple)
async def test_class_row(
psql_pool: ConnectionPool,
table_name: str,
number_database_records: int,
) -> None:
@dataclass
class ValidationTestModel:
id: int
name: str
connection = await psql_pool.connection()
conn_result = await connection.execute(
querystring=f"SELECT * FROM {table_name}",
)
class_res = conn_result.row_factory(row_factory=class_row(ValidationTestModel))
assert len(class_res) == number_database_records
assert isinstance(class_res[0], ValidationTestModel)
async def test_custom_row_factory(
psql_pool: ConnectionPool,
table_name: str,
number_database_records: int,
) -> None:
@dataclass
class ValidationTestModel:
id: int
name: str
def to_class(
class_: type[ValidationTestModel],
) -> Callable[[dict[str, Any]], ValidationTestModel]:
def to_class_inner(row: dict[str, Any]) -> ValidationTestModel:
return class_(**row)
return to_class_inner
connection = await psql_pool.connection()
conn_result = await connection.execute(
querystring=f"SELECT * FROM {table_name}",
)
class_res = conn_result.row_factory(row_factory=to_class(ValidationTestModel))
assert len(class_res) == number_database_records
assert isinstance(class_res[0], ValidationTestModel)