Skip to content
Closed
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-180 move convert_list_to_tuple_string and validate_list …
…to utils
  • Loading branch information
kellycastrof committed Mar 17, 2021
commit c94b511ba5720753b273fd87fb6bb2bafb4e8851
39 changes: 3 additions & 36 deletions tests/time_tracker_api/activities/activities_model_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,41 +8,6 @@
)


@pytest.mark.parametrize(
"id_list", [123, (1, 2), "id_list", {"id_list": []},],
)
def test_validate_list(
id_list, activity_repository: ActivityCosmosDBRepository
):
try:
activity_repository.validate_list(id_list)
except Exception as e:
assert type(e) is AssertionError


@patch(
'time_tracker_api.activities.activities_model.ActivityCosmosDBRepository.validate_list'
)
@pytest.mark.parametrize(
"id_list,expected_result",
[
(["id1"], "('id1')"),
(["id1", "id2"], "('id1', 'id2')"),
(["id1", "id2", "id3", "id4"], "('id1', 'id2', 'id3', 'id4')"),
],
)
def test_convert_list_to_tuple_string(
validate_list_mock,
activity_repository: ActivityCosmosDBRepository,
id_list,
expected_result,
):
result = activity_repository.convert_list_to_tuple_string(id_list)

validate_list_mock.assert_called_once()
assert expected_result == result


@pytest.mark.parametrize(
"id_list,expected_result",
[
Expand All @@ -52,7 +17,9 @@ def test_convert_list_to_tuple_string(
],
)
def test_create_sql_in_condition(
activity_repository: ActivityCosmosDBRepository, id_list, expected_result,
activity_repository: ActivityCosmosDBRepository,
id_list,
expected_result,
):
result = activity_repository.create_sql_in_condition(id_list)
assert expected_result == result
Expand Down
39 changes: 39 additions & 0 deletions tests/utils/repository_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from unittest.mock import patch
from utils.repository import convert_list_to_tuple_string, validate_list
import pytest


@pytest.mark.parametrize(
"id_list",
[
123,
(1, 2),
"id_list",
{"id_list": []},
],
)
def test_validate_list(id_list):
try:
validate_list(id_list)
except Exception as e:
assert type(e) is AssertionError


@patch('utils.repository.validate_list')
@pytest.mark.parametrize(
"id_list,expected_result",
[
(["id1"], "('id1')"),
(["id1", "id2"], "('id1', 'id2')"),
(["id1", "id2", "id3", "id4"], "('id1', 'id2', 'id3', 'id4')"),
],
)
def test_convert_list_to_tuple_string(
validate_list_mock,
id_list,
expected_result,
):
result = convert_list_to_tuple_string(id_list)

validate_list_mock.assert_called_once()
assert expected_result == result
29 changes: 13 additions & 16 deletions time_tracker_api/activities/activities_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from time_tracker_api.database import CRUDDao, APICosmosDBDao
from typing import List, Callable
from commons.data_access_layer.database import EventContext
from utils.repository import convert_list_to_tuple_string


class ActivityDao(CRUDDao):
Expand All @@ -19,7 +20,11 @@ class ActivityDao(CRUDDao):
container_definition = {
'id': 'activity',
'partition_key': PartitionKey(path='/tenant_id'),
'unique_key_policy': {'uniqueKeys': [{'paths': ['/name', '/deleted']},]},
'unique_key_policy': {
'uniqueKeys': [
{'paths': ['/name', '/deleted']},
]
},
}


Expand Down Expand Up @@ -51,21 +56,10 @@ def __init__(self):
)

def create_sql_in_condition(self, id_list):
id_values = self.convert_list_to_tuple_string(id_list)
id_values = convert_list_to_tuple_string(id_list)

return "c.id IN {value_condition}".format(value_condition=id_values)

def convert_list_to_tuple_string(self, id_list):
self.validate_list(id_list)
id_value = (
f"('{id_list[0]}')" if len(id_list) == 1 else str(tuple(id_list))
)
return id_value

def validate_list(self, id_list):
assert isinstance(id_list, list)
assert len(id_list) > 0

def find_all_with_id_in_list(
self,
event_context: EventContext,
Expand All @@ -85,7 +79,8 @@ def find_all_with_id_in_list(

tenant_id_value = self.find_partition_key_value(event_context)
result = self.container.query_items(
query=query_str, partition_key=tenant_id_value,
query=query_str,
partition_key=tenant_id_value,
)

function_mapper = self.get_mapper_or_dict(mapper)
Expand All @@ -97,11 +92,13 @@ def __init__(self, repository):
CosmosDBDao.__init__(self, repository)

def get_all_with_id_in_list(
self, id_list,
self,
id_list,
):
event_ctx = self.create_event_context("read-many")
activities_list = self.repository.find_all_with_id_in_list(
event_ctx, id_list,
event_ctx,
id_list,
)
return activities_list

Expand Down
11 changes: 11 additions & 0 deletions utils/repository.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
def convert_list_to_tuple_string(id_list):
validate_list(id_list)
id_value = (
f"('{id_list[0]}')" if len(id_list) == 1 else str(tuple(id_list))
)
return id_value


def validate_list(id_list):
assert isinstance(id_list, list)
assert len(id_list) > 0