Skip to content

Commit e5c740d

Browse files
committed
added tests
1 parent 8c43592 commit e5c740d

File tree

1 file changed

+161
-0
lines changed

1 file changed

+161
-0
lines changed
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
import pytest
2+
3+
import ydb
4+
5+
from datetime import date, datetime, timedelta, timezone
6+
7+
@pytest.fixture
8+
def settings_on():
9+
settings = (
10+
ydb.QueryClientSettings()
11+
.with_native_date_in_result_sets(True)
12+
.with_native_datetime_in_result_sets(True)
13+
.with_native_timestamp_in_result_sets(True)
14+
.with_native_interval_in_result_sets(True)
15+
.with_native_json_in_result_sets(True)
16+
)
17+
return settings
18+
19+
@pytest.fixture
20+
def settings_off():
21+
settings = (
22+
ydb.QueryClientSettings()
23+
.with_native_date_in_result_sets(False)
24+
.with_native_datetime_in_result_sets(False)
25+
.with_native_timestamp_in_result_sets(False)
26+
.with_native_interval_in_result_sets(False)
27+
.with_native_json_in_result_sets(False)
28+
)
29+
return settings
30+
31+
32+
test_td = timedelta(microseconds=-100)
33+
test_now = datetime.utcnow()
34+
test_today = test_now.date()
35+
test_dt_today = datetime.today()
36+
tz4h = timezone(timedelta(hours=4))
37+
38+
pt = ydb.PrimitiveType
39+
40+
# params = pytest.mark.parametrize(
41+
# "value,ydb_type,expected_result",
42+
# [
43+
# # FIXME: TypeError: 'datetime.datetime' object cannot be interpreted as an integer
44+
# # (test_dt_today, "Datetime", test_dt_today),
45+
# (test_today, "Date", pt.Date, test_today),
46+
# (365, "Date", pt.Date, date(1971, 1, 1)),
47+
# (3600 * 24 * 365, "Datetime", pt.Datetime,datetime(1971, 1, 1, 0, 0)),
48+
# (datetime(1970, 1, 1, 4, 0, tzinfo=tz4h), "Timestamp", pt.Timestamp, datetime(1970, 1, 1, 0, 0)),
49+
# (test_td, "Interval", pt.Interval, test_td),
50+
# (test_now, "Timestamp", pt.Timestamp, test_now),
51+
# (
52+
# 1511789040123456,
53+
# "Timestamp",
54+
# pt.Timestamp,
55+
# datetime.fromisoformat("2017-11-27 13:24:00.123456"),
56+
# ),
57+
# ('{"foo": "bar"}', "Json", pt.Json, {"foo": "bar"}),
58+
# ('{"foo": "bar"}', "JsonDocument", pt.JsonDocument, {"foo": "bar"}),
59+
# ],
60+
# )
61+
62+
params = pytest.mark.parametrize(
63+
"value,ydb_type,casted_result,uncasted_type",
64+
[
65+
(test_today, "Date", test_today, int),
66+
(365, "Date", date(1971, 1, 1), int),
67+
(3600 * 24 * 365, "Datetime", datetime(1971, 1, 1, 0, 0), int),
68+
(datetime(1970, 1, 1, 4, 0, tzinfo=tz4h), "Timestamp", datetime(1970, 1, 1, 0, 0), int),
69+
(test_td, "Interval", test_td, int),
70+
(test_now, "Timestamp", test_now, int),
71+
(
72+
1511789040123456,
73+
"Timestamp",
74+
datetime.fromisoformat("2017-11-27 13:24:00.123456"),
75+
int,
76+
),
77+
('{"foo": "bar"}', "Json", {"foo": "bar"}, str),
78+
('{"foo": "bar"}', "JsonDocument", {"foo": "bar"}, str),
79+
],
80+
)
81+
82+
class TestQueryClientSettings:
83+
@params
84+
def test_driver_turn_on(self, driver_sync, settings_on, value, ydb_type, casted_result, uncasted_type):
85+
driver_sync._driver_config.query_client_settings = settings_on
86+
pool = ydb.QuerySessionPool(driver_sync)
87+
result = pool.execute_with_retries(
88+
f"DECLARE $param as {ydb_type}; SELECT $param as value",
89+
{"$param": (value, getattr(ydb.PrimitiveType, ydb_type))}
90+
)
91+
assert result[0].rows[0].value == casted_result
92+
93+
@params
94+
def test_driver_turn_off(self, driver_sync, settings_off, value, ydb_type, casted_result, uncasted_type):
95+
driver_sync._driver_config.query_client_settings = settings_off
96+
pool = ydb.QuerySessionPool(driver_sync)
97+
result = pool.execute_with_retries(
98+
f"DECLARE $param as {ydb_type}; SELECT $param as value",
99+
{"$param": (value, getattr(ydb.PrimitiveType, ydb_type))}
100+
)
101+
assert type(result[0].rows[0].value) == uncasted_type
102+
103+
@params
104+
def test_session_pool_turn_on(self, driver_sync, settings_on, value, ydb_type, casted_result, uncasted_type):
105+
pool = ydb.QuerySessionPool(driver_sync, query_client_settings=settings_on)
106+
result = pool.execute_with_retries(
107+
f"DECLARE $param as {ydb_type}; SELECT $param as value",
108+
{"$param": (value, getattr(ydb.PrimitiveType, ydb_type))}
109+
)
110+
assert result[0].rows[0].value == casted_result
111+
112+
@params
113+
def test_session_pool_turn_off(self, driver_sync, settings_off, value, ydb_type, casted_result, uncasted_type):
114+
pool = ydb.QuerySessionPool(driver_sync, query_client_settings=settings_off)
115+
result = pool.execute_with_retries(
116+
f"DECLARE $param as {ydb_type}; SELECT $param as value",
117+
{"$param": (value, getattr(ydb.PrimitiveType, ydb_type))}
118+
)
119+
assert type(result[0].rows[0].value) == uncasted_type
120+
121+
@pytest.mark.asyncio
122+
@params
123+
async def test_driver_async_turn_on(self, driver, settings_on, value, ydb_type, casted_result, uncasted_type):
124+
driver._driver_config.query_client_settings = settings_on
125+
pool = ydb.aio.QuerySessionPool(driver)
126+
result = await pool.execute_with_retries(
127+
f"DECLARE $param as {ydb_type}; SELECT $param as value",
128+
{"$param": (value, getattr(ydb.PrimitiveType, ydb_type))}
129+
)
130+
assert result[0].rows[0].value == casted_result
131+
132+
@pytest.mark.asyncio
133+
@params
134+
async def test_driver_async_turn_off(self, driver, settings_off, value, ydb_type, casted_result, uncasted_type):
135+
driver._driver_config.query_client_settings = settings_off
136+
pool = ydb.aio.QuerySessionPool(driver)
137+
result = await pool.execute_with_retries(
138+
f"DECLARE $param as {ydb_type}; SELECT $param as value",
139+
{"$param": (value, getattr(ydb.PrimitiveType, ydb_type))}
140+
)
141+
assert type(result[0].rows[0].value) == uncasted_type
142+
143+
@pytest.mark.asyncio
144+
@params
145+
async def test_session_pool_async_turn_on(self, driver, settings_on, value, ydb_type, casted_result, uncasted_type):
146+
pool = ydb.aio.QuerySessionPool(driver, query_client_settings=settings_on)
147+
result = await pool.execute_with_retries(
148+
f"DECLARE $param as {ydb_type}; SELECT $param as value",
149+
{"$param": (value, getattr(ydb.PrimitiveType, ydb_type))}
150+
)
151+
assert result[0].rows[0].value == casted_result
152+
153+
@pytest.mark.asyncio
154+
@params
155+
async def test_session_pool_async_turn_off(self, driver, settings_off, value, ydb_type, casted_result, uncasted_type):
156+
pool = ydb.aio.QuerySessionPool(driver, query_client_settings=settings_off)
157+
result = await pool.execute_with_retries(
158+
f"DECLARE $param as {ydb_type}; SELECT $param as value",
159+
{"$param": (value, getattr(ydb.PrimitiveType, ydb_type))}
160+
)
161+
assert type(result[0].rows[0].value) == uncasted_type

0 commit comments

Comments
 (0)