Skip to content

Commit b17a146

Browse files
ararcosJobzi
authored andcommitted
refactor: TT-417 created enums and use
1 parent d4f6b8d commit b17a146

File tree

9 files changed

+115
-103
lines changed

9 files changed

+115
-103
lines changed

V2/tests/api/azure/project_azure_endpoints_test.py

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,28 @@
77
from time_tracker.projects._application import _projects as azure_projects
88
from time_tracker.projects import _domain as domain
99
from time_tracker.projects import _infrastructure as infrastructure
10-
from time_tracker._infrastructure import DB
1110

1211
PROJECT_URL = '/api/projects/'
1312

1413

1514
@pytest.fixture(name='insert_project')
16-
def _insert_project() -> domain.Project:
17-
def _new_project(project: domain.Project, database: DB):
18-
dao = infrastructure.ProjectsSQLDao(database)
19-
new_project = dao.create(project)
20-
return new_project
15+
def insert_project(test_db, insert_customer, project_factory, customer_factory) -> domain.Project:
16+
inserted_customer = insert_customer(customer_factory(), test_db)
17+
18+
def _new_project():
19+
project_to_insert = project_factory(customer_id=inserted_customer.id)
20+
dao = infrastructure.ProjectsSQLDao(test_db)
21+
inserted_project = dao.create(project_to_insert)
22+
return inserted_project
2123
return _new_project
2224

2325

2426
def test__project_azure_endpoint__returns_all_projects(
25-
test_db, project_factory, insert_project, insert_customer, customer_factory
27+
insert_project
2628
):
27-
inserted_customer = insert_customer(customer_factory(), test_db)
28-
project_to_insert = [project_factory(customer_id=inserted_customer.id),
29-
project_factory(customer_id=inserted_customer.id)]
3029
inserted_projects = [
31-
insert_project(project_to_insert[0], test_db).__dict__,
32-
insert_project(project_to_insert[1], test_db).__dict__
30+
insert_project().__dict__,
31+
insert_project().__dict__
3332
]
3433

3534
req = func.HttpRequest(method='GET', body=None, url=PROJECT_URL)
@@ -41,11 +40,9 @@ def test__project_azure_endpoint__returns_all_projects(
4140

4241

4342
def test__project_azure_endpoint__returns_an_project__when_project_matches_its_id(
44-
test_db, project_factory, insert_project, insert_customer, customer_factory
43+
insert_project
4544
):
46-
inserted_customer = insert_customer(customer_factory(), test_db)
47-
project_to_insert = project_factory(customer_id=inserted_customer.id)
48-
inserted_project = insert_project(project_to_insert, test_db).__dict__
45+
inserted_project = insert_project().__dict__
4946

5047
req = func.HttpRequest(
5148
method='GET',
@@ -77,11 +74,9 @@ def test__projects_azure_endpoint__returns_a_status_code_400__when_project_reciv
7774

7875

7976
def test__project_azure_endpoint__returns_an_project_with_inactive_status__when_an_project_matching_its_id_is_found(
80-
test_db, project_factory, insert_project, insert_customer, customer_factory
77+
insert_project
8178
):
82-
inserted_customer = insert_customer(customer_factory(), test_db)
83-
project_to_insert = project_factory(customer_id=inserted_customer.id)
84-
inserted_project = insert_project(project_to_insert, test_db).__dict__
79+
inserted_project = insert_project().__dict__
8580

8681
req = func.HttpRequest(
8782
method='DELETE',
@@ -114,11 +109,9 @@ def test__delete_projects_azure_endpoint__returns_a_status_code_400__when_projec
114109

115110

116111
def test__update_project_azure_endpoint__returns_an_project__when_found_an_project_to_update(
117-
test_db, project_factory, insert_project, insert_customer, customer_factory
112+
insert_project
118113
):
119-
inserted_customer = insert_customer(customer_factory(), test_db)
120-
project_to_insert = project_factory(customer_id=inserted_customer.id)
121-
inserted_project = insert_project(project_to_insert, test_db).__dict__
114+
inserted_project = insert_project().__dict__
122115

123116
project_body = {"description": Faker().sentence()}
124117
req = func.HttpRequest(

V2/tests/fixtures.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,9 @@ def _make_project(
125125

126126

127127
@pytest.fixture(name='insert_customer')
128-
def _insert_customer() -> dict:
129-
def _new_customer(activity: customers_domain.Customer, database: DB):
128+
def _insert_customer() -> customers_domain.Customer:
129+
def _new_customer(customer: customers_domain.Customer, database: DB):
130130
dao = customers_infrastructure.CustomersSQLDao(database)
131-
new_activity = dao.create(activity)
132-
return new_activity
131+
new_customer = dao.create(customer)
132+
return new_customer
133133
return _new_customer

V2/tests/integration/daos/projects_dao_test.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@
77
from time_tracker._infrastructure import DB
88

99

10+
@pytest.fixture(name='insert_project')
11+
def _insert_project(customer_factory, test_db, insert_customer, create_fake_dao, project_factory) -> domain.Project:
12+
inserted_customer = insert_customer(customer_factory(), test_db)
13+
14+
def _new_project():
15+
project_to_insert = project_factory(customer_id=inserted_customer.id)
16+
inserted_project = create_fake_dao.create(project_to_insert)
17+
return inserted_project
18+
19+
return _new_project
20+
21+
1022
@pytest.fixture(name='create_fake_dao')
1123
def _create_fake_dao() -> domain.ProjectsDao:
1224
db_fake = DB()
@@ -37,13 +49,11 @@ def test__create_project__returns_a_project_dto__when_saves_correctly_with_sql_d
3749

3850

3951
def test_update__returns_an_update_project__when_an_project_matching_its_id_is_found_with_sql_database(
40-
create_fake_dao, project_factory, insert_customer, customer_factory
52+
create_fake_dao, insert_project
4153
):
4254
dao = create_fake_dao
43-
inserted_customer = insert_customer(customer_factory(), dao.db)
44-
project_to_insert = project_factory(customer_id=inserted_customer.id)
4555

46-
inserted_project = dao.create(project_to_insert)
56+
inserted_project = insert_project()
4757

4858
expected_description = Faker().sentence()
4959
updated_project = dao.update(inserted_project.id, {"description": expected_description})
@@ -65,16 +75,13 @@ def test_update__returns_none__when_no_project_matching_its_id_is_found_with_sql
6575

6676

6777
def test__get_all__returns_a_list_of_project_dto_objects__when_one_or_more_projects_are_found_with_sql_database(
68-
create_fake_dao, project_factory, insert_customer, customer_factory
78+
create_fake_dao, insert_project
6979
):
7080
dao = create_fake_dao
71-
inserted_customer = insert_customer(customer_factory(), dao.db)
72-
project_to_inserts = [project_factory(customer_id=inserted_customer.id),
73-
project_factory(customer_id=inserted_customer.id)]
7481

7582
inserted_projects = [
76-
dao.create(project_to_inserts[0]),
77-
dao.create(project_to_inserts[1])
83+
insert_project(),
84+
insert_project()
7885
]
7986

8087
projects = dao.get_all()
@@ -83,13 +90,11 @@ def test__get_all__returns_a_list_of_project_dto_objects__when_one_or_more_proje
8390

8491

8592
def test_get_by_id__returns_an_project_dto__when_found_one_project_that_matches_its_id_with_sql_database(
86-
create_fake_dao, project_factory, insert_customer, customer_factory
93+
create_fake_dao, insert_project
8794
):
8895
dao = create_fake_dao
89-
inserted_customer = insert_customer(customer_factory(), dao.db)
90-
project_to_insert = project_factory(customer_id=inserted_customer.id)
9196

92-
inserted_project = dao.create(project_to_insert)
97+
inserted_project = insert_project()
9398

9499
project = dao.get_by_id(inserted_project.id)
95100

@@ -119,12 +124,11 @@ def test_get_all__returns_an_empty_list__when_doesnt_found_any_projects_with_sql
119124

120125

121126
def test_delete__returns_an_project_with_inactive_status__when_an_project_matching_its_id_is_found_with_sql_database(
122-
create_fake_dao, project_factory, insert_customer, customer_factory
127+
create_fake_dao, insert_project
123128
):
124129
dao = create_fake_dao
125-
inserted_customer = insert_customer(customer_factory(), dao.db)
126-
project_to_insert = project_factory(customer_id=inserted_customer.id)
127-
inserted_project = dao.create(project_to_insert)
130+
131+
inserted_project = insert_project()
128132

129133
project = dao.delete(inserted_project.id)
130134

V2/time_tracker/projects/_application/_projects/_create_project.py

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from ... import _domain
88
from ... import _infrastructure
99
from time_tracker._infrastructure import DB
10+
from time_tracker.utils.enums import ResponseEnums as enums
1011

1112

1213
def create_project(req: func.HttpRequest) -> func.HttpResponse:
@@ -19,34 +20,30 @@ def create_project(req: func.HttpRequest) -> func.HttpResponse:
1920

2021
validation_errors = _validate_project(project_data)
2122
if validation_errors:
22-
return func.HttpResponse(
23-
body=json.dumps(validation_errors), status_code=400, mimetype="application/json"
23+
status_code = enums.STATUS_BAD_REQUEST.value
24+
response = json.dumps(validation_errors)
25+
else:
26+
project_to_create = _domain.Project(
27+
id=None,
28+
name=project_data["name"],
29+
description=project_data["description"],
30+
project_type_id=project_data["project_type_id"],
31+
customer_id=project_data["customer_id"],
32+
status=project_data["status"],
33+
deleted=False,
34+
technologies=project_data["technologies"]
2435
)
2536

26-
project_to_create = _domain.Project(
27-
id=None,
28-
name=project_data["name"],
29-
description=project_data["description"],
30-
project_type_id=project_data["project_type_id"],
31-
customer_id=project_data["customer_id"],
32-
status=project_data["status"],
33-
deleted=False,
34-
technologies=project_data["technologies"]
35-
)
36-
37-
created_project = use_case.create_project(project_to_create)
37+
created_project = use_case.create_project(project_to_create)
3838

39-
if not created_project:
40-
return func.HttpResponse(
41-
body=json.dumps({'error': 'project could not be created'}),
42-
status_code=500,
43-
mimetype="application/json"
44-
)
39+
status_code, response = [
40+
enums.INTERNAL_SERVER_ERROR.value, json.dumps({'error': f'project {enums.NOT_CREATED.value}'})
41+
] if not created_project else [enums.STATUS_CREATED.value, json.dumps(created_project.__dict__)]
4542

4643
return func.HttpResponse(
47-
body=json.dumps(created_project.__dict__),
48-
status_code=201,
49-
mimetype="application/json"
44+
body=response,
45+
status_code=status_code,
46+
mimetype=enums.MIME_TYPE.value
5047
)
5148

5249

V2/time_tracker/projects/_application/_projects/_delete_project.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from ... import _domain
66
from ... import _infrastructure
77
from time_tracker._infrastructure import DB
8+
from time_tracker.utils.enums import ResponseEnums as enums
89

910

1011
def delete_project(req: func.HttpRequest) -> func.HttpResponse:
@@ -15,22 +16,20 @@ def delete_project(req: func.HttpRequest) -> func.HttpResponse:
1516
try:
1617
project_id = int(req.route_params.get("id"))
1718
deleted_project = use_case.delete_project(project_id)
18-
if not deleted_project:
19-
return func.HttpResponse(
20-
body="Not found",
21-
status_code=404,
22-
mimetype="application/json"
23-
)
19+
20+
status_code, response = [
21+
enums.STATUS_NOT_FOUND.value, enums.NOT_FOUND.value.encode()
22+
] if not deleted_project else [enums.STATUS_OK.value, json.dumps(deleted_project.__dict__)]
2423

2524
return func.HttpResponse(
26-
body=json.dumps(deleted_project.__dict__, default=str),
27-
status_code=200,
28-
mimetype="application/json",
25+
body=response,
26+
status_code=status_code,
27+
mimetype=enums.MIME_TYPE.value,
2928
)
3029

3130
except ValueError:
3231
return func.HttpResponse(
33-
body=b"Invalid Format ID",
34-
status_code=400,
35-
mimetype="application/json"
32+
body=enums.INVALID_ID.value.encode(),
33+
status_code=enums.STATUS_BAD_REQUEST.value,
34+
mimetype=enums.MIME_TYPE.value
3635
)

V2/time_tracker/projects/_application/_projects/_get_projects.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from ... import _domain
77
from ... import _infrastructure
88
from time_tracker._infrastructure import DB
9+
from time_tracker.utils.enums import ResponseEnums as enums
910

1011

1112
def get_projects(req: func.HttpRequest) -> func.HttpResponse:
@@ -20,24 +21,24 @@ def get_projects(req: func.HttpRequest) -> func.HttpResponse:
2021
response = _get_by_id(int(project_id), project_service)
2122
if not response:
2223
return func.HttpResponse(
23-
body="Not found",
24-
status_code=404,
25-
mimetype="application/json"
24+
body=enums.NOT_FOUND.value.encode(),
25+
status_code=enums.STATUS_NOT_FOUND.value,
26+
mimetype=enums.MIME_TYPE.value
2627
)
2728
else:
2829
response = _get_all(project_service)
2930

3031
return func.HttpResponse(
31-
body=json.dumps(response, default=str),
32-
status_code=200,
33-
mimetype="application/json",
32+
body=json.dumps(response),
33+
status_code=enums.STATUS_OK.value,
34+
mimetype=enums.MIME_TYPE.value,
3435
)
3536

3637
except ValueError:
3738
return func.HttpResponse(
38-
body=b"Invalid Format ID",
39-
status_code=400,
40-
mimetype="application/json"
39+
body=enums.INVALID_ID.value.encode(),
40+
status_code=enums.STATUS_BAD_REQUEST.value,
41+
mimetype=enums.MIME_TYPE.value
4142
)
4243

4344

V2/time_tracker/projects/_application/_projects/_update_project.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from ... import _domain
77
from ... import _infrastructure
88
from time_tracker._infrastructure import DB
9+
from time_tracker.utils.enums import ResponseEnums as enums
910

1011

1112
def update_project(req: func.HttpRequest) -> func.HttpResponse:
@@ -17,29 +18,28 @@ def update_project(req: func.HttpRequest) -> func.HttpResponse:
1718
try:
1819
project_id = int(req.route_params.get("id"))
1920
project_data = req.get_json()
20-
status_code = 200
2121

2222
if not _validate_project(project_data):
23-
status_code = 400
24-
response = "Incorrect project body"
23+
status_code = enums.STATUS_BAD_REQUEST.value
24+
response = bytes(f"{enums.INCORRECT_BODY.value} project")
2525

26-
response = use_case.update_project(project_id, project_data).__dict__
27-
28-
if not update_project:
29-
status_code = 404
30-
response = "Not found"
26+
else:
27+
updated_project = use_case.update_project(project_id, project_data)
28+
status_code, response = [
29+
enums.STATUS_NOT_FOUND.value, enums.NOT_FOUND.value.encode()
30+
] if not updated_project else [enums.STATUS_OK.value, json.dumps(updated_project.__dict__)]
3131

3232
return func.HttpResponse(
33-
body=json.dumps(response, default=str),
33+
body=response,
3434
status_code=status_code,
35-
mimetype="application/json",
35+
mimetype=enums.MIME_TYPE.value,
3636
)
3737

3838
except ValueError:
3939
return func.HttpResponse(
40-
body=b"Invalid Format ID",
41-
status_code=400,
42-
mimetype="application/json"
40+
body=enums.INVALID_ID.value.encode(),
41+
status_code=enums.STATUS_BAD_REQUEST.value,
42+
mimetype=enums.MIME_TYPE.value,
4343
)
4444

4545

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# flake8: noqa
2+
from .response_enums import ResponseEnums
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from enum import Enum
2+
3+
4+
class ResponseEnums(Enum):
5+
STATUS_CREATED = 201
6+
STATUS_OK = 200
7+
STATUS_BAD_REQUEST = 400
8+
STATUS_NOT_FOUND = 404
9+
INTERNAL_SERVER_ERROR = 500
10+
11+
INVALID_ID = "Invalid Format ID"
12+
NOT_FOUND = "Not found"
13+
NOT_CREATED = "could not be created"
14+
INCORRECT_BODY = "Incorrect body"
15+
16+
MIME_TYPE = "application/json"

0 commit comments

Comments
 (0)