Skip to content

Commit c1b290d

Browse files
committed
fix: #91 adding filter by attributes
1 parent 7f64c83 commit c1b290d

File tree

9 files changed

+71
-6
lines changed

9 files changed

+71
-6
lines changed

commons/data_access_layer/cosmos_db.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,8 @@ class CosmosDBDao(CRUDDao):
216216
def __init__(self, repository: CosmosDBRepository):
217217
self.repository = repository
218218

219-
def get_all(self) -> list:
220-
return self.repository.find_all(partition_key_value=self.partition_key_value)
219+
def get_all(self, conditions: []) -> list:
220+
return self.repository.find_all(partition_key_value=self.partition_key_value, conditions= conditions)
221221

222222
def get(self, id):
223223
return self.repository.find(id, partition_key_value=self.partition_key_value)

tests/time_tracker_api/activities/activities_namespace_test.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from flask.testing import FlaskClient
44
from flask_restplus._http import HTTPStatus
55
from pytest_mock import MockFixture
6+
from werkzeug.datastructures import ImmutableMultiDict
67

78
from time_tracker_api.security import current_user_tenant_id
89

@@ -57,6 +58,21 @@ def test_list_all_activities(client: FlaskClient, mocker: MockFixture):
5758
repository_find_all_mock.assert_called_once()
5859

5960

61+
def test_list_all_activities_with_conditions(client: FlaskClient, mocker: MockFixture):
62+
from time_tracker_api.activities.activities_namespace import activity_dao
63+
repository_find_all_mock = mocker.patch.object(activity_dao.repository,
64+
'find_all',
65+
return_value=[])
66+
67+
response = client.get("/activities?a=b", follow_redirects=True)
68+
69+
assert HTTPStatus.OK == response.status_code
70+
json_data = json.loads(response.data)
71+
assert [] == json_data
72+
repository_find_all_mock.assert_called_once_with(conditions=ImmutableMultiDict({'a': 'b'}),
73+
partition_key_value='ioet')
74+
75+
6076
def test_get_activity_should_succeed_with_valid_id(client: FlaskClient, mocker: MockFixture):
6177
from time_tracker_api.activities.activities_namespace import activity_dao
6278

tests/time_tracker_api/customers/customers_namespace_test.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from flask.testing import FlaskClient
44
from flask_restplus._http import HTTPStatus
55
from pytest_mock import MockFixture
6+
from werkzeug.datastructures import ImmutableMultiDict
67

78
from time_tracker_api.security import current_user_tenant_id
89

@@ -56,6 +57,20 @@ def test_list_all_customers(client: FlaskClient, mocker: MockFixture):
5657
assert [] == json_data
5758
repository_find_all_mock.assert_called_once()
5859

60+
def test_list_all_customers_with_conditions(client: FlaskClient, mocker: MockFixture):
61+
from time_tracker_api.customers.customers_namespace import customer_dao
62+
repository_find_all_mock = mocker.patch.object(customer_dao.repository,
63+
'find_all',
64+
return_value=[])
65+
66+
response = client.get("/customers?a=b", follow_redirects=True)
67+
68+
assert HTTPStatus.OK == response.status_code
69+
json_data = json.loads(response.data)
70+
assert [] == json_data
71+
repository_find_all_mock.assert_called_once_with(conditions=ImmutableMultiDict({'a': 'b'}),
72+
partition_key_value='ioet')
73+
5974

6075
def test_get_customer_should_succeed_with_valid_id(client: FlaskClient, mocker: MockFixture):
6176
from time_tracker_api.customers.customers_namespace import customer_dao

tests/time_tracker_api/project_types/project_types_namespace_test.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from flask.testing import FlaskClient
44
from flask_restplus._http import HTTPStatus
55
from pytest_mock import MockFixture
6+
from werkzeug.datastructures import ImmutableMultiDict
67

78
from time_tracker_api.security import current_user_tenant_id
89

@@ -62,6 +63,20 @@ def test_list_all_project_types(client: FlaskClient, mocker: MockFixture):
6263
repository_find_all_mock.assert_called_once()
6364

6465

66+
def test_list_all_project_types_with_conditions(client: FlaskClient, mocker: MockFixture):
67+
from time_tracker_api.project_types.project_types_namespace import project_type_dao
68+
repository_find_all_mock = mocker.patch.object(project_type_dao.repository,
69+
'find_all',
70+
return_value=[])
71+
72+
response = client.get("/project-types?a=b", follow_redirects=True)
73+
74+
assert HTTPStatus.OK == response.status_code
75+
assert [] == json.loads(response.data)
76+
repository_find_all_mock.assert_called_once_with(conditions=ImmutableMultiDict({'a': 'b'}),
77+
partition_key_value='ioet')
78+
79+
6580
def test_get_project_should_succeed_with_valid_id(client: FlaskClient, mocker: MockFixture):
6681
from time_tracker_api.project_types.project_types_namespace import project_type_dao
6782
valid_id = fake.random_int(1, 9999)

tests/time_tracker_api/projects/projects_namespace_test.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from flask.testing import FlaskClient
44
from flask_restplus._http import HTTPStatus
55
from pytest_mock import MockFixture
6+
from werkzeug.datastructures import ImmutableMultiDict
67

78
from time_tracker_api.security import current_user_tenant_id
89

@@ -61,6 +62,20 @@ def test_list_all_projects(client: FlaskClient, mocker: MockFixture):
6162
repository_find_all_mock.assert_called_once()
6263

6364

65+
def test_list_all_projects_with_conditions(client: FlaskClient, mocker: MockFixture):
66+
from time_tracker_api.projects.projects_namespace import project_dao
67+
repository_find_all_mock = mocker.patch.object(project_dao.repository,
68+
'find_all',
69+
return_value=[])
70+
71+
response = client.get("/projects?a=b", follow_redirects=True)
72+
73+
assert HTTPStatus.OK == response.status_code
74+
assert [] == json.loads(response.data)
75+
repository_find_all_mock.assert_called_once_with(conditions=ImmutableMultiDict({'a': 'b'}),
76+
partition_key_value='ioet')
77+
78+
6479
def test_get_project_should_succeed_with_valid_id(client: FlaskClient, mocker: MockFixture):
6580
from time_tracker_api.projects.projects_namespace import project_dao
6681
valid_id = fake.random_int(1, 9999)

time_tracker_api/activities/activities_namespace.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from faker import Faker
22
from flask_restplus import fields, Resource, Namespace
33
from flask_restplus._http import HTTPStatus
4+
from flask import request
45

56
from time_tracker_api.activities.activities_model import create_dao
67
from time_tracker_api.api import common_fields
@@ -44,7 +45,7 @@ class Activities(Resource):
4445
@ns.marshal_list_with(activity)
4546
def get(self):
4647
"""List all activities"""
47-
return activity_dao.get_all()
48+
return activity_dao.get_all(conditions=request.args)
4849

4950
@ns.doc('create_activity')
5051
@ns.response(HTTPStatus.CONFLICT, 'This activity already exists')

time_tracker_api/customers/customers_namespace.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from faker import Faker
22
from flask_restplus import Namespace, Resource, fields
33
from flask_restplus._http import HTTPStatus
4+
from flask import request
45

56
from time_tracker_api.api import common_fields
67
from time_tracker_api.customers.customers_model import create_dao
@@ -45,7 +46,7 @@ class Customers(Resource):
4546
@ns.marshal_list_with(customer)
4647
def get(self):
4748
"""List all customers"""
48-
return customer_dao.get_all()
49+
return customer_dao.get_all(conditions=request.args)
4950

5051
@ns.doc('create_customer')
5152
@ns.response(HTTPStatus.CONFLICT, 'This customer already exists')

time_tracker_api/project_types/project_types_namespace.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from faker import Faker
22
from flask_restplus import Namespace, Resource, fields
33
from flask_restplus._http import HTTPStatus
4+
from flask import request
45

56
from time_tracker_api.api import common_fields, UUID_REGEX
67
from time_tracker_api.project_types.project_types_model import create_dao
@@ -60,7 +61,7 @@ class ProjectTypes(Resource):
6061
@ns.marshal_list_with(project_type)
6162
def get(self):
6263
"""List all project types"""
63-
return project_type_dao.get_all()
64+
return project_type_dao.get_all(conditions=request.args)
6465

6566
@ns.doc('create_project_type')
6667
@ns.response(HTTPStatus.CONFLICT, 'This project type already exists')

time_tracker_api/projects/projects_namespace.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from faker import Faker
22
from flask_restplus import Namespace, Resource, fields
33
from flask_restplus._http import HTTPStatus
4+
from flask import request
45

56
from time_tracker_api.api import common_fields, UUID_REGEX
67
from time_tracker_api.projects.projects_model import create_dao
@@ -61,7 +62,7 @@ class Projects(Resource):
6162
@ns.marshal_list_with(project)
6263
def get(self):
6364
"""List all projects"""
64-
return project_dao.get_all()
65+
return project_dao.get_all(conditions=request.args)
6566

6667
@ns.doc('create_project')
6768
@ns.response(HTTPStatus.CONFLICT, 'This project already exists')

0 commit comments

Comments
 (0)