Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
feat: TT-403 tests added
  • Loading branch information
mandres2015 authored and ararcos committed Nov 19, 2021
commit 486c997c1e1aac62e8b76f0f01133fbf6b99d9aa
22 changes: 0 additions & 22 deletions V2/delete_time_entry/function.json

This file was deleted.

1 change: 1 addition & 0 deletions V2/tests/api/azure/activity_azure_endpoints_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import time_tracker.activities._application._activities as azure_activities


ACTIVITY_URL = '/api/activities/'


Expand Down
41 changes: 30 additions & 11 deletions V2/tests/api/azure/time_entry_azure_endpoints_test.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
import pytest
import json

import azure.functions as func

import time_tracker.time_entries._application._time_entries as azure_time_entries
from time_tracker._infrastructure import DB
from time_tracker.time_entries import _domain as domain_time_entries
from time_tracker.time_entries import _infrastructure as infrastructure_time_entries


TIME_ENTRY_URL = "/api/time-entries/"


@pytest.fixture(name='insert_time_entry')
def _insert_time_entry() -> domain_time_entries.TimeEntry:
def _new_time_entry(time_entry: domain_time_entries.TimeEntry, database: DB):
dao = infrastructure_time_entries.TimeEntriesSQLDao(database)
new_time_entry = dao.create(time_entry)
return new_time_entry
return _new_time_entry


def test__time_entry_azure_endpoint__creates_an_time_entry__when_time_entry_has_all_attributes(
test_db, time_entry_factory, activity_factory, insert_activity
):
Expand All @@ -29,37 +43,42 @@ def test__time_entry_azure_endpoint__creates_an_time_entry__when_time_entry_has_


def test__delete_time_entries_azure_endpoint__returns_an_time_entry_with_true_deleted__when_its_id_is_found(
create_temp_time_entries,
create_fake_database, time_entry_factory, insert_time_entry, insert_activity, activity_factory,
):
time_entries_json, tmp_directory = create_temp_time_entries
time_entries.delete_time_entry.JSON_PATH = tmp_directory
db = create_fake_database
azure_time_entries._delete_time_entry.DATABASE = db
inserted_activity = insert_activity(activity_factory(), db).__dict__
time_entry_body = time_entry_factory(activity_id=inserted_activity["id"], technologies="[jira,sql]")
inserted_time_entry = insert_time_entry(time_entry_body, db)

req = func.HttpRequest(
method="DELETE",
method='DELETE',
body=None,
url=TIME_ENTRY_URL,
route_params={"id": time_entries_json[0]["id"]},
route_params={"id": inserted_time_entry.id},
)

response = time_entries.delete_time_entry(req)
response = azure_time_entries._delete_time_entry.delete_time_entry(req)
time_entry_json_data = json.loads(response.get_body().decode("utf-8"))

assert response.status_code == 200
assert time_entry_json_data["deleted"] is True
assert time_entry_json_data['deleted'] is True


def test__delete_time_entries_azure_endpoint__returns_a_status_code_400__when_time_entry_recive_invalid_id(
create_temp_time_entries,
create_fake_database,
):
tmp_directory = create_temp_time_entries
time_entries.delete_time_entry.JSON_PATH = tmp_directory
db = create_fake_database
azure_time_entries._delete_time_entry.DATABASE = db

req = func.HttpRequest(
method="DELETE",
body=None,
url=TIME_ENTRY_URL,
route_params={"id": "invalid id"},
)

response = time_entries.delete_time_entry(req)
response = azure_time_entries._delete_time_entry.delete_time_entry(req)

assert response.status_code == 400
assert response.get_body() == b'Invalid Format ID'
45 changes: 0 additions & 45 deletions V2/tests/integration/daos/time_entries_dao.test.py

This file was deleted.

24 changes: 24 additions & 0 deletions V2/tests/integration/daos/time_entries_dao_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,27 @@ def test__time_entry__returns_None__when_not_saves_correctly(
inserted_time_entry = dao.create(time_entry_to_insert)

assert inserted_time_entry is None



def test_delete__returns_an_time_entry_with_true_deleted__when_an_time_entry_matching_its_id_is_found(
create_fake_dao, time_entry_factory, insert_activity, activity_factory
):
dao = create_fake_dao
inserted_activity = insert_activity(activity_factory(), dao.db)
existent_time_entry = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]")
inserted_time_entry = dao.create(existent_time_entry)

result = dao.delete(inserted_time_entry.id)

assert result.deleted is True


def test_delete__returns_none__when_no_time_entry_matching_its_id_is_found(
create_fake_dao,
):
dao = create_fake_dao

result = dao.delete(Faker().pyint())

assert result is None
3 changes: 3 additions & 0 deletions V2/time_tracker/_infrastructure/_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from . import _config

_TEST_DIALECT = "sqlite"

class DB():
config = _config.load_config()
Expand All @@ -17,4 +18,6 @@ def get_session(self):
self.metadata.create_all(self.engine)
if self.connection is None:
self.connection = self.engine.connect()
if self.engine.dialect.name == _TEST_DIALECT:
self.connection.execute("pragma foreign_keys=ON")
return self.connection
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,35 @@

from ... import _domain
from ... import _infrastructure
from time_tracker._infrastructure import DB

_JSON_PATH = (
'time_tracker/time_entries/_infrastructure/_data_persistence/time_entries_data.json'
)
DATABASE = DB()


def delete_time_entry(req: func.HttpRequest) -> func.HttpResponse:
time_entry_dao = _infrastructure.TimeEntriesJsonDao(_JSON_PATH)
time_entry_dao = _infrastructure.TimeEntriesSQLDao(DATABASE)
time_entry_service = _domain.TimeEntryService(time_entry_dao)
use_case = _domain._use_cases.DeleteTimeEntryUseCase(time_entry_service)

try:
time_entry_id = int(req.route_params.get("id"))

deleted_time_entry = use_case.delete_time_entry(time_entry_id)
if not deleted_time_entry:
return func.HttpResponse(
body='Not found',
status_code=404,
mimetype="application/json"
body="Not found",
status_code=404,
mimetype="application/json"
)

return func.HttpResponse(
body=json.dumps(deleted_time_entry.__dict__),
status_code=200,
mimetype="application/json"
body=json.dumps(deleted_time_entry.__dict__, default=str),
status_code=200,
mimetype="application/json",
)

except ValueError:
return func.HttpResponse(
body=b'Invalid Format ID',
body=b"Invalid Format ID",
status_code=400,
mimetype="application/json"
)
Original file line number Diff line number Diff line change
Expand Up @@ -49,32 +49,12 @@ def __create_time_entry_dto(self, time_entry: dict) -> domain.TimeEntry:
return domain.TimeEntry(**time_entry)

def delete(self, time_entry_id: int) -> TimeEntry:
time_entry = {
time_entry.get('id'): time_entry
for time_entry in self.__get_time_entries_from_file()
}.get(int(time_entry_id))

if time_entry:
time_entry_deleted = {**time_entry, 'deleted': True}

time_entries_updated = list(
map(
lambda time_entry: time_entry
if time_entry.get('id') != time_entry_id
else time_entry_deleted,
self.__get_time_entries_from_file(),
)
)

try:
file = open(self.json_data_file_path, 'w')
json.dump(time_entries_updated, file)
file.close()

return self.__create_time_entry_dto(time_entry_deleted)

except FileNotFoundError:
return None

else:
return None
query = (
self.time_entry.update()
.where(self.time_entry.c.id == time_entry_id)
.values({"deleted": True})
)
self.db.get_session().execute(query)
query_deleted_time_entry = sql.select(self.time_entry).where(self.time_entry.c.id == time_entry_id)
time_entry = self.db.get_session().execute(query_deleted_time_entry).one_or_none()
return self.__create_time_entry_dto(dict(time_entry)) if time_entry else None

This file was deleted.