diff --git a/V2/tests/api/azure/time_entry_azure_endpoints_test.py b/V2/tests/api/azure/time_entry_azure_endpoints_test.py index 49180287..21f7b1a3 100644 --- a/V2/tests/api/azure/time_entry_azure_endpoints_test.py +++ b/V2/tests/api/azure/time_entry_azure_endpoints_test.py @@ -1,6 +1,5 @@ import pytest import json -import pytest import azure.functions as func @@ -10,7 +9,7 @@ from time_tracker.time_entries import _infrastructure as infrastructure_time_entries -TIME_ENTRY_URL = "/api/time_entries/" +TIME_ENTRY_URL = "/api/time-entries/" @pytest.fixture(name='insert_time_entry') @@ -84,7 +83,7 @@ def test__time_entry_azure_endpoint__returns_all_time_entries( ): inserted_activity = insert_activity(activity_factory(), test_db) existent_time_entries = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]") - inserted_time_entries = insert_time_entry(existent_time_entries, test_db) + time_entries_to_insert = insert_time_entry(existent_time_entries, test_db).__dict__ req = func.HttpRequest(method="GET", body=None, url=TIME_ENTRY_URL) @@ -93,7 +92,7 @@ def test__time_entry_azure_endpoint__returns_all_time_entries( time_entry_list = json.loads(time_entries_json_data) assert response.status_code == 200 - assert time_entry_list.pop() == inserted_time_entries + assert time_entry_list.pop() == time_entries_to_insert def test__time_entry_azure_endpoint__returns_an_time_entry__when_time_entry_matches_its_id( @@ -101,20 +100,20 @@ def test__time_entry_azure_endpoint__returns_an_time_entry__when_time_entry_matc ): inserted_activity = insert_activity(activity_factory(), test_db) existent_time_entries = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]") - inserted_time_entries = insert_time_entry(existent_time_entries, test_db) + time_entries_to_insert = insert_time_entry(existent_time_entries, test_db).__dict__ req = func.HttpRequest( method="GET", body=None, url=TIME_ENTRY_URL, - route_params={"id": inserted_time_entries["id"]}, + route_params={"id": time_entries_to_insert["id"]}, ) response = azure_time_entries.get_time_entries(req) time_entry_json_data = response.get_body().decode("utf-8") assert response.status_code == 200 - assert time_entry_json_data == json.dumps(inserted_time_entries) + assert time_entry_json_data == json.dumps(time_entries_to_insert) def test__get_time_entries_azure_endpoint__returns_a_status_code_400__when_time_entry_recive_invalid_id( @@ -122,7 +121,7 @@ def test__get_time_entries_azure_endpoint__returns_a_status_code_400__when_time_ ): inserted_activity = insert_activity(activity_factory(), test_db) existent_time_entries = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]") - insert_time_entry(existent_time_entries, test_db) + insert_time_entry(existent_time_entries, test_db).__dict__ req = func.HttpRequest( method="GET", diff --git a/V2/tests/conftest.py b/V2/tests/conftest.py index 902357e6..ffceca7e 100644 --- a/V2/tests/conftest.py +++ b/V2/tests/conftest.py @@ -1,2 +1,2 @@ # flake8: noqa -from fixtures import _activity_factory, _test_db, _create_fake_dao, _time_entry_factory,_insert_activity +from fixtures import _activity_factory, _test_db, _time_entry_factory, _insert_activity diff --git a/V2/tests/fixtures.py b/V2/tests/fixtures.py index 9a9dc5c7..8568bdb6 100644 --- a/V2/tests/fixtures.py +++ b/V2/tests/fixtures.py @@ -1,21 +1,21 @@ import pytest from faker import Faker -import time_tracker.activities._domain as domain_activities -import time_tracker.activities._infrastructure as infrastructure_activities -import time_tracker.time_entries._domain as domain_time_entries +import time_tracker.activities._domain as activities_domain +import time_tracker.activities._infrastructure as activities_infrastructure +import time_tracker.time_entries._domain as time_entries_domain from time_tracker._infrastructure import DB @pytest.fixture(name='activity_factory') -def _activity_factory() -> domain_activities.Activity: +def _activity_factory() -> activities_domain.Activity: def _make_activity( name: str = Faker().name(), description: str = Faker().sentence(), deleted: bool = False, status: int = 1, ): - activity = domain_activities.Activity( + activity = activities_domain.Activity( id=None, name=name, description=description, @@ -34,15 +34,8 @@ def _test_db() -> DB: return db_fake -@pytest.fixture(name='create_fake_dao') -def _create_fake_dao() -> domain_activities.ActivitiesDao: - db_fake = DB('sqlite:///:memory:') - dao = infrastructure_activities.ActivitiesSQLDao(db_fake) - return dao - - @pytest.fixture(name='time_entry_factory') -def _time_entry_factory() -> domain_time_entries.TimeEntry: +def _time_entry_factory() -> time_entries_domain.TimeEntry: def _make_time_entry( id=Faker().random_int(), start_date=str(Faker().date_time()), @@ -56,7 +49,7 @@ def _make_time_entry( timezone_offset="300", project_id=Faker().random_int(), ): - time_entry = domain_time_entries.TimeEntry( + time_entry = time_entries_domain.TimeEntry( id=id, start_date=start_date, owner_id=owner_id, @@ -75,8 +68,8 @@ def _make_time_entry( @pytest.fixture(name='insert_activity') def _insert_activity() -> dict: - def _new_activity(activity: domain_activities.Activity, database: DB): - dao = infrastructure_activities.ActivitiesSQLDao(database) + def _new_activity(activity: activities_domain.Activity, database: DB): + dao = activities_infrastructure.ActivitiesSQLDao(database) new_activity = dao.create(activity) return new_activity return _new_activity diff --git a/V2/tests/integration/daos/time_entries_dao_test.py b/V2/tests/integration/daos/time_entries_dao_test.py index 901bce34..a8a26e1d 100644 --- a/V2/tests/integration/daos/time_entries_dao_test.py +++ b/V2/tests/integration/daos/time_entries_dao_test.py @@ -1,4 +1,6 @@ import pytest +import typing + from faker import Faker import time_tracker.time_entries._domain as domain @@ -69,3 +71,56 @@ def test_delete__returns_none__when_no_time_entry_matching_its_id_is_found( result = dao.delete(Faker().pyint()) assert result is None + + +def test__get_all__returns_a_list_of_time_entries_dto_objects__when_one_or_more_time_entries_are_found_in_sql_database( + test_db, create_fake_dao, time_entry_factory, insert_activity, activity_factory +): + + dao = create_fake_dao(test_db) + inserted_activity = insert_activity(activity_factory(), dao.db) + existent_time_entries = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]") + time_entries_to_insert = [dao.create(existent_time_entries)] + + time_entry = dao.get_all() + + assert isinstance(time_entry, typing.List) + assert time_entry == time_entries_to_insert + + +def test__get_all__returns_an_empty_list__when_doesnt_found_any_time_entries_in_sql_database( + test_db, create_fake_dao, insert_activity, activity_factory +): + dao = create_fake_dao(test_db) + insert_activity(activity_factory(), dao.db) + + time_entry = dao.get_all() + assert time_entry == [] + + +def test__get_by_id__returns_a_time_entry_dto__when_found_one_time_entry_that_match_id_with_sql_database( + test_db, create_fake_dao, time_entry_factory, insert_activity, activity_factory +): + dao = create_fake_dao(test_db) + inserted_activity = insert_activity(activity_factory(), dao.db) + existent_time_entries = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]") + time_entries_to_insert = dao.create(existent_time_entries) + + time_entry = dao.get_by_id(existent_time_entries.id) + + assert isinstance(time_entry, domain.TimeEntry) + assert time_entry.id == time_entries_to_insert.id + assert time_entry == time_entries_to_insert + + +def test__get_by_id__returns_none__when_no_time_entry_matches_by_id( + test_db, create_fake_dao, time_entry_factory, insert_activity, activity_factory +): + dao = create_fake_dao(test_db) + inserted_activity = insert_activity(activity_factory(), dao.db) + existent_time_entries = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]") + dao.create(existent_time_entries) + + time_entry = dao.get_by_id(Faker().pyint()) + + assert time_entry is None diff --git a/V2/tests/integration/daos/time_entries_json_dao_test.py b/V2/tests/integration/daos/time_entries_json_dao_test.py deleted file mode 100644 index 8feebcf4..00000000 --- a/V2/tests/integration/daos/time_entries_json_dao_test.py +++ /dev/null @@ -1,80 +0,0 @@ -import pytest -import typing - -from faker import Faker - -import time_tracker.activities._infrastructure as infrastructure_activities - -from time_tracker.time_entries._infrastructure import TimeEntriesSQLDao -from time_tracker.time_entries._domain import TimeEntry - -from time_tracker._infrastructure import DB - - -@pytest.fixture(name='create_time_enty_fake_dao') -def _create_fake_dao() -> TimeEntriesSQLDao: - db_fake = DB('sqlite:///:memory:') - dao = TimeEntriesSQLDao(db_fake) - return dao - - -@pytest.fixture(name='clean_database', autouse=True) -def _clean_database(): - yield - db_fake = DB('sqlite:///:memory:') - dao = infrastructure_activities.ActivitiesSQLDao(db_fake) - query = dao.activity.delete() - dao.db.get_session().execute(query) - - -def test__get_all__returns_a_list_of_time_entries_dto_objects__when_one_or_more_time_entries_are_found_in_sql_database( - create_time_enty_fake_dao, time_entry_factory, insert_activity, activity_factory -): - - dao = create_time_enty_fake_dao - inserted_activity = insert_activity(activity_factory(), dao.db) - existent_time_entries = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]") - inserted_time_entries = [dao.create(existent_time_entries)] - - time_entry = dao.get_all() - - assert isinstance(time_entry, typing.List) - assert time_entry == inserted_time_entries - - -def test__get_all__returns_an_empty_list__when_doesnt_found_any_time_entries_in_sql_database( - create_time_enty_fake_dao, insert_activity, activity_factory -): - dao = create_time_enty_fake_dao - insert_activity(activity_factory(), dao.db) - - time_entry = dao.get_all() - assert time_entry == [] - - -def test__get_by_id__returns_a_time_entry_dto__when_found_one_time_entry_that_match_id_with_sql_database( - create_time_enty_fake_dao, time_entry_factory, insert_activity, activity_factory -): - dao = create_time_enty_fake_dao - inserted_activity = insert_activity(activity_factory(), dao.db) - existent_time_entries = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]") - inserted_time_entries = dao.create(existent_time_entries) - - time_entry = dao.get_by_id(existent_time_entries.id) - - assert isinstance(time_entry, TimeEntry) - assert time_entry.id == inserted_time_entries.id - assert time_entry == inserted_time_entries - - -def test__get_by_id__returns_none__when_no_time_entry_matches_by_id( - create_time_enty_fake_dao, time_entry_factory, insert_activity, activity_factory -): - dao = create_time_enty_fake_dao - inserted_activity = insert_activity(activity_factory(), dao.db) - existent_time_entries = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]") - dao.create(existent_time_entries) - - time_entry = dao.get_by_id(Faker().pyint()) - - assert time_entry is None diff --git a/V2/time_tracker/_infrastructure/_db.py b/V2/time_tracker/_infrastructure/_db.py index 338c6b00..ebd750e6 100644 --- a/V2/time_tracker/_infrastructure/_db.py +++ b/V2/time_tracker/_infrastructure/_db.py @@ -2,8 +2,6 @@ from . import _config -_TEST_DIALECT = "sqlite" - class DB(): config = _config.load_config() @@ -19,6 +17,4 @@ 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 + return self.connection \ No newline at end of file diff --git a/V2/time_tracker/time_entries/_application/_time_entries/_get_time_entries.py b/V2/time_tracker/time_entries/_application/_time_entries/_get_time_entries.py index 954dc368..fbba42ae 100644 --- a/V2/time_tracker/time_entries/_application/_time_entries/_get_time_entries.py +++ b/V2/time_tracker/time_entries/_application/_time_entries/_get_time_entries.py @@ -1,10 +1,11 @@ +import json + +import azure.functions as func + from time_tracker.time_entries._infrastructure import TimeEntriesSQLDao from time_tracker.time_entries._domain import TimeEntryService, _use_cases from time_tracker._infrastructure import DB -import azure.functions as func -import json - def get_time_entries(req: func.HttpRequest) -> func.HttpResponse: diff --git a/V2/time_tracker/time_entries/_domain/_use_cases/_get_time_entry_use_case.py b/V2/time_tracker/time_entries/_domain/_use_cases/_get_time_entry_use_case.py index 9b7002f0..c7bd3f27 100644 --- a/V2/time_tracker/time_entries/_domain/_use_cases/_get_time_entry_use_case.py +++ b/V2/time_tracker/time_entries/_domain/_use_cases/_get_time_entry_use_case.py @@ -1,6 +1,7 @@ -from time_tracker.time_entries._domain import TimeEntryService, TimeEntry import typing +from time_tracker.time_entries._domain import TimeEntryService, TimeEntry + class GetTimeEntriesUseCase: def __init__(self, time_entry_service: TimeEntryService):