diff --git a/tests/time_tracker_api/activities/activities_model_test.py b/tests/time_tracker_api/activities/activities_model_test.py index 97080281..72ee0b04 100644 --- a/tests/time_tracker_api/activities/activities_model_test.py +++ b/tests/time_tracker_api/activities/activities_model_test.py @@ -8,35 +8,14 @@ ) -@pytest.mark.parametrize( - "activities_ids_list,expected_result", - [ - (["id1"], "c.id IN ('id1')"), - (["id1", "id2"], "c.id IN ('id1', 'id2')"), - (["id1", "id2", "id3", "id4"], "c.id IN ('id1', 'id2', 'id3', 'id4')"), - ], -) -def test_create_sql_in_condition( - activity_repository: ActivityCosmosDBRepository, - activities_ids_list, - expected_result, -): - result = activity_repository.create_sql_in_condition(activities_ids_list) - assert expected_result == result - - @patch( 'time_tracker_api.activities.activities_model.ActivityCosmosDBRepository.create_sql_condition_for_visibility' ) -@patch( - 'time_tracker_api.activities.activities_model.ActivityCosmosDBRepository.create_sql_in_condition' -) @patch( 'time_tracker_api.activities.activities_model.ActivityCosmosDBRepository.find_partition_key_value' ) def test_find_all_with_id_in_list( find_partition_key_value_mock, - create_sql_in_condition_mock, create_sql_condition_for_visibility_mock, event_context: EventContext, activity_repository: ActivityCosmosDBRepository, @@ -52,10 +31,9 @@ def test_find_all_with_id_in_list( activity_repository.container = Mock() activity_repository.container.query_items = query_items_mock - result = activity_repository.find_all_with_id_in_list(event_context, []) + result = activity_repository.find_all_with_id_in_list(event_context, [expected_item]) create_sql_condition_for_visibility_mock.assert_called_once() - create_sql_in_condition_mock.assert_called_once() find_partition_key_value_mock.assert_called_once() query_items_mock.assert_called_once() diff --git a/tests/time_tracker_api/projects/projects_model_test.py b/tests/time_tracker_api/projects/projects_model_test.py index fcca790d..f321ffcc 100644 --- a/tests/time_tracker_api/projects/projects_model_test.py +++ b/tests/time_tracker_api/projects/projects_model_test.py @@ -8,35 +8,14 @@ ) -@pytest.mark.parametrize( - "customer_ids_list,expected_result", - [ - (["id1"], "c.customer_id IN ('id1')"), - (["id1", "id2"], "c.customer_id IN ('id1', 'id2')"), - (["id1", "id2", "id3", "id4"], "c.customer_id IN ('id1', 'id2', 'id3', 'id4')"), - ], -) -def test_create_sql_in_condition( - project_repository: ProjectCosmosDBRepository, - customer_ids_list, - expected_result, -): - result = project_repository.create_sql_customer_id_in_condition(customer_ids_list) - assert expected_result == result - - @patch( 'time_tracker_api.projects.projects_model.ProjectCosmosDBRepository.create_sql_condition_for_visibility' ) -@patch( - 'time_tracker_api.projects.projects_model.ProjectCosmosDBRepository.create_sql_customer_id_in_condition' -) @patch( 'time_tracker_api.projects.projects_model.ProjectCosmosDBRepository.find_partition_key_value' ) def test_find_all_with_customer_id_in_list( find_partition_key_value_mock, - create_sql_customer_id_in_condition_mock, create_sql_condition_for_visibility_mock, event_context: EventContext, project_repository: ProjectCosmosDBRepository, @@ -53,10 +32,9 @@ def test_find_all_with_customer_id_in_list( project_repository.container = Mock() project_repository.container.query_items = query_items_mock - result = project_repository.find_all_with_customer_id_in_list(event_context, []) + result = project_repository.find_all_with_customer_id_in_list(event_context, [expected_item]) create_sql_condition_for_visibility_mock.assert_called_once() - create_sql_customer_id_in_condition_mock.assert_called_once() find_partition_key_value_mock.assert_called_once() query_items_mock.assert_called_once() diff --git a/tests/utils/repository_test.py b/tests/utils/repository_test.py index 16b0b440..58959fc8 100644 --- a/tests/utils/repository_test.py +++ b/tests/utils/repository_test.py @@ -1,5 +1,5 @@ from unittest.mock import patch -from utils.repository import convert_list_to_tuple_string +from utils.repository import convert_list_to_tuple_string, create_sql_in_condition import pytest @@ -34,3 +34,23 @@ def test_convert_list_to_tuple_string_should_success( result = convert_list_to_tuple_string(ids_list) assert expected_result == result + + +@pytest.mark.parametrize( + "field,values,expected_result", + [ + ("customer_id", ["id1"], "c.customer_id IN ('id1')"), + ("customer_id", ["id1", "id2"], "c.customer_id IN ('id1', 'id2')"), + ("customer_id", ["id1", "id2", "id3", "id4"], "c.customer_id IN ('id1', 'id2', 'id3', 'id4')"), + ("id", ["id1"], "c.id IN ('id1')"), + ("id", ["id1", "id4"], "c.id IN ('id1', 'id4')"), + ("id", ["id1", "id2", "id3", "id4"], "c.id IN ('id1', 'id2', 'id3', 'id4')"), + ], +) +def test_create_sql_in_condition( + field, + values, + expected_result, +): + result = create_sql_in_condition(field, values) + assert expected_result == result \ No newline at end of file diff --git a/time_tracker_api/activities/activities_model.py b/time_tracker_api/activities/activities_model.py index dfb834e8..0154aebc 100644 --- a/time_tracker_api/activities/activities_model.py +++ b/time_tracker_api/activities/activities_model.py @@ -10,7 +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 +from utils.repository import convert_list_to_tuple_string, create_sql_in_condition class ActivityDao(CRUDDao): @@ -55,25 +55,20 @@ def __init__(self): mapper=ActivityCosmosDBModel, ) - def create_sql_in_condition(self, activity_ids): - id_values = convert_list_to_tuple_string(activity_ids) - - return "c.id IN {value_condition}".format(value_condition=id_values) - def find_all_with_id_in_list( self, event_context: EventContext, activity_ids: List[str], visible_only=True, mapper: Callable = None, - ): + ): visibility = self.create_sql_condition_for_visibility(visible_only) query_str = """ SELECT * FROM c WHERE {condition} {visibility_condition} """.format( - condition=self.create_sql_in_condition(activity_ids), + condition=create_sql_in_condition("id", activity_ids), visibility_condition=visibility, ) diff --git a/time_tracker_api/projects/projects_model.py b/time_tracker_api/projects/projects_model.py index 53e4a5e3..617df941 100644 --- a/time_tracker_api/projects/projects_model.py +++ b/time_tracker_api/projects/projects_model.py @@ -8,7 +8,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 +from utils.repository import convert_list_to_tuple_string, create_sql_in_condition from time_tracker_api.customers.customers_model import ( create_dao as customers_create_dao, ) @@ -65,18 +65,13 @@ def __init__(self): partition_key_attribute='tenant_id', mapper=ProjectCosmosDBModel, ) - - def create_sql_customer_id_in_condition(self, customer_ids_list): - id_values = convert_list_to_tuple_string(customer_ids_list) - - return "c.customer_id IN {value_condition}".format(value_condition=id_values) - + def find_all_with_customer_id_in_list( self, event_context: EventContext, customer_ids_list: List[str], visible_only=True, - mapper: Callable = None, + mapper: Callable = None, ): visibility = self.create_sql_condition_for_visibility(visible_only) query_str = """ @@ -84,7 +79,7 @@ def find_all_with_customer_id_in_list( WHERE {condition} {visibility_condition} """.format( - condition=self.create_sql_customer_id_in_condition(customer_ids_list), + condition=create_sql_in_condition("customer_id", customer_ids_list), visibility_condition=visibility, ) diff --git a/utils/repository.py b/utils/repository.py index 4c0ed5fd..0a10abed 100644 --- a/utils/repository.py +++ b/utils/repository.py @@ -7,3 +7,8 @@ def convert_list_to_tuple_string(ids_list): else str(tuple(ids_list)) ) return result + +def create_sql_in_condition(field, values): + tuple_string = convert_list_to_tuple_string(values) + + return "c.{field} IN {list}".format(field=field, list=tuple_string) \ No newline at end of file