Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion V2/local.settings.json
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
{"IsEncrypted":false,"Values":{"AzureWebJobsStorage":"UseDevelopmentStorage=true","FUNCTIONS_WORKER_RUNTIME":"python"}}
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python"
},
"Host": {
"CORS": "*"
}
}
14 changes: 8 additions & 6 deletions V2/tests/api/azure/activity_azure_endpoints_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import azure.functions as func

import time_tracker.activities._application._activities as azure_activities
from time_tracker.utils.parsers import parse_status_to_string_for_ui as parse_status
from time_tracker.utils.enums import StatusEnums

ACTIVITY_URL = '/api/activities/'

Expand All @@ -13,8 +15,8 @@ def test__activity_azure_endpoint__returns_all_activities(
):
existent_activities = [activity_factory(), activity_factory()]
inserted_activities = [
insert_activity(existent_activities[0], test_db).__dict__,
insert_activity(existent_activities[1], test_db).__dict__
parse_status(insert_activity(existent_activities[0], test_db).__dict__),
parse_status(insert_activity(existent_activities[1], test_db).__dict__)
]

req = func.HttpRequest(method='GET', body=None, url=ACTIVITY_URL)
Expand All @@ -29,7 +31,7 @@ def test__activity_azure_endpoint__returns_an_activity__when_activity_matches_it
test_db, activity_factory, insert_activity
):
existent_activity = activity_factory()
inserted_activity = insert_activity(existent_activity, test_db).__dict__
inserted_activity = parse_status(insert_activity(existent_activity, test_db).__dict__)

req = func.HttpRequest(
method='GET',
Expand Down Expand Up @@ -62,15 +64,15 @@ def test__activity_azure_endpoint__returns_an_activity_with_inactive_status__whe
activity_json_data = json.loads(response.get_body().decode("utf-8"))

assert response.status_code == 200
assert activity_json_data['status'] == 0
assert activity_json_data['status'] == StatusEnums(0).name
assert activity_json_data['deleted'] is True


def test__update_activity_azure_endpoint__returns_an_activity__when_found_an_activity_to_update(
test_db, activity_factory, insert_activity
):
existent_activity = activity_factory()
inserted_activity = insert_activity(existent_activity, test_db).__dict__
inserted_activity = parse_status(insert_activity(existent_activity, test_db).__dict__)

activity_body = {"description": Faker().sentence()}
req = func.HttpRequest(
Expand Down Expand Up @@ -108,4 +110,4 @@ def test__activity_azure_endpoint__creates_an_activity__when_activity_has_all_at
activity_body['id'] = activitiy_json_data['id']

assert response.status_code == 201
assert activitiy_json_data == activity_body
assert activitiy_json_data == parse_status(activity_body)
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from ... import _domain
from ... import _infrastructure
from time_tracker._infrastructure import DB
from time_tracker.utils.parsers import parse_status_to_string_for_ui as parse_status


def create_activity(req: func.HttpRequest) -> func.HttpResponse:
Expand All @@ -27,8 +28,8 @@ def create_activity(req: func.HttpRequest) -> func.HttpResponse:
id=None,
name=activity_data['name'],
description=activity_data['description'],
status=activity_data['status'],
deleted=activity_data['deleted']
status=None,
deleted=None
)

created_activity = use_case.create_activity(activity_to_create)
Expand All @@ -39,15 +40,16 @@ def create_activity(req: func.HttpRequest) -> func.HttpResponse:
mimetype="application/json",
)
return func.HttpResponse(
body=json.dumps(created_activity.__dict__),
body=json.dumps(parse_status(created_activity.__dict__)),
status_code=201,
mimetype="application/json"
)


def _validate_activity(activity_data: dict) -> typing.List[str]:
activity_fields = [field.name for field in dataclasses.fields(_domain.Activity)]
missing_keys = [field for field in activity_fields if field not in activity_data]
activity_fields = [field for field in dataclasses.fields(_domain.Activity)]
missing_keys = [field.name for field in activity_fields
if (field.name not in activity_data) and (field.type != typing.Optional[field.type])]
return [
f'The {missing_key} key is missing in the input data'
for missing_key in missing_keys
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@

import azure.functions as func


from ... import _domain
from ... import _infrastructure
from time_tracker._infrastructure import DB
from time_tracker.utils.parsers import parse_status_to_string_for_ui as parse_status


def delete_activity(req: func.HttpRequest) -> func.HttpResponse:
Expand All @@ -32,7 +34,7 @@ def _delete(activity_id: int) -> str:
_create_activity_service(database)
)
activity = activity_use_case.delete_activity(activity_id)
return json.dumps(activity.__dict__) if activity else b'Not found'
return json.dumps(parse_status(activity.__dict__)) if activity else b'Not found'


def _create_activity_service(db: DB) -> _domain.ActivityService:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from ... import _domain
from ... import _infrastructure
from time_tracker._infrastructure import DB
from time_tracker.utils.parsers import parse_status_to_string_for_ui as parse_status


def get_activities(req: func.HttpRequest) -> func.HttpResponse:
Expand Down Expand Up @@ -39,7 +40,7 @@ def _get_by_id(activity_id: int, database: DB) -> str:
)
activity = activity_use_case.get_activity_by_id(activity_id)

return json.dumps(activity.__dict__) if activity else b'Not Found'
return json.dumps(parse_status(activity.__dict__)) if activity else b'Not Found'


def _get_all(database: DB) -> str:
Expand All @@ -48,7 +49,7 @@ def _get_all(database: DB) -> str:
)
return json.dumps(
[
activity.__dict__
parse_status(activity.__dict__)
for activity in activities_use_case.get_activities()
]
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
from ... import _domain
from ... import _infrastructure
from time_tracker._infrastructure import DB
from time_tracker.utils.parsers import parse_status_to_string_for_ui as parse_status
from time_tracker.utils.parsers import parse_status_to_number
from time_tracker.utils.enums import StatusEnums


def update_activity(req: func.HttpRequest) -> func.HttpResponse:
Expand Down Expand Up @@ -39,13 +42,15 @@ def _update(activity_id: int, activity_data: dict) -> str:
activity_use_case = _domain._use_cases.UpdateActivityUseCase(
_create_activity_service(database)
)
status = parse_status_to_number(activity_data.get("status"))
deleted = status == StatusEnums.inactive.value
activity = activity_use_case.update_activity(
activity_id, activity_data.get("name"),
activity_data.get("description"),
activity_data.get("status"),
activity_data.get("deleted")
status,
deleted,
)
return json.dumps(activity.__dict__) if activity else b'Not Found'
return json.dumps(parse_status(activity.__dict__)) if activity else b'Not Found'


def _create_activity_service(db: DB) -> _domain.ActivityService:
Expand Down
8 changes: 5 additions & 3 deletions V2/time_tracker/activities/_domain/_entities/_activity.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import typing

from dataclasses import dataclass


@dataclass(frozen=True)
class Activity:
id: int
id: typing.Optional[int]
name: str
description: str
deleted: bool
status: int
deleted: typing.Optional[bool]
status: typing.Optional[int]
3 changes: 2 additions & 1 deletion V2/time_tracker/utils/enums/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
# flake8: noqa
from .response_enums import ResponseEnums
from .response_enums import ResponseEnums
from .status_enums import StatusEnums
6 changes: 6 additions & 0 deletions V2/time_tracker/utils/enums/status_enums.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from enum import Enum


class StatusEnums(Enum):
inactive = 0
active = 1
2 changes: 2 additions & 0 deletions V2/time_tracker/utils/parsers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# flake8: noqa
from .activity_parser import parse_status_to_number, parse_status_to_string_for_ui
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be another more generic name no activity_parser maybe status_parser or another name

12 changes: 12 additions & 0 deletions V2/time_tracker/utils/parsers/activity_parser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from time_tracker.utils.enums import StatusEnums


def parse_status_to_string_for_ui(activity: dict) -> dict:
activity['status'] = StatusEnums(activity['status']).name
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be another more generic name no activity

return activity


def parse_status_to_number(status: str) -> int:
if(isinstance(status, str)):
return StatusEnums[status].value
return status