Skip to content

Commit b7f9dd1

Browse files
committed
fix: TT-365 resolve comments
1 parent 1ed1bf0 commit b7f9dd1

File tree

2 files changed

+44
-34
lines changed

2 files changed

+44
-34
lines changed

V2/tests/api/azure/activity_azure_endpoints_test.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,18 +85,17 @@ def test__activity_azure_endpoint__creates_an_activity__when_activity_has_all_at
8585
create_temp_activities,
8686
):
8787
activities_json, tmp_directory = create_temp_activities
88-
activities._create_activity.JSON_PATH = tmp_directory
88+
activities._create_activity._JSON_PATH = tmp_directory
8989

90-
activity_body = {'id': Faker().uuid4(), 'name': Faker().user_name(), 'description': Faker().sentence(),'deleted': Faker().uuid4() ,'status': 'active', 'tenant_id': Faker().uuid4()}
90+
activity_body = {'id': None, 'name': Faker().user_name(), 'description': Faker().sentence(),'deleted': Faker().uuid4() ,'status': 'active', 'tenant_id': Faker().uuid4()}
9191
body = json.dumps(activity_body).encode("utf-8")
9292
req = func.HttpRequest(
9393
method='POST',
9494
body= body,
95-
url='/api/activities/',
95+
url=ACTIVITY_URL,
9696
)
9797

98-
response = activities._create_activity.create_activity(req)
98+
response = activities.create_activity(req)
9999
activitiy_json_data = response.get_body()
100-
101-
assert response.status_code == 200
100+
assert response.status_code == 201
102101
assert activitiy_json_data == body
Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,59 @@
1-
from time_entries._infrastructure import ActivitiesJsonDao
2-
from time_entries._domain import ActivityService, _use_cases, Activity
3-
4-
import azure.functions as func
51
import json
62
import logging
73
import dataclasses
4+
import typing
85

6+
import azure.functions as func
97

10-
JSON_PATH = (
8+
from ... import _domain
9+
from ... import _infrastructure
10+
11+
_JSON_PATH = (
1112
'time_entries/_infrastructure/_data_persistence/activities_data.json'
1213
)
1314

1415

15-
1616
def create_activity(req: func.HttpRequest) -> func.HttpResponse:
17+
activity_dao = _infrastructure.ActivitiesJsonDao(_JSON_PATH)
18+
activity_service = _domain.ActivityService(activity_dao)
19+
use_case = _domain._use_cases.CreateActivityUseCase(activity_service)
1720
logging.info(
1821
'Python HTTP trigger function processed a request to create an activity.'
1922
)
2023
activity_data = req.get_json()
21-
status_code = 200
22-
if _validate_activity(activity_data):
23-
response = _create_activity(activity_data)
24-
else:
25-
status_code = 404
26-
response = b'Not possible to create activity, attributes are not correct '
27-
28-
return func.HttpResponse(
29-
body=response, status_code=status_code, mimetype="application/json"
24+
validation_errors = _validate_activity(activity_data)
25+
if validation_errors:
26+
return func.HttpResponse(
27+
body=validation_errors, status_code=400, mimetype="application/json"
28+
)
29+
activity_to_create = _domain.Activity(
30+
id= None,
31+
name=activity_data['name'],
32+
description=activity_data['description'],
33+
status=activity_data['status'],
34+
deleted=activity_data['deleted'],
35+
tenant_id=activity_data['tenant_id']
3036
)
3137

32-
def _create_activity(activity_data: dict) -> str:
33-
activity_use_case = _use_cases.CreateActivityUseCase(
34-
_create_activity_service(JSON_PATH)
38+
created_activity = use_case.create_activity(activity_to_create.__dict__)
39+
if not create_activity:
40+
return func.HttpResponse(
41+
body={'error': 'activity could not be created'},
42+
status_code=500,
43+
mimetype="application/json",
44+
)
45+
return func.HttpResponse(
46+
body=json.dumps(created_activity.__dict__),
47+
status_code=201,
48+
mimetype="application/json"
3549
)
36-
activity = activity_use_case.create_activity(activity_data)
37-
return json.dumps(activity.__dict__) if activity else b'Not Found'
38-
39-
def _validate_activity(activity_data: dict) -> bool:
40-
activity_keys = [field.name for field in dataclasses.fields(Activity)]
41-
new_activity_keys = list(activity_data.keys())
42-
return all(map(lambda key: key in activity_keys, new_activity_keys)) and len(activity_keys) == len(new_activity_keys)
4350

44-
def _create_activity_service(path: str):
45-
activity_json = ActivitiesJsonDao(path)
46-
return ActivityService(activity_json)
4751

52+
def _validate_activity(activity_data: dict) -> typing.List[str]:
53+
activity_fields = [field.name for field in dataclasses.fields(_domain.Activity)]
4854

55+
missing_keys = [field for field in activity_fields if field not in activity_data]
56+
return [
57+
f'The {missing_key} key is missing in the input data'
58+
for missing_key in missing_keys
59+
]

0 commit comments

Comments
 (0)