Skip to content

Commit c9ba41e

Browse files
committed
feat: TT-243 Add function and testing to time entries query builder
1 parent db7a973 commit c9ba41e

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

tests/time_tracker_api/time_entries/time_entries_query_builder_test.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,47 @@ def test_build_with_add_sql_date_range_condition():
5555
assert remove_white_spaces(query) == remove_white_spaces(expected_query)
5656
assert len(time_entry_query_builder.where_conditions) == 1
5757
assert len(time_entry_query_builder.get_parameters()) == 2
58+
59+
60+
def test_add_sql_interception_with_date_range_condition():
61+
start_date = "2021-03-19T05:07:00.000Z"
62+
end_date = "2021-03-25T10:00:00.000Z"
63+
64+
time_entry_query_builder = (
65+
TimeEntryQueryBuilder().add_sql_interception_with_date_range_condition(
66+
start_date, end_date
67+
)
68+
)
69+
70+
expected_params = [
71+
{"name": "@start_date", "value": start_date},
72+
{"name": "@end_date", "value": end_date},
73+
]
74+
75+
assert len(time_entry_query_builder.where_conditions) == 1
76+
assert len(time_entry_query_builder.parameters) == len(expected_params)
77+
assert time_entry_query_builder.parameters == expected_params
78+
79+
80+
def test_build_with_add_sql_interception_with_date_range_condition():
81+
start_date = "2021-03-19T05:07:00.000Z"
82+
end_date = "2021-03-25T10:00:00.000Z"
83+
time_entry_query_builder = (
84+
TimeEntryQueryBuilder()
85+
.add_sql_interception_with_date_range_condition(start_date, end_date)
86+
.build()
87+
)
88+
89+
expected_query = """
90+
SELECT * FROM c
91+
WHERE (((c.start_date BETWEEN @start_date AND @end_date)
92+
OR (c.end_date BETWEEN @start_date AND @end_date))
93+
OR ((@start_date BETWEEN c.start_date AND c.end_date)
94+
OR (@end_date BETWEEN c.start_date AND c.end_date)))
95+
"""
96+
97+
builder_query = time_entry_query_builder.get_query()
98+
99+
assert remove_white_spaces(builder_query) == remove_white_spaces(
100+
expected_query
101+
)

time_tracker_api/time_entries/time_entries_query_builder.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,21 @@ def add_sql_date_range_condition(self, date_range: tuple = None):
2121
]
2222
)
2323
return self
24+
25+
def add_sql_interception_with_date_range_condition(
26+
self, start_date, end_date
27+
):
28+
condition = """
29+
(((c.start_date BETWEEN @start_date AND @end_date)
30+
OR (c.end_date BETWEEN @start_date AND @end_date))
31+
OR ((@start_date BETWEEN c.start_date AND c.end_date)
32+
OR (@end_date BETWEEN c.start_date AND c.end_date)))
33+
"""
34+
self.where_conditions.append(condition)
35+
self.parameters.extend(
36+
[
37+
{'name': '@start_date', 'value': start_date},
38+
{'name': '@end_date', 'value': end_date},
39+
]
40+
)
41+
return self

0 commit comments

Comments
 (0)