Skip to content

Commit e852a64

Browse files
committed
test: TT-417 add missing tests and resolve comments
1 parent b17a146 commit e852a64

File tree

6 files changed

+128
-31
lines changed

6 files changed

+128
-31
lines changed

V2/tests/api/azure/project_azure_endpoints_test.py

Lines changed: 105 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
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.utils.enums import ResponseEnums as enums
1011

1112
PROJECT_URL = '/api/projects/'
1213

@@ -35,7 +36,7 @@ def test__project_azure_endpoint__returns_all_projects(
3536
response = azure_projects._get_projects.get_projects(req)
3637
projects_json_data = response.get_body().decode("utf-8")
3738

38-
assert response.status_code == 200
39+
assert response.status_code == enums.STATUS_OK.value
3940
assert projects_json_data == json.dumps(inserted_projects)
4041

4142

@@ -54,7 +55,7 @@ def test__project_azure_endpoint__returns_an_project__when_project_matches_its_i
5455
response = azure_projects._get_projects.get_projects(req)
5556
activitiy_json_data = response.get_body().decode("utf-8")
5657

57-
assert response.status_code == 200
58+
assert response.status_code == enums.STATUS_OK.value
5859
assert activitiy_json_data == json.dumps(inserted_project)
5960

6061

@@ -69,11 +70,11 @@ def test__projects_azure_endpoint__returns_a_status_code_400__when_project_reciv
6970

7071
response = azure_projects._get_projects.get_projects(req)
7172

72-
assert response.status_code == 400
73-
assert response.get_body() == b'Invalid Format ID'
73+
assert response.status_code == enums.STATUS_BAD_REQUEST.value
74+
assert response.get_body() == enums.INVALID_ID.value.encode()
7475

7576

76-
def test__project_azure_endpoint__returns_an_project_with_inactive_status__when_an_project_matching_its_id_is_found(
77+
def test__project_azure_endpoint__returns_an_project_with_inactive_status__when_a_project_matching_its_id_is_found(
7778
insert_project
7879
):
7980
inserted_project = insert_project().__dict__
@@ -88,7 +89,7 @@ def test__project_azure_endpoint__returns_an_project_with_inactive_status__when_
8889
response = azure_projects._delete_project.delete_project(req)
8990
project_json_data = json.loads(response.get_body().decode("utf-8"))
9091

91-
assert response.status_code == 200
92+
assert response.status_code == enums.STATUS_OK.value
9293
assert project_json_data['status'] == 0
9394
assert project_json_data['deleted'] is True
9495

@@ -104,11 +105,26 @@ def test__delete_projects_azure_endpoint__returns_a_status_code_400__when_projec
104105

105106
response = azure_projects._delete_project.delete_project(req)
106107

107-
assert response.status_code == 400
108-
assert response.get_body() == b'Invalid Format ID'
108+
assert response.status_code == enums.STATUS_BAD_REQUEST.value
109+
assert response.get_body() == enums.INVALID_ID.value.encode()
109110

110111

111-
def test__update_project_azure_endpoint__returns_an_project__when_found_an_project_to_update(
112+
def test__delete_projects_azure_endpoint__returns_a_status_code_404__when_no_found_a_project_to_delete(
113+
):
114+
req = func.HttpRequest(
115+
method="DELETE",
116+
body=None,
117+
url=PROJECT_URL,
118+
route_params={"id": Faker().pyint()},
119+
)
120+
121+
response = azure_projects._delete_project.delete_project(req)
122+
123+
assert response.status_code == enums.STATUS_NOT_FOUND.value
124+
assert response.get_body() == enums.NOT_FOUND.value.encode()
125+
126+
127+
def test__update_project_azure_endpoint__returns_an_project__when_found_a_project_to_update(
112128
insert_project
113129
):
114130
inserted_project = insert_project().__dict__
@@ -125,10 +141,44 @@ def test__update_project_azure_endpoint__returns_an_project__when_found_an_proje
125141
activitiy_json_data = response.get_body().decode("utf-8")
126142
inserted_project.update(project_body)
127143

128-
assert response.status_code == 200
144+
assert response.status_code == enums.STATUS_OK.value
129145
assert activitiy_json_data == json.dumps(inserted_project)
130146

131147

148+
def test__update_projects_azure_endpoint__returns_a_status_code_404__when_no_found_a_project_to_update(
149+
project_factory
150+
):
151+
project_body = project_factory().__dict__
152+
153+
req = func.HttpRequest(
154+
method="PUT",
155+
body=json.dumps(project_body).encode("utf-8"),
156+
url=PROJECT_URL,
157+
route_params={"id": Faker().pyint()},
158+
)
159+
160+
response = azure_projects._update_project.update_project(req)
161+
162+
assert response.status_code == enums.STATUS_NOT_FOUND.value
163+
assert response.get_body() == enums.NOT_FOUND.value.encode()
164+
165+
166+
def test__update_projects_azure_endpoint__returns_a_status_code_400__when_recive_an_incorrect_body(
167+
):
168+
project_body = Faker().pydict(5, True, str)
169+
req = func.HttpRequest(
170+
method="PUT",
171+
body=json.dumps(project_body).encode("utf-8"),
172+
url=PROJECT_URL,
173+
route_params={"id": Faker().pyint()},
174+
)
175+
176+
response = azure_projects._update_project.update_project(req)
177+
178+
assert response.status_code == enums.STATUS_BAD_REQUEST.value
179+
assert response.get_body() == enums.INCORRECT_BODY.value.encode()
180+
181+
132182
def test__update_projects_azure_endpoint__returns_a_status_code_400__when_project_recive_invalid_id(
133183
):
134184
req = func.HttpRequest(
@@ -140,15 +190,15 @@ def test__update_projects_azure_endpoint__returns_a_status_code_400__when_projec
140190

141191
response = azure_projects._update_project.update_project(req)
142192

143-
assert response.status_code == 400
144-
assert response.get_body() == b'Invalid Format ID'
193+
assert response.status_code == enums.STATUS_BAD_REQUEST.value
194+
assert response.get_body() == enums.INVALID_ID.value.encode()
145195

146196

147197
def test__project_azure_endpoint__creates_an_project__when_project_has_all_attributes(
148198
test_db, project_factory, insert_customer, customer_factory
149199
):
150-
inserted_customer = insert_customer(customer_factory(), test_db)
151-
project_body = project_factory(customer_id=inserted_customer.id).__dict__
200+
insert_customer(customer_factory(), test_db)
201+
project_body = project_factory().__dict__
152202
body = json.dumps(project_body).encode("utf-8")
153203
req = func.HttpRequest(
154204
method='POST',
@@ -160,5 +210,45 @@ def test__project_azure_endpoint__creates_an_project__when_project_has_all_attri
160210
project_json_data = json.loads(response.get_body())
161211
project_body['id'] = project_json_data['id']
162212

163-
assert response.status_code == 201
213+
assert response.status_code == enums.STATUS_CREATED.value
164214
assert project_json_data == project_body
215+
216+
217+
def test__project_azure_endpoint__returns_a_status_code_400__when_project_does_not_all_attributes(
218+
test_db, project_factory, insert_customer, customer_factory
219+
):
220+
inserted_customer = insert_customer(customer_factory(), test_db)
221+
project_body = project_factory(customer_id=inserted_customer.id).__dict__
222+
project_body.pop('name')
223+
224+
body = json.dumps(project_body).encode("utf-8")
225+
req = func.HttpRequest(
226+
method='POST',
227+
body=body,
228+
url=PROJECT_URL,
229+
)
230+
231+
response = azure_projects._create_project.create_project(req)
232+
233+
assert response.status_code == enums.STATUS_BAD_REQUEST.value
234+
assert response.get_body() == json.dumps(['The name key is missing in the input data']).encode()
235+
236+
237+
def test__project_azure_endpoint__returns_a_status_code_500__when_project_recive_incorrect_type_data(
238+
project_factory, insert_customer, customer_factory, test_db
239+
):
240+
insert_customer(customer_factory(), test_db)
241+
project_body = project_factory(technologies=Faker().pylist(2, True, str)).__dict__
242+
243+
body = json.dumps(project_body).encode("utf-8")
244+
print(project_body)
245+
req = func.HttpRequest(
246+
method='POST',
247+
body=body,
248+
url=PROJECT_URL,
249+
)
250+
251+
response = azure_projects._create_project.create_project(req)
252+
253+
assert response.status_code == enums.INTERNAL_SERVER_ERROR.value
254+
assert response.get_body() == enums.NOT_CREATED.value.encode()

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66

77
from ... import _domain
88
from ... import _infrastructure
9-
from time_tracker._infrastructure import DB
9+
from time_tracker._infrastructure import DB as database
1010
from time_tracker.utils.enums import ResponseEnums as enums
1111

1212

1313
def create_project(req: func.HttpRequest) -> func.HttpResponse:
14-
database = DB()
15-
project_dao = _infrastructure.ProjectsSQLDao(database)
14+
15+
project_dao = _infrastructure.ProjectsSQLDao(database())
1616
project_service = _domain.ProjectService(project_dao)
1717
use_case = _domain._use_cases.CreateProjectUseCase(project_service)
1818

@@ -37,7 +37,7 @@ def create_project(req: func.HttpRequest) -> func.HttpResponse:
3737
created_project = use_case.create_project(project_to_create)
3838

3939
status_code, response = [
40-
enums.INTERNAL_SERVER_ERROR.value, json.dumps({'error': f'project {enums.NOT_CREATED.value}'})
40+
enums.INTERNAL_SERVER_ERROR.value, enums.NOT_CREATED.value.encode()
4141
] if not created_project else [enums.STATUS_CREATED.value, json.dumps(created_project.__dict__)]
4242

4343
return func.HttpResponse(

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44

55
from ... import _domain
66
from ... import _infrastructure
7-
from time_tracker._infrastructure import DB
7+
from time_tracker._infrastructure import DB as database
88
from time_tracker.utils.enums import ResponseEnums as enums
99

1010

1111
def delete_project(req: func.HttpRequest) -> func.HttpResponse:
12-
project_dao = _infrastructure.ProjectsSQLDao(DB())
12+
project_dao = _infrastructure.ProjectsSQLDao(database())
1313
project_service = _domain.ProjectService(project_dao)
1414
use_case = _domain._use_cases.DeleteProjectUseCase(project_service)
1515

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

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

66
from ... import _domain
77
from ... import _infrastructure
8-
from time_tracker._infrastructure import DB
8+
from time_tracker._infrastructure import DB as database
99
from time_tracker.utils.enums import ResponseEnums as enums
1010

1111

1212
def get_projects(req: func.HttpRequest) -> func.HttpResponse:
13-
database = DB()
14-
project_dao = _infrastructure.ProjectsSQLDao(database)
13+
project_dao = _infrastructure.ProjectsSQLDao(database())
1514
project_service = _domain.ProjectService(project_dao)
1615

1716
project_id = req.route_params.get("id")

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55

66
from ... import _domain
77
from ... import _infrastructure
8-
from time_tracker._infrastructure import DB
8+
from time_tracker._infrastructure import DB as database
99
from time_tracker.utils.enums import ResponseEnums as enums
1010

1111

1212
def update_project(req: func.HttpRequest) -> func.HttpResponse:
13-
database = DB()
14-
project_dao = _infrastructure.ProjectsSQLDao(database)
13+
project_dao = _infrastructure.ProjectsSQLDao(database())
1514
project_service = _domain.ProjectService(project_dao)
1615
use_case = _domain._use_cases.UpdateProjectUseCase(project_service)
1716

@@ -21,7 +20,7 @@ def update_project(req: func.HttpRequest) -> func.HttpResponse:
2120

2221
if not _validate_project(project_data):
2322
status_code = enums.STATUS_BAD_REQUEST.value
24-
response = bytes(f"{enums.INCORRECT_BODY.value} project")
23+
response = enums.INCORRECT_BODY.value.encode()
2524

2625
else:
2726
updated_project = use_case.update_project(project_id, project_data)
@@ -41,6 +40,12 @@ def update_project(req: func.HttpRequest) -> func.HttpResponse:
4140
status_code=enums.STATUS_BAD_REQUEST.value,
4241
mimetype=enums.MIME_TYPE.value,
4342
)
43+
except Exception as error:
44+
return func.HttpResponse(
45+
body=str(error).encode(),
46+
status_code=enums.STATUS_BAD_REQUEST.value,
47+
mimetype=enums.MIME_TYPE.value,
48+
)
4449

4550

4651
def _validate_project(project_data: dict) -> bool:

V2/time_tracker/projects/_infrastructure/_data_persistence/_projects_dao.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,12 @@ def delete(self, id: int) -> domain.Project:
6565
return self.get_by_id(id)
6666

6767
def update(self, id: int, project_data: dict) -> domain.Project:
68-
query = self.project.update().where(self.project.c.id == id).values(project_data)
69-
self.db.get_session().execute(query)
70-
return self.get_by_id(id)
68+
try:
69+
query = self.project.update().where(self.project.c.id == id).values(project_data)
70+
self.db.get_session().execute(query)
71+
return self.get_by_id(id)
72+
except sq.exc.SQLAlchemyError as error:
73+
raise Exception(error.orig)
7174

7275
def __create_project_dto(self, project: dict) -> domain.Project:
7376
project = {key: project.get(key) for key in self.project_key}

0 commit comments

Comments
 (0)