Skip to content

Commit b0cc467

Browse files
committed
refactor: TT-352 improving use_cases, endpoitns and test to get activitivies from JSON file
1 parent 9e090bc commit b0cc467

File tree

8 files changed

+34
-43
lines changed

8 files changed

+34
-43
lines changed

V2/source/daos/activities_json_dao.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import json
55
import typing
66

7+
78
class ActivitiesJsonDao(ActivitiesDao):
89
def __init__(self, json_data_file_path: str):
910
self.json_data_file_path = json_data_file_path

V2/source/entry_points/flask_api/__init__.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from . import activities_endpoints
66

77
csrf = CSRFProtect()
8+
9+
810
def create_app(test_config=None):
911
app = Flask(__name__)
1012
csrf.init_app(app)
@@ -19,11 +21,10 @@ def create_app(test_config=None):
1921
if test_config is not None:
2022
app.config.from_mapping(test_config)
2123

22-
ns_activities = Namespace('activities', description='Endpoint for activities')
23-
ns_activities.route('/')(activities_endpoints.Activities)
24-
ns_activities.route('/<string:activity_id>')(activities_endpoints.Activity)
25-
26-
api.add_namespace(ns_activities)
24+
activities_namespace = Namespace('activities', description='Endpoint for activities')
25+
activities_namespace.route('/')(activities_endpoints.Activities)
26+
activities_namespace.route('/<string:activity_id>')(activities_endpoints.Activity)
2727

28+
api.add_namespace(activities_namespace)
2829

2930
return app

V2/source/entry_points/flask_api/activities_endpoints.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,12 @@
55

66
class Activities(Resource):
77
def get(self):
8-
activities_dto = use_cases.get_list_activities()
9-
activities = [activity_dto.__dict__ for activity_dto in activities_dto]
10-
return activities
8+
return [activity.__dict__ for activity in use_cases.get_list_activities()]
119

1210

1311
class Activity(Resource):
1412
def get(self, activity_id: str):
1513
try:
16-
activities_dto = use_cases.get_activity_by_id(activity_id)
17-
activity = activities_dto.__dict__
18-
return activity
14+
return use_cases.get_activity_by_id(activity_id).__dict__
1915
except AttributeError:
2016
return {'message': 'Activity not found'}, HTTPStatus.NOT_FOUND

V2/source/use_cases/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
from ._get_activities_use_case import get_list_activities
2-
from ._get_activity_by_id_use_case import get_activity_by_id
2+
from ._get_activity_by_id_use_case import get_activity_by_id

V2/source/use_cases/_get_activities_use_case.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
from V2.source.dtos.activity import Activity
44
import typing
55

6+
67
def get_list_activities() -> typing.List[Activity]:
7-
activity_json_dao = ActivitiesJsonDao('./V2/source/activities_data.json')
8-
activity_service = ActivityService(activity_json_dao)
9-
activities_dto = activity_service.get_all()
8+
activity_json = ActivitiesJsonDao('./V2/source/activities_data.json')
9+
activities = ActivityService(activity_json)
1010

11-
return activities_dto
11+
return activities.get_all()

V2/source/use_cases/_get_activity_by_id_use_case.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
from V2.source.daos.activities_json_dao import ActivitiesJsonDao
33
from V2.source.dtos.activity import Activity
44

5+
56
def get_activity_by_id(id: str) -> Activity:
6-
activity_json_dao = ActivitiesJsonDao('./V2/source/activities_data.json')
7-
activity_service = ActivityService(activity_json_dao)
8-
activity_dto = activity_service.get_by_id(id)
7+
activity_json = ActivitiesJsonDao('./V2/source/activities_data.json')
8+
activity = ActivityService(activity_json)
99

10-
return activity_dto
10+
return activity.get_by_id(id)

V2/tests/entry_points/flask_api/activities_endpoints_test.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,31 @@ def client():
3131
yield client
3232

3333

34-
def test_get_all_activities_endpoint(client: FlaskClient, mocker: MockFixture):
34+
def test__activities_class__uses_the_get_activities_use_case__to_retrieve_activities(client: FlaskClient,
35+
mocker: MockFixture):
3536
use_cases.get_list_activities = mocker.Mock(return_value=[])
36-
response = client.get("/activities/")
37-
assert response.status_code == HTTPStatus.OK
3837

38+
response = client.get("/activities/")
3939
json_data = json.loads(response.data)
40+
41+
assert response.status_code == HTTPStatus.OK
4042
assert [] == json_data
4143

4244

43-
def test_get_activity_by_id_using_a_valid_id(client: FlaskClient, mocker: MockFixture):
45+
def test__activity_class__returns_an_activity__when_activity_matches_its_id(client: FlaskClient, mocker: MockFixture):
4446
use_cases.get_activity_by_id = mocker.Mock(return_value=fake_activity_dto)
47+
4548
response = client.get("/activities/%s" % valid_id)
49+
4650
assert response.status_code == HTTPStatus.OK
4751
assert fake_activity == json.loads(response.data)
4852

4953

50-
def test_get_activity_by_id_using_an_invalid_id(client: FlaskClient, mocker: MockFixture):
54+
def test__activity_class__returns_an_activity__when_no_activity_matches_its_id(client: FlaskClient,
55+
mocker: MockFixture):
5156
invalid_id = fake.uuid4()
5257
use_cases.get_activity_by_id = mocker.Mock(side_effect=NotFound)
58+
5359
response = client.get("/activities/%s" % invalid_id)
60+
5461
assert response.status_code == HTTPStatus.NOT_FOUND

V2/tests/use_cases/activities_use_case_test.py

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,20 @@
88
fake = Faker()
99

1010

11-
@pytest.fixture(scope='module')
12-
def activities_json_dao():
13-
activities_json_dao = ActivitiesJsonDao('./V2/source/activities_data.json')
14-
return activities_json_dao
15-
16-
17-
def test_get_activities_use_case(activities_json_dao, mocker: MockFixture):
18-
activities_dto = activities_json_dao.get_all()
19-
activities_expected = use_cases.get_list_activities()
20-
21-
assert activities_dto == activities_expected
22-
11+
def test__get_list_activities_function__uses_the_activities_service__to_retrieve_activities(mocker: MockFixture):
2312
expected_activities = mocker.Mock()
2413
use_cases.get_list_activities = mocker.Mock(return_value=expected_activities)
14+
2515
actual_activities = use_cases.get_list_activities()
2616

2717
assert use_cases.get_list_activities.called
2818
assert expected_activities == actual_activities
2919

3020

31-
def test_get_activity_by_id_use_case(activities_json_dao, mocker: MockFixture):
32-
activity_dto = activities_json_dao.get_by_id('94ec92e2-a500-4700-a9f6-e41eb7b5507c')
33-
activity_expected = use_cases.get_activity_by_id('94ec92e2-a500-4700-a9f6-e41eb7b5507c')
34-
35-
assert activity_dto == activity_expected
36-
21+
def test__get_activity_by_id_function__uses_the_activities_service__to_retrieve_activity(mocker: MockFixture):
3722
expected_activity = mocker.Mock()
3823
use_cases.get_activity_by_id = mocker.Mock(return_value=expected_activity)
24+
3925
actual_activity = use_cases.get_activity_by_id(fake.uuid4())
4026

4127
assert use_cases.get_activity_by_id.called

0 commit comments

Comments
 (0)