Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
eb62162
refactor: TT-185 create SQLBuilder, TimeEntryQueryBuilder and find_al…
kellycastrof Mar 24, 2021
031b883
test: TT-185 query_builder tests
kellycastrof Mar 25, 2021
262ace0
test: TT-185 add test methods for TimeEntryQueryBuilder and new funct…
kellycastrof Mar 26, 2021
7914fdf
build: TT-199 build(deps): bump jinja2 in /requirements/time_tracker…
dependabot[bot] Mar 26, 2021
2b57549
refactor: TT-185 create SQLBuilder, TimeEntryQueryBuilder and find_al…
kellycastrof Mar 24, 2021
7606663
test: TT-185 query_builder tests
kellycastrof Mar 25, 2021
f1fc8a6
test: TT-185 add test methods for TimeEntryQueryBuilder and new funct…
kellycastrof Mar 26, 2021
be72ff8
refactor: TT-185 rename get_string_without_empty_spaces to remove_whi…
kellycastrof Mar 26, 2021
3401b39
refactor: TT-185 add time_entries_id in condition
kellycastrof Mar 26, 2021
2342ce9
refactor: TT-185 delete empty lines
kellycastrof Mar 26, 2021
5358c40
refactor: TT-185 delete isintance validation
kellycastrof Mar 26, 2021
a403edb
refactor: TT-185 improve function remove_white_spaces
Angeluz-07 Mar 26, 2021
d538899
refactor: TT-185 change column to columns
Angeluz-07 Mar 26, 2021
06cbca7
refactor: TT-185 add more scenarios to test_add_sql_in_condition_shou…
Angeluz-07 Mar 26, 2021
a1331fc
refactor: TT-185 add more scenarios to test__build_where_should_retur…
Angeluz-07 Mar 26, 2021
c44f20e
refactor: TT-185 improve test_TimeEntryQueryBuilder_is_subclass_Cosmo…
Angeluz-07 Mar 26, 2021
f17d841
refactor: TT-185 rename args in TimeEntriesRepository
Angeluz-07 Mar 26, 2021
be6e9b1
refactor: TT-185 change the scenarios in test_add_sql_date_range_cond…
kellycastrof Mar 26, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
test: TT-185 query_builder tests
  • Loading branch information
kellycastrof committed Mar 26, 2021
commit 760666337df468adbc76c663f0efc9ad477bfb46
180 changes: 180 additions & 0 deletions tests/utils/query_builder_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
from unittest.mock import patch
from utils.query_builder import CosmosDBQueryBuilder
import pytest


@pytest.mark.parametrize(
"condition_list, expected_select_condition",
[
(None, ["*"]),
([], ["*"]),
(["*"], ["*"]),
(["c.id"], ["c.id"]),
(["c.id", "c.name"], ["c.id", "c.name"]),
],
)
def test_add_select_conditions_should_update_select_list(
condition_list, expected_select_condition
):
query_builder = CosmosDBQueryBuilder().add_select_conditions(
condition_list
)

assert len(query_builder.select_conditions) == len(
expected_select_condition
)
assert query_builder.select_conditions == expected_select_condition


@pytest.mark.parametrize(
"attribute,ids_list,expected_where_condition_list",
[
("id", [], []),
(None, None, []),
("id", None, []),
(None, ["id"], []),
("id", ["id"], ["c.id IN ('id')"]),
("id", ["id1", "id2"], ["c.id IN ('id1', 'id2')"]),
],
)
def test_add_sql_in_condition_should_update_where_list(
attribute,
ids_list,
expected_where_condition_list,
):
query_builder = CosmosDBQueryBuilder().add_sql_in_condition(
attribute, ids_list
)

assert len(query_builder.where_conditions) == len(
expected_where_condition_list
)
assert query_builder.where_conditions == expected_where_condition_list


@pytest.mark.parametrize(
"data,expected_where_list,expected_params",
[
({}, [], []),
({'id': 1}, ["c.id = @id"], [{'name': "@id", 'value': 1}]),
(
{'id': 1, 'name': 'test'},
["c.id = @id", "c.name = @name"],
[{'name': "@id", 'value': 1}, {'name': "@name", 'value': 'test'}],
),
],
)
def test_add_sql_where_equal_condition_should_update_where_params_list(
data,
expected_where_list,
expected_params,
):
query_builder = CosmosDBQueryBuilder().add_sql_where_equal_condition(data)

assert len(query_builder.where_conditions) == len(data)
assert query_builder.where_conditions == expected_where_list

assert len(query_builder.parameters) == len(expected_params)
assert query_builder.parameters == expected_params


def test_add_sql_where_equal_condition_with_None_should_not_update_lists():
query_builder = CosmosDBQueryBuilder().add_sql_where_equal_condition(None)

assert len(query_builder.where_conditions) == 0
assert query_builder.where_conditions == []
assert len(query_builder.parameters) == 0
assert query_builder.parameters == []


@pytest.mark.parametrize(
"visibility_bool,expected_where_list",
[(True, ['NOT IS_DEFINED(c.deleted)']), (False, [])],
)
def test_add_sql_visibility_condition(
visibility_bool,
expected_where_list,
):
query_builder = CosmosDBQueryBuilder().add_sql_visibility_condition(
visibility_bool
)

assert len(query_builder.where_conditions) == len(expected_where_list)
assert query_builder.where_conditions == expected_where_list


@pytest.mark.parametrize(
"limit_value,expected_limit",
[
(1, 1),
(10, 10),
(None, None),
("hola", None),
(["lista"], None),
],
)
def test_add_sql_limit_condition(limit_value, expected_limit):
query_builder = CosmosDBQueryBuilder().add_sql_limit_condition(limit_value)

assert query_builder.limit == expected_limit


@pytest.mark.parametrize(
"offset_value,expected_offset",
[
(1, 1),
(10, 10),
(None, None),
("hola", None),
(["lista"], None),
],
)
def test_add_sql_offset_condition(
offset_value,
expected_offset,
):
query_builder = CosmosDBQueryBuilder().add_sql_offset_condition(
offset_value
)

assert query_builder.offset == expected_offset


@pytest.mark.parametrize(
"select_conditions,expected_condition",
[
([], "*"),
(["c.id"], "c.id"),
(["c.id", "c.name"], "c.id,c.name"),
],
)
def test__build_select_return_fields_in_select_list(
select_conditions,
expected_condition,
):
query_builder = CosmosDBQueryBuilder().add_select_conditions(
select_conditions
)

result = query_builder._CosmosDBQueryBuilder__build_select()
assert result == expected_condition


@pytest.mark.parametrize(
"where_dict,expected_condition",
[
({"id": 1}, "WHERE c.id = @id"),
({"id": 1, "name": "test"}, "WHERE c.id = @id AND c.name = @name"),
],
)
def test__build_where_should_return_concatenate_conditions(
where_dict,
expected_condition,
):
query_builder = CosmosDBQueryBuilder().add_sql_where_equal_condition(
where_dict
)

result = query_builder._CosmosDBQueryBuilder__build_where()

assert result == expected_condition
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

class TimeEntryQueryBuilder(CosmosDBQueryBuilder):
def __init__(self):
super().__init__()
super(TimeEntryQueryBuilder, self).__init__()

def add_sql_date_range_condition(self, dates: tuple = None):
if dates and len(dates) == 2:
Expand Down
16 changes: 8 additions & 8 deletions utils/query_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,25 +50,25 @@ def add_sql_offset_condition(self, offset):
self.offset = offset
return self

def build_select(self):
def __build_select(self):
if len(self.select_conditions) < 1:
self.select_conditions.append("*")
return ",".join(self.select_conditions)

def build_where(self):
def __build_where(self):
if len(self.where_conditions) > 0:
return "WHERE " + " AND ".join(self.where_conditions)
else:
return ""

def build_offset(self):
def __build_offset(self):
if self.offset:
self.parameters.append({'name': '@offset', 'value': self.offset})
return "OFFSET @offset"
else:
return ""

def build_limit(self):
def __build_limit(self):
if self.limit:
self.parameters.append({'name': '@limit', 'value': self.limit})
return "LIMIT @limit"
Expand All @@ -82,10 +82,10 @@ def build(self):
{offset_condition}
{limit_condition}
""".format(
select_conditions=self.build_select(),
where_conditions=self.build_where(),
offset_condition=self.build_offset(),
limit_condition=self.build_limit(),
select_conditions=self.__build_select(),
where_conditions=self.__build_where(),
offset_condition=self.__build_offset(),
limit_condition=self.__build_limit(),
)
return self

Expand Down