Skip to content

Commit 486c997

Browse files
mandres2015ararcos
authored andcommitted
feat: TT-403 tests added
1 parent 93d8f16 commit 486c997

File tree

9 files changed

+77
-120
lines changed

9 files changed

+77
-120
lines changed

V2/delete_time_entry/function.json

Lines changed: 0 additions & 22 deletions
This file was deleted.

V2/tests/api/azure/activity_azure_endpoints_test.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import time_tracker.activities._application._activities as azure_activities
77

8+
89
ACTIVITY_URL = '/api/activities/'
910

1011

V2/tests/api/azure/time_entry_azure_endpoints_test.py

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,26 @@
1+
import pytest
12
import json
23

34
import azure.functions as func
45

56
import time_tracker.time_entries._application._time_entries as azure_time_entries
7+
from time_tracker._infrastructure import DB
8+
from time_tracker.time_entries import _domain as domain_time_entries
9+
from time_tracker.time_entries import _infrastructure as infrastructure_time_entries
10+
611

712
TIME_ENTRY_URL = "/api/time-entries/"
813

914

15+
@pytest.fixture(name='insert_time_entry')
16+
def _insert_time_entry() -> domain_time_entries.TimeEntry:
17+
def _new_time_entry(time_entry: domain_time_entries.TimeEntry, database: DB):
18+
dao = infrastructure_time_entries.TimeEntriesSQLDao(database)
19+
new_time_entry = dao.create(time_entry)
20+
return new_time_entry
21+
return _new_time_entry
22+
23+
1024
def test__time_entry_azure_endpoint__creates_an_time_entry__when_time_entry_has_all_attributes(
1125
test_db, time_entry_factory, activity_factory, insert_activity
1226
):
@@ -29,37 +43,42 @@ def test__time_entry_azure_endpoint__creates_an_time_entry__when_time_entry_has_
2943

3044

3145
def test__delete_time_entries_azure_endpoint__returns_an_time_entry_with_true_deleted__when_its_id_is_found(
32-
create_temp_time_entries,
46+
create_fake_database, time_entry_factory, insert_time_entry, insert_activity, activity_factory,
3347
):
34-
time_entries_json, tmp_directory = create_temp_time_entries
35-
time_entries.delete_time_entry.JSON_PATH = tmp_directory
48+
db = create_fake_database
49+
azure_time_entries._delete_time_entry.DATABASE = db
50+
inserted_activity = insert_activity(activity_factory(), db).__dict__
51+
time_entry_body = time_entry_factory(activity_id=inserted_activity["id"], technologies="[jira,sql]")
52+
inserted_time_entry = insert_time_entry(time_entry_body, db)
53+
3654
req = func.HttpRequest(
37-
method="DELETE",
55+
method='DELETE',
3856
body=None,
3957
url=TIME_ENTRY_URL,
40-
route_params={"id": time_entries_json[0]["id"]},
58+
route_params={"id": inserted_time_entry.id},
4159
)
4260

43-
response = time_entries.delete_time_entry(req)
61+
response = azure_time_entries._delete_time_entry.delete_time_entry(req)
4462
time_entry_json_data = json.loads(response.get_body().decode("utf-8"))
4563

4664
assert response.status_code == 200
47-
assert time_entry_json_data["deleted"] is True
65+
assert time_entry_json_data['deleted'] is True
4866

4967

5068
def test__delete_time_entries_azure_endpoint__returns_a_status_code_400__when_time_entry_recive_invalid_id(
51-
create_temp_time_entries,
69+
create_fake_database,
5270
):
53-
tmp_directory = create_temp_time_entries
54-
time_entries.delete_time_entry.JSON_PATH = tmp_directory
71+
db = create_fake_database
72+
azure_time_entries._delete_time_entry.DATABASE = db
73+
5574
req = func.HttpRequest(
5675
method="DELETE",
5776
body=None,
5877
url=TIME_ENTRY_URL,
5978
route_params={"id": "invalid id"},
6079
)
6180

62-
response = time_entries.delete_time_entry(req)
81+
response = azure_time_entries._delete_time_entry.delete_time_entry(req)
6382

6483
assert response.status_code == 400
6584
assert response.get_body() == b'Invalid Format ID'

V2/tests/integration/daos/time_entries_dao.test.py

Lines changed: 0 additions & 45 deletions
This file was deleted.

V2/tests/integration/daos/time_entries_dao_test.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,27 @@ def test__time_entry__returns_None__when_not_saves_correctly(
4646
inserted_time_entry = dao.create(time_entry_to_insert)
4747

4848
assert inserted_time_entry is None
49+
50+
51+
52+
def test_delete__returns_an_time_entry_with_true_deleted__when_an_time_entry_matching_its_id_is_found(
53+
create_fake_dao, time_entry_factory, insert_activity, activity_factory
54+
):
55+
dao = create_fake_dao
56+
inserted_activity = insert_activity(activity_factory(), dao.db)
57+
existent_time_entry = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]")
58+
inserted_time_entry = dao.create(existent_time_entry)
59+
60+
result = dao.delete(inserted_time_entry.id)
61+
62+
assert result.deleted is True
63+
64+
65+
def test_delete__returns_none__when_no_time_entry_matching_its_id_is_found(
66+
create_fake_dao,
67+
):
68+
dao = create_fake_dao
69+
70+
result = dao.delete(Faker().pyint())
71+
72+
assert result is None

V2/time_tracker/_infrastructure/_db.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from . import _config
44

5+
_TEST_DIALECT = "sqlite"
56

67
class DB():
78
config = _config.load_config()
@@ -17,4 +18,6 @@ def get_session(self):
1718
self.metadata.create_all(self.engine)
1819
if self.connection is None:
1920
self.connection = self.engine.connect()
21+
if self.engine.dialect.name == _TEST_DIALECT:
22+
self.connection.execute("pragma foreign_keys=ON")
2023
return self.connection

V2/time_tracker/time_entries/_application/_time_entries/_delete_time_entry.py

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

55
from ... import _domain
66
from ... import _infrastructure
7+
from time_tracker._infrastructure import DB
78

8-
_JSON_PATH = (
9-
'time_tracker/time_entries/_infrastructure/_data_persistence/time_entries_data.json'
10-
)
9+
DATABASE = DB()
1110

1211

1312
def delete_time_entry(req: func.HttpRequest) -> func.HttpResponse:
14-
time_entry_dao = _infrastructure.TimeEntriesJsonDao(_JSON_PATH)
13+
time_entry_dao = _infrastructure.TimeEntriesSQLDao(DATABASE)
1514
time_entry_service = _domain.TimeEntryService(time_entry_dao)
1615
use_case = _domain._use_cases.DeleteTimeEntryUseCase(time_entry_service)
1716

1817
try:
1918
time_entry_id = int(req.route_params.get("id"))
20-
2119
deleted_time_entry = use_case.delete_time_entry(time_entry_id)
2220
if not deleted_time_entry:
2321
return func.HttpResponse(
24-
body='Not found',
25-
status_code=404,
26-
mimetype="application/json"
22+
body="Not found",
23+
status_code=404,
24+
mimetype="application/json"
2725
)
2826

2927
return func.HttpResponse(
30-
body=json.dumps(deleted_time_entry.__dict__),
31-
status_code=200,
32-
mimetype="application/json"
28+
body=json.dumps(deleted_time_entry.__dict__, default=str),
29+
status_code=200,
30+
mimetype="application/json",
3331
)
3432

3533
except ValueError:
3634
return func.HttpResponse(
37-
body=b'Invalid Format ID',
35+
body=b"Invalid Format ID",
3836
status_code=400,
3937
mimetype="application/json"
4038
)

V2/time_tracker/time_entries/_infrastructure/_data_persistence/_time_entries_dao.py

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -49,32 +49,12 @@ def __create_time_entry_dto(self, time_entry: dict) -> domain.TimeEntry:
4949
return domain.TimeEntry(**time_entry)
5050

5151
def delete(self, time_entry_id: int) -> TimeEntry:
52-
time_entry = {
53-
time_entry.get('id'): time_entry
54-
for time_entry in self.__get_time_entries_from_file()
55-
}.get(int(time_entry_id))
56-
57-
if time_entry:
58-
time_entry_deleted = {**time_entry, 'deleted': True}
59-
60-
time_entries_updated = list(
61-
map(
62-
lambda time_entry: time_entry
63-
if time_entry.get('id') != time_entry_id
64-
else time_entry_deleted,
65-
self.__get_time_entries_from_file(),
66-
)
67-
)
68-
69-
try:
70-
file = open(self.json_data_file_path, 'w')
71-
json.dump(time_entries_updated, file)
72-
file.close()
73-
74-
return self.__create_time_entry_dto(time_entry_deleted)
75-
76-
except FileNotFoundError:
77-
return None
78-
79-
else:
80-
return None
52+
query = (
53+
self.time_entry.update()
54+
.where(self.time_entry.c.id == time_entry_id)
55+
.values({"deleted": True})
56+
)
57+
self.db.get_session().execute(query)
58+
query_deleted_time_entry = sql.select(self.time_entry).where(self.time_entry.c.id == time_entry_id)
59+
time_entry = self.db.get_session().execute(query_deleted_time_entry).one_or_none()
60+
return self.__create_time_entry_dto(dict(time_entry)) if time_entry else None

V2/time_tracker/time_entries/_infrastructure/_data_persistence/time_entries_data.json

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)