Skip to content

Commit 7606663

Browse files
committed
test: TT-185 query_builder tests
1 parent 2b57549 commit 7606663

File tree

3 files changed

+189
-9
lines changed

3 files changed

+189
-9
lines changed

tests/utils/query_builder_test.py

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
from unittest.mock import patch
2+
from utils.query_builder import CosmosDBQueryBuilder
3+
import pytest
4+
5+
6+
@pytest.mark.parametrize(
7+
"condition_list, expected_select_condition",
8+
[
9+
(None, ["*"]),
10+
([], ["*"]),
11+
(["*"], ["*"]),
12+
(["c.id"], ["c.id"]),
13+
(["c.id", "c.name"], ["c.id", "c.name"]),
14+
],
15+
)
16+
def test_add_select_conditions_should_update_select_list(
17+
condition_list, expected_select_condition
18+
):
19+
query_builder = CosmosDBQueryBuilder().add_select_conditions(
20+
condition_list
21+
)
22+
23+
assert len(query_builder.select_conditions) == len(
24+
expected_select_condition
25+
)
26+
assert query_builder.select_conditions == expected_select_condition
27+
28+
29+
@pytest.mark.parametrize(
30+
"attribute,ids_list,expected_where_condition_list",
31+
[
32+
("id", [], []),
33+
(None, None, []),
34+
("id", None, []),
35+
(None, ["id"], []),
36+
("id", ["id"], ["c.id IN ('id')"]),
37+
("id", ["id1", "id2"], ["c.id IN ('id1', 'id2')"]),
38+
],
39+
)
40+
def test_add_sql_in_condition_should_update_where_list(
41+
attribute,
42+
ids_list,
43+
expected_where_condition_list,
44+
):
45+
query_builder = CosmosDBQueryBuilder().add_sql_in_condition(
46+
attribute, ids_list
47+
)
48+
49+
assert len(query_builder.where_conditions) == len(
50+
expected_where_condition_list
51+
)
52+
assert query_builder.where_conditions == expected_where_condition_list
53+
54+
55+
@pytest.mark.parametrize(
56+
"data,expected_where_list,expected_params",
57+
[
58+
({}, [], []),
59+
({'id': 1}, ["c.id = @id"], [{'name': "@id", 'value': 1}]),
60+
(
61+
{'id': 1, 'name': 'test'},
62+
["c.id = @id", "c.name = @name"],
63+
[{'name': "@id", 'value': 1}, {'name': "@name", 'value': 'test'}],
64+
),
65+
],
66+
)
67+
def test_add_sql_where_equal_condition_should_update_where_params_list(
68+
data,
69+
expected_where_list,
70+
expected_params,
71+
):
72+
query_builder = CosmosDBQueryBuilder().add_sql_where_equal_condition(data)
73+
74+
assert len(query_builder.where_conditions) == len(data)
75+
assert query_builder.where_conditions == expected_where_list
76+
77+
assert len(query_builder.parameters) == len(expected_params)
78+
assert query_builder.parameters == expected_params
79+
80+
81+
def test_add_sql_where_equal_condition_with_None_should_not_update_lists():
82+
query_builder = CosmosDBQueryBuilder().add_sql_where_equal_condition(None)
83+
84+
assert len(query_builder.where_conditions) == 0
85+
assert query_builder.where_conditions == []
86+
assert len(query_builder.parameters) == 0
87+
assert query_builder.parameters == []
88+
89+
90+
@pytest.mark.parametrize(
91+
"visibility_bool,expected_where_list",
92+
[(True, ['NOT IS_DEFINED(c.deleted)']), (False, [])],
93+
)
94+
def test_add_sql_visibility_condition(
95+
visibility_bool,
96+
expected_where_list,
97+
):
98+
query_builder = CosmosDBQueryBuilder().add_sql_visibility_condition(
99+
visibility_bool
100+
)
101+
102+
assert len(query_builder.where_conditions) == len(expected_where_list)
103+
assert query_builder.where_conditions == expected_where_list
104+
105+
106+
@pytest.mark.parametrize(
107+
"limit_value,expected_limit",
108+
[
109+
(1, 1),
110+
(10, 10),
111+
(None, None),
112+
("hola", None),
113+
(["lista"], None),
114+
],
115+
)
116+
def test_add_sql_limit_condition(limit_value, expected_limit):
117+
query_builder = CosmosDBQueryBuilder().add_sql_limit_condition(limit_value)
118+
119+
assert query_builder.limit == expected_limit
120+
121+
122+
@pytest.mark.parametrize(
123+
"offset_value,expected_offset",
124+
[
125+
(1, 1),
126+
(10, 10),
127+
(None, None),
128+
("hola", None),
129+
(["lista"], None),
130+
],
131+
)
132+
def test_add_sql_offset_condition(
133+
offset_value,
134+
expected_offset,
135+
):
136+
query_builder = CosmosDBQueryBuilder().add_sql_offset_condition(
137+
offset_value
138+
)
139+
140+
assert query_builder.offset == expected_offset
141+
142+
143+
@pytest.mark.parametrize(
144+
"select_conditions,expected_condition",
145+
[
146+
([], "*"),
147+
(["c.id"], "c.id"),
148+
(["c.id", "c.name"], "c.id,c.name"),
149+
],
150+
)
151+
def test__build_select_return_fields_in_select_list(
152+
select_conditions,
153+
expected_condition,
154+
):
155+
query_builder = CosmosDBQueryBuilder().add_select_conditions(
156+
select_conditions
157+
)
158+
159+
result = query_builder._CosmosDBQueryBuilder__build_select()
160+
assert result == expected_condition
161+
162+
163+
@pytest.mark.parametrize(
164+
"where_dict,expected_condition",
165+
[
166+
({"id": 1}, "WHERE c.id = @id"),
167+
({"id": 1, "name": "test"}, "WHERE c.id = @id AND c.name = @name"),
168+
],
169+
)
170+
def test__build_where_should_return_concatenate_conditions(
171+
where_dict,
172+
expected_condition,
173+
):
174+
query_builder = CosmosDBQueryBuilder().add_sql_where_equal_condition(
175+
where_dict
176+
)
177+
178+
result = query_builder._CosmosDBQueryBuilder__build_where()
179+
180+
assert result == expected_condition

time_tracker_api/time_entries/time_entries_query_builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
class TimeEntryQueryBuilder(CosmosDBQueryBuilder):
55
def __init__(self):
6-
super().__init__()
6+
super(TimeEntryQueryBuilder, self).__init__()
77

88
def add_sql_date_range_condition(self, dates: tuple = None):
99
if dates and len(dates) == 2:

utils/query_builder.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,25 +50,25 @@ def add_sql_offset_condition(self, offset):
5050
self.offset = offset
5151
return self
5252

53-
def build_select(self):
53+
def __build_select(self):
5454
if len(self.select_conditions) < 1:
5555
self.select_conditions.append("*")
5656
return ",".join(self.select_conditions)
5757

58-
def build_where(self):
58+
def __build_where(self):
5959
if len(self.where_conditions) > 0:
6060
return "WHERE " + " AND ".join(self.where_conditions)
6161
else:
6262
return ""
6363

64-
def build_offset(self):
64+
def __build_offset(self):
6565
if self.offset:
6666
self.parameters.append({'name': '@offset', 'value': self.offset})
6767
return "OFFSET @offset"
6868
else:
6969
return ""
7070

71-
def build_limit(self):
71+
def __build_limit(self):
7272
if self.limit:
7373
self.parameters.append({'name': '@limit', 'value': self.limit})
7474
return "LIMIT @limit"
@@ -82,10 +82,10 @@ def build(self):
8282
{offset_condition}
8383
{limit_condition}
8484
""".format(
85-
select_conditions=self.build_select(),
86-
where_conditions=self.build_where(),
87-
offset_condition=self.build_offset(),
88-
limit_condition=self.build_limit(),
85+
select_conditions=self.__build_select(),
86+
where_conditions=self.__build_where(),
87+
offset_condition=self.__build_offset(),
88+
limit_condition=self.__build_limit(),
8989
)
9090
return self
9191

0 commit comments

Comments
 (0)