Skip to content
Prev Previous commit
Next Next commit
refactor: TT-353 Solving comments from PR
  • Loading branch information
Andrés Soto committed Sep 29, 2021
commit 8bdbdfe6f84508f140224b5256b0533229e7b1e4
52 changes: 28 additions & 24 deletions V2/source/daos/activities_json_dao.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,41 +10,45 @@ def __init__(self, json_data_file_path: str):
self.activity_keys = ActivityDto.__dataclass_fields__.keys()

def get_by_id(self, id: str) -> ActivityDto:
try:
file = open(self.json_data_file_path)
activities = json.load(file)
file.close()
activities = self.__get_activities_from_file()

except FileNotFoundError:
try:
activity = next(
(
activity
for activity in activities
if activity.get('id') == id
)
)
except:
return HTTPStatus.NOT_FOUND

activity = next(
(activity for activity in activities if activity.get('id') == id),
None,
)
activity = self.__create_activity_dto(activity)

if activity == None:
return HTTPStatus.NOT_FOUND
return activity

activity = {key: activity.get(key) for key in self.activity_keys}
activity_dto = ActivityDto(**activity)
def get_all(self) -> list:
activities = self.__get_activities_from_file()
list_activities = []

return activity_dto
for activity in activities:
activity = self.__create_activity_dto(activity)
list_activities.append(activity)

def get_all(self) -> list:
return list_activities

def __get_activities_from_file(self) -> list:
try:
file = open(self.json_data_file_path)
activities = json.load(file)
file.close()

except FileNotFoundError:
return HTTPStatus.NOT_FOUND

list_activities = []
return activities

for activity in activities:
activity = {key: activity.get(key) for key in self.activity_keys}
activity_dto = ActivityDto(**activity)
list_activities.append(activity_dto)
except FileNotFoundError:
return []

return list_activities
def __create_activity_dto(self, activity: dict) -> ActivityDto:
activity = {key: activity.get(key) for key in self.activity_keys}
activity_dto = ActivityDto(**activity)
return activity_dto
3 changes: 0 additions & 3 deletions V2/source/services/activity_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@


class ActivityService:

activities_dao: ActivitiesDaoInterface

def __init__(self, activities_dao: ActivitiesDaoInterface):
self.activities_dao = activities_dao

Expand Down
90 changes: 70 additions & 20 deletions V2/tests/daos/activities_json_dao_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@
import json


OPEN_FILE = 'builtins.open'


def test_get_by_id__return_activity_dto__when_find_activity_that_matches_its_id(
def test__get_by_id__returns_an_activity_dto__when_find_activity_that_matches_its_id(
mocker,
):
activities_json_dao = ActivitiesJsonDao('non-important-path')
Expand All @@ -21,12 +18,12 @@ def test_get_by_id__return_activity_dto__when_find_activity_that_matches_its_id(
"status": "test_status",
}
]
activity_dto = ActivityDto(**activities[0])

read_data = json.dumps(activities)
activity_dto = ActivityDto(**activities.pop())

mocker.patch(OPEN_FILE, mocker.mock_open(read_data=read_data))

activities_dao_mock = mocker.patch.object(
activities_json_dao, '_ActivitiesJsonDao__get_activities_from_file'
)
activities_dao_mock.return_value = activities
result = activities_json_dao.get_by_id(activity_dto.id)

assert result == activity_dto
Expand All @@ -37,10 +34,11 @@ def test__get_by_id__return_httpstatus_not_found__when_no_activity_matches_its_i
):
activities_json_dao = ActivitiesJsonDao('non-important-path')
activity = []
read_data = json.dumps(activity)

mocker.patch(OPEN_FILE, mocker.mock_open(read_data=read_data))

activities_dao_mock = mocker.patch.object(
activities_json_dao, '_ActivitiesJsonDao__get_activities_from_file'
)
activities_dao_mock.return_value = activity
result = activities_json_dao.get_by_id('non-important-id')

assert result == HTTPStatus.NOT_FOUND
Expand All @@ -58,16 +56,15 @@ def test_get_all__return_list_of_activity_dto__when_find_one_or_more_activities(
"deleted": "test_deleted",
"status": "test_status",
}

number_of_activities = 3
activity_dto = ActivityDto(**activity)
list_activities_dto = [activity_dto] * number_of_activities

activities = [activity] * number_of_activities
read_data = json.dumps(activities)

mocker.patch(OPEN_FILE, mocker.mock_open(read_data=read_data))

activities_dao_mock = mocker.patch.object(
activities_json_dao, '_ActivitiesJsonDao__get_activities_from_file'
)
activities_dao_mock.return_value = activities
result = activities_json_dao.get_all()

assert result == list_activities_dto
Expand All @@ -77,10 +74,63 @@ def test_get_all__return_empty_list__when_doesnt_found_any_activities(mocker):
activities_json_dao = ActivitiesJsonDao('non-important-path')
activities = []

read_data = json.dumps(activities)
activities_dao_mock = mocker.patch.object(
activities_json_dao, '_ActivitiesJsonDao__get_activities_from_file'
)
activities_dao_mock.return_value = activities
result = activities_json_dao.get_all()

mocker.patch(OPEN_FILE, mocker.mock_open(read_data=read_data))
assert result == activities

result = activities_json_dao.get_all()

def test__get_activities_from_file__returns_a_list_of_activities__when_find_activities_on_a_json_file(
mocker,
):
activities_json_dao = ActivitiesJsonDao('non-important-path')
activities = [
{
"name": "test_name",
"description": "test_description",
"tenant_id": "test_tenant_id",
"id": "test_id",
"deleted": "test_deleted",
"status": "test_status",
}
]
read_data = json.dumps(activities)

mocker.patch('builtins.open', mocker.mock_open(read_data=read_data))
result = activities_json_dao._ActivitiesJsonDao__get_activities_from_file()

assert result == activities


def test__get_activities_from_file__returns_an_empty_list__when_doesnt_find_any_file(
mocker,
):
activities_json_dao = ActivitiesJsonDao('non-important-path')

result = activities_json_dao._ActivitiesJsonDao__get_activities_from_file()

assert result == []


def test__create_activity_dto__returns_an_activity_dto__when_input_is_an_activity_dict(
mocker,
):
activities_json_dao = ActivitiesJsonDao('non-important-path')
activity = {
"name": "test_name",
"description": "test_description",
"tenant_id": "test_tenant_id",
"id": "test_id",
"deleted": "test_deleted",
"status": "test_status",
}
activity_dto = ActivityDto(**activity)

result = activities_json_dao._ActivitiesJsonDao__create_activity_dto(
activity
)

assert result == activity_dto
38 changes: 21 additions & 17 deletions V2/tests/services/activity_service_test.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
from V2.source.services.activity_service import ActivityService
from V2.source.daos.activities_json_dao import ActivitiesJsonDao
from V2.source.daos.activities_dao_interface import ActivitiesDaoInterface
from V2.source.dtos.activity import ActivityDto
from http import HTTPStatus


def test__get_by_id__return_activity_dto__when_find_activity_that_matches_its_id_on_activities_json_dao(
def test__get_by_id__return_activity_dto__when_find_activity_that_matches_its_id(
mocker,
):
activities_json_dao = ActivitiesJsonDao('non-important-path')
activity_service = ActivityService(activities_json_dao)
activity_service = ActivityService(ActivitiesDaoInterface)
activity = {
"name": "test_name",
"description": "test_description",
Expand All @@ -19,32 +18,34 @@ def test__get_by_id__return_activity_dto__when_find_activity_that_matches_its_id
}
activity_dto = ActivityDto(**activity)

activities_dao_mock = mocker.patch.object(ActivitiesJsonDao, 'get_by_id')
activities_dao_mock = mocker.patch.object(
ActivitiesDaoInterface, 'get_by_id'
)
activities_dao_mock.return_value = activity_dto
result = activity_service.get_by_id(activity.get('id'))

assert result == activity_dto


def test__get_by_id__return_httpstatus_not_found__when_no_activity_matches_its_id_on_activities_json_dao(
def test__get_by_id__return_httpstatus_not_found__when_no_activity_matches_its_id(
mocker,
):
activities_json_dao = ActivitiesJsonDao('non-important-path')
activity_service = ActivityService(activities_json_dao)
activity_service = ActivityService(ActivitiesDaoInterface)

activities_dao_mock = mocker.patch.object(ActivitiesJsonDao, 'get_by_id')
activities_dao_mock = mocker.patch.object(
ActivitiesDaoInterface, 'get_by_id'
)
activities_dao_mock.return_value = HTTPStatus.NOT_FOUND

result = activity_service.get_by_id('non-important-id')

assert result == HTTPStatus.NOT_FOUND


def test__get_all__return_list_of_activity_dto__when_find_one_or_more_activities_on_activities_json_dao(
def test__get_all__return_list_of_activity_dto__when_find_one_or_more_activities(
mocker,
):
activities_json_dao = ActivitiesJsonDao('non-important-path')
activity_service = ActivityService(activities_json_dao)
activity_service = ActivityService(ActivitiesDaoInterface)
activity = {
"name": "test_name",
"description": "test_description",
Expand All @@ -57,21 +58,24 @@ def test__get_all__return_list_of_activity_dto__when_find_one_or_more_activities
activity_dto = ActivityDto(**activity)
list_activities_dto = [activity_dto] * number_of_activities

activities_dao_mock = mocker.patch.object(ActivitiesJsonDao, 'get_all')
activities_dao_mock = mocker.patch.object(
ActivitiesDaoInterface, 'get_all'
)
activities_dao_mock.return_value = list_activities_dto
result = activity_service.get_all()

assert result == list_activities_dto


def test__get_all__return_empty_list__when_doesnt_found_any_activities_on_activities_json_dao(
def test__get_all__return_empty_list__when_doesnt_found_any_activities(
mocker,
):
activities_json_dao = ActivitiesJsonDao('non-important-path')
activity_service = ActivityService(activities_json_dao)
activity_service = ActivityService(ActivitiesDaoInterface)
activities = []

activities_dao_mock = mocker.patch.object(ActivitiesJsonDao, 'get_all')
activities_dao_mock = mocker.patch.object(
ActivitiesDaoInterface, 'get_all'
)
activities_dao_mock.return_value = activities
result = activity_service.get_all()

Expand Down