Skip to content

Commit 249d35a

Browse files
committed
test: TT-365 Integration, Unit, API Testing
1 parent d709e08 commit 249d35a

File tree

8 files changed

+83
-33
lines changed

8 files changed

+83
-33
lines changed

V2/tests/api/azure/activity_azure_endpoints_test.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from time_entries._application._activities import _get_activities as activities
2+
23
import azure.functions as func
34
import json
45
import typing
@@ -25,7 +26,7 @@ def test__activity_azure_endpoint__returns_an_activity__when_activity_matches_it
2526
activities.JSON_PATH = tmp_directory
2627
req = func.HttpRequest(
2728
method='GET',
28-
body=None,
29+
body= None,
2930
url='/api/activities/',
3031
route_params={"id": activities_json[0]['id']},
3132
)
@@ -35,3 +36,19 @@ def test__activity_azure_endpoint__returns_an_activity__when_activity_matches_it
3536

3637
assert response.status_code == 200
3738
assert activitiy_json_data == json.dumps(activities_json[0])
39+
40+
41+
def test__activity_azure_endpoint__creates_an_activity__when_activity_matches_its_parameters(
42+
activities_json: typing.List[dict],
43+
):
44+
activity_body = b'{"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2","name": "Jobzi","description": "hola1","deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a","tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05","status": null}'
45+
req = func.HttpRequest(
46+
method='POST',
47+
body= activity_body,
48+
url='/api/activities/',
49+
)
50+
51+
response = create_activity(req)
52+
#activitiy_json_data = response.get_body().decode("utf-8")
53+
assert response.status_code == 200
54+
# assert activitiy_json_data == json.dumps(activity_body_json)

V2/tests/integration/daos/activities_json_dao_test.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,18 @@ def test_get_all__returns_an_empty_list__when_doesnt_found_any_activities(
8383
result = activities_json_dao.get_all()
8484

8585
assert result == activities
86+
87+
def test_create_activity__returns_an_activity_dto__when_create_an_activity_that_matches_attributes(create_fake_activities):
88+
create_fake_activities([])
89+
90+
activities_json_dao = ActivitiesJsonDao(Faker().file_path())
91+
activity_data = {
92+
"name": "test_name",
93+
"description": "test_description",
94+
"tenant_id": "test_tenant_id",
95+
"id": "test_id",
96+
"deleted": "test_deleted",
97+
"status": "test_status",
98+
}
99+
result = activities_json_dao.create_activity(activity_data)
100+
assert result == Activity(**activity_data)

V2/tests/unit/services/activity_service_test.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,15 @@ def test__get_by_id__uses_the_activity_dao__to_retrieve_one_activity(mocker):
2626

2727
assert activity_dao.get_by_id.called
2828
assert expected_activity == actual_activity
29+
30+
def test__create_activity__uses_the_activity_dao__to_create_an_activity(mocker):
31+
expected_activity = mocker.Mock()
32+
activity_dao = mocker.Mock(
33+
create_activity=mocker.Mock(return_value=expected_activity)
34+
)
35+
activity_service = ActivityService(activity_dao)
36+
37+
actual_activity = activity_service.create_activity(Faker().pydict())
38+
39+
assert activity_dao.create_activity.called
40+
assert expected_activity == actual_activity

V2/tests/unit/use_cases/activities_use_case_test.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,18 @@ def test__get_activity_by_id_function__uses_the_activities_service__to_retrieve_
3434

3535
assert activity_service.get_by_id.called
3636
assert expected_activity == actual_activity
37+
38+
39+
def test__create_activity_function__uses_the_activities_service__to_create_activity(
40+
mocker: MockFixture,
41+
):
42+
expected_activity = mocker.Mock()
43+
activity_service = mocker.Mock(
44+
create_activity=mocker.Mock(return_value=expected_activity)
45+
)
46+
47+
activity_use_case = _use_cases.CreateActivityUseCase(activity_service)
48+
actual_activity = activity_use_case.create_activity(fake.pydict())
49+
50+
assert activity_service.create_activity.called
51+
assert expected_activity == actual_activity

V2/time_entries/_application/_activities/_create_activity.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
from time_entries._infrastructure import ActivitiesJsonDao
2-
from time_entries._domain import ActivityService, _use_cases
2+
from time_entries._domain import ActivityService, _use_cases, Activity
33

44
import azure.functions as func
55
import json
66
import logging
7+
import dataclasses
8+
79

810
JSON_PATH = (
911
'V2/time_entries/_infrastructure/_data_persistence/activities_data.json'
@@ -22,17 +24,13 @@ def create_activity(req: func.HttpRequest) -> func.HttpResponse:
2224
logging.info(
2325
'Python HTTP trigger function processed a request to create an activity.'
2426
)
25-
#activity_data = req.route_params.get('activity_data')
2627
activity_data = req.get_json()
27-
print(activity_data)
2828
status_code = 200
29-
30-
if status_code == 200:
29+
if _validate_activity(activity_data):
3130
response = _create_activity(activity_data)
32-
if response == b'no data activity ':
33-
status_code = 404
3431
else:
35-
response = b'Not possible to create activity'
32+
status_code = 404
33+
response = b'Not possible to create activity, attributes are not correct '
3634

3735
return func.HttpResponse(
3836
body=response, status_code=status_code, mimetype="application/json"
@@ -45,6 +43,13 @@ def _create_activity(activity_data: dict) -> str:
4543
activity = activity_use_case.create_activity(activity_data)
4644
return json.dumps(activity.__dict__) if activity else b'Not Found'
4745

46+
def _validate_activity(activity_data: dict) -> bool:
47+
activity_keys = [field.name for field in dataclasses.fields(Activity)]
48+
new_activity_keys = list(activity_data.keys())
49+
return all(map(lambda key: key in activity_keys, new_activity_keys)) and len(activity_keys) == len(new_activity_keys)
50+
4851
def _create_activity_service(path: str):
4952
activity_json = ActivitiesJsonDao(path)
50-
return ActivityService(activity_json)
53+
return ActivityService(activity_json)
54+
55+

V2/time_entries/_application/_activities/_get_activities.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import logging
77

88
JSON_PATH = (
9-
'time_entries/_infrastructure/_data_persistence/activities_data.json'
9+
'V2/time_entries/_infrastructure/_data_persistence/activities_data.json'
1010
)
1111

1212

V2/time_entries/_infrastructure/_data_persistence/_activities_json_dao.py

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@
33
import json
44
import typing
55

6-
# JSON_PATH = (
7-
# '../../time_entries/_infrastructure/_data_persistence/activities_data.json'
8-
# )
9-
JSON_PATH = '../../time_entries/_infrastructure/_data_persistence/activities_data.json'
10-
PATH = '/Users/danielagarcia/time-tracker-backend/V2/time_entries/_infrastructure/_data_persistence/activities_data.json'
116
class ActivitiesJsonDao(ActivitiesDao):
127
def __init__(self, json_data_file_path: str):
138
self.json_data_file_path = json_data_file_path
@@ -30,22 +25,13 @@ def get_all(self) -> typing.List[Activity]:
3025
]
3126

3227
def create_activity(self, activity_data: dict) -> Activity:
33-
#array = []
34-
# with open(PATH, "r+") as outfile:
35-
# data = json.load(outfile)
36-
# data.append(activity_data)
37-
# outfile.seek(0)
38-
# json.dump(data, outfile)
39-
40-
41-
with open(PATH, 'a+') as outfile:
42-
#data = outfile.read(100)
43-
#if len(data) > 0:
44-
# outfile.write("\n")
45-
# Append text at the end of file
46-
# outfile.write(str(activity_data)+",")
47-
json.dump(activity_data, outfile)
48-
return self.__create_activity_dto(activity_data)
28+
activities = self.__get_activities_from_file()
29+
activities.append(activity_data)
30+
31+
with open(self.json_data_file_path, 'w') as outfile:
32+
json.dump(activities, outfile)
33+
34+
return self.__create_activity_dto(activity_data)
4935

5036
def __get_activities_from_file(self) -> typing.List[dict]:
5137
try:
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p1", "name": "Prueba1", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "status": null, "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05"}
1+
[{"name": "Development", "description": "Development", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "id": "c61a4a49-3364-49a3-a7f7-0c5f2d15072b", "_rid": "QUwFAPuumiRhAAAAAAAAAA==", "_self": "dbs/QUwFAA==/colls/QUwFAPuumiQ=/docs/QUwFAPuumiRhAAAAAAAAAA==/", "_etag": "\"4e006cc9-0000-0500-0000-607dcc0d0000\"", "_attachments": "attachments/", "_last_event_ctx": {"user_id": "dd76e5d6-3949-46fd-b418-f15bf7c354fa", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "action": "delete", "description": null, "container_id": "activity", "session_id": null}, "deleted": "b4327ba6-9f96-49ee-a9ac-3c1edf525172", "status": null, "_ts": 1618856973}, {"name": "Management", "description": null, "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "id": "94ec92e2-a500-4700-a9f6-e41eb7b5507c", "_last_event_ctx": {"user_id": "dd76e5d6-3949-46fd-b418-f15bf7c354fa", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "action": "delete", "description": null, "container_id": "activity", "session_id": null}, "_rid": "QUwFAPuumiRfAAAAAAAAAA==", "_self": "dbs/QUwFAA==/colls/QUwFAPuumiQ=/docs/QUwFAPuumiRfAAAAAAAAAA==/", "_etag": "\"4e0069c9-0000-0500-0000-607dcc0d0000\"", "_attachments": "attachments/", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "status": null, "_ts": 1618856973}, {"name": "Operations", "description": "Operation activities performed.", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "id": "d45c770a-b1a0-4bd8-a713-22c01a23e41b", "_rid": "QUwFAPuumiRjAAAAAAAAAA==", "_self": "dbs/QUwFAA==/colls/QUwFAPuumiQ=/docs/QUwFAPuumiRjAAAAAAAAAA==/", "_etag": "\"09009a4d-0000-0500-0000-614b66fb0000\"", "_attachments": "attachments/", "_last_event_ctx": {"user_id": "82ed0f65-051c-4898-890f-870805900e21", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "action": "update", "description": null, "container_id": "activity", "session_id": null}, "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "status": "active", "_ts": 1632331515}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p1", "name": "Prueba1", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": "active"}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": "active"}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": "active"}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Prueba2", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": "active"}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Jobzi", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Jobzi", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Jobzi", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Jobzi", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Jobzi", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Jobzi", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Jobzi", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}, {"id": "94ec92e2-a500-4700-a9f6-e41eb7b550p2", "name": "Jobzi", "description": "hola1", "deleted": "7cf6efe5-a221-4fe4-b94f-8945127a489a", "tenant_id": "cc925a5d-9644-4a4f-8d99-0bee49aadd05", "status": null}]

0 commit comments

Comments
 (0)