Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
refactor: TT-201 apply changes
  • Loading branch information
kellycastrof committed Apr 9, 2021
commit 7f599d4e5f8a48a8e0d3f17cc259206eaf6c8921
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,4 @@ def test_get_last_entry(
result = time_entry_repository.get_last_entry('id1', event_context)
find_partition_key_value_mock.assert_called_once()

assert len(result) == 1
time_entry = result.pop()
assert isinstance(time_entry, TimeEntryCosmosDBModel)
assert time_entry.__dict__ == expected_item
assert result == expected_item
37 changes: 29 additions & 8 deletions tests/utils/query_builder_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,21 +263,42 @@ def test_build_with_empty_and_None_attributes_return_query_select_all():
assert len(query_builder.where_conditions) == 0


def test_order_by_condition():
@pytest.mark.parametrize(
"attribute,order,expected_order_by",
[
('start_date', Order.DESC, ('start_date', 'DESC')),
('start_date', Order.ASC, ('start_date', 'ASC')),
],
)
def test_add_sql_order_by_condition(
attribute,
order,
expected_order_by,
):
query_builder = CosmosDBQueryBuilder().add_sql_order_by_condition(
'start_date', Order.DESC
attribute, order
)

assert len(query_builder.order_by) == 2
assert query_builder.order_by == ('start_date', 'DESC')
assert query_builder.order_by == expected_order_by


def test__build_orderBy():
@pytest.mark.parametrize(
"attribute,order,expected_order_by_condition",
[
('start_date', Order.DESC, "ORDER BY c.start_date DESC"),
('start_date', Order.ASC, "ORDER BY c.start_date ASC"),
],
)
def test__build_order_by(
attribute,
order,
expected_order_by_condition,
):
query_builder = CosmosDBQueryBuilder().add_sql_order_by_condition(
'start_date', Order.DESC
attribute, order
)

orderBy_condition = query_builder._CosmosDBQueryBuilder__build_order_By()
expected_order_string = "ORDER BY c.start_date DESC"
orderBy_condition = query_builder._CosmosDBQueryBuilder__build_order_by()

assert expected_order_string == orderBy_condition
assert orderBy_condition == expected_order_by_condition
9 changes: 5 additions & 4 deletions time_tracker_api/time_entries/time_entries_dao.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,13 +225,14 @@ def create(self, data: dict):

def update(self, id, data: dict, description=None):
event_ctx = self.create_event_context("update", description)

if data.get('update_last_entry_if_overlap'):
self.repository.update_last_entry(data, event_ctx)

time_entry = self.repository.find(id, event_ctx)
self.check_whether_current_user_owns_item(time_entry)

if data.get('update_last_entry_if_overlap'):
self.repository.update_last_entry(
data.get('owner_id'), data.get('start_date'), event_ctx
)

return self.repository.partial_update(
id,
data,
Expand Down
19 changes: 7 additions & 12 deletions time_tracker_api/time_entries/time_entries_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,25 +261,20 @@ def get_last_entry(
partition_key=partition_key_value,
)

function_mapper = self.get_mapper_or_dict(mapper)
return list(map(function_mapper, result))
return result.pop()

def update_last_entry(self, data: dict, event_context: EventContext):
owner_id = data.get('owner_id')
def update_last_entry(
self, owner_id, start_date, event_context: EventContext
):
last_entry = self.get_last_entry(owner_id, event_context)
last_entry = last_entry.pop()
start_date_tmp = start_date

end_date = str_to_datetime(last_entry.end_date)
start_date = data.get('start_date')
start_date = str_to_datetime(start_date)

if start_date < end_date:
update_date = {'end_date': data.get('start_date')}
return self.partial_update(
last_entry.id, update_date, event_context
)

return False
update_data = {'end_date': start_date_tmp}
self.partial_update(last_entry.id, update_data, event_context)

def on_create(self, new_item_data: dict, event_context: EventContext):
CosmosDBRepository.on_create(self, new_item_data, event_context)
Expand Down
6 changes: 3 additions & 3 deletions utils/query_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def __init__(self):
self.where_conditions = []
self.limit = None
self.offset = None
self.order_by = tuple()
self.order_by = None

def add_select_conditions(self, columns: List[str] = None):
columns = columns if columns else ["*"]
Expand Down Expand Up @@ -86,7 +86,7 @@ def __build_limit(self):
else:
return ""

def __build_order_By(self):
def __build_order_by(self):
if self.order_by:
attribute, order = self.order_by
return f"ORDER BY c.{attribute} {order}"
Expand All @@ -103,7 +103,7 @@ def build(self):
""".format(
select_conditions=self.__build_select(),
where_conditions=self.__build_where(),
order_by_condition=self.__build_order_By(),
order_by_condition=self.__build_order_by(),
offset_condition=self.__build_offset(),
limit_condition=self.__build_limit(),
)
Expand Down