Skip to content

Commit 41ae866

Browse files
committed
fix: implementation of the database connection
1 parent 34107bc commit 41ae866

File tree

18 files changed

+159
-245
lines changed

18 files changed

+159
-245
lines changed

V2/create_activity/function.json

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

V2/delete_activity/function.json

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

V2/get_activities/function.json

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,43 @@
1+
import pytest
12
import json
23

34
import azure.functions as func
45

5-
from time_tracker.time_entries._application import _time_entries as time_entries
6+
import time_tracker.time_entries._application._time_entries as azure_time_entries
7+
from time_tracker._infrastructure import DB
8+
from time_tracker.activities import _domain as domain_activities
9+
from time_tracker.activities import _infrastructure as infrastructure_activities
610

711
TIME_ENTRY_URL = "/api/time-entries/"
812

913

14+
@pytest.fixture(name='insert_activity')
15+
def _insert_activity() -> dict:
16+
def _new_activity(activity: domain_activities.Activity, database: DB):
17+
dao = infrastructure_activities.ActivitiesSQLDao(database)
18+
new_activity = dao.create(activity)
19+
return new_activity.__dict__
20+
return _new_activity
21+
22+
1023
def test__time_entry_azure_endpoint__creates_an_time_entry__when_time_entry_has_all_attributes(
11-
create_temp_time_entries, time_entry_factory
24+
create_fake_database, time_entry_factory, activity_factory, insert_activity
1225
):
13-
time_entries_json, tmp_directory = create_temp_time_entries
14-
time_entries._create_time_entry._JSON_PATH = tmp_directory
26+
db = create_fake_database
27+
inserted_activity = insert_activity(activity_factory(), db)
28+
time_entry_body = time_entry_factory(activity_id=inserted_activity["id"], technologies="[jira,sql]").__dict__
1529

16-
time_entry_body = time_entry_factory(None).__dict__
30+
azure_time_entries._create_time_entry._DATABASE = db
1731
body = json.dumps(time_entry_body).encode("utf-8")
1832
req = func.HttpRequest(
19-
method="POST",
20-
body=body,
21-
url=TIME_ENTRY_URL,
33+
method='POST',
34+
body=body,
35+
url=TIME_ENTRY_URL,
2236
)
2337

24-
response = time_entries.create_time_entry(req)
25-
time_entry_json_data = response.get_body()
38+
response = azure_time_entries._create_time_entry.create_time_entry(req)
39+
time_entry_json_data = json.loads(response.get_body())
40+
time_entry_body['id'] = time_entry_json_data['id']
41+
2642
assert response.status_code == 201
27-
assert time_entry_json_data == body
43+
assert time_entry_json_data == time_entry_body

V2/tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# flake8: noqa
2-
from fixtures import _activity_factory, _create_fake_dao, _create_fake_database
2+
from fixtures import _activity_factory, _create_fake_database
33
from fixtures import _time_entry_factory

V2/tests/fixtures.py

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import pytest
2+
from faker import Faker
23

3-
import time_tracker.activities._domain as domain
4-
import time_tracker.activities._infrastructure as infrastructure
4+
import time_tracker.activities._domain as domain_activities
5+
import time_tracker.time_entries._domain as domain_time_entries
56
from time_tracker._infrastructure import DB
6-
from faker import Faker
77

88

99
@pytest.fixture(name='activity_factory')
10-
def _activity_factory() -> domain.Activity:
10+
def _activity_factory() -> domain_activities.Activity:
1111
def _make_activity(
1212
name: str = Faker().name(), description: str = Faker().sentence(), deleted: bool = False, status: int = 1
1313
):
14-
activity = domain.Activity(
14+
activity = domain_activities.Activity(
1515
id=None,
1616
name=name,
1717
description=description,
@@ -22,54 +22,28 @@ def _make_activity(
2222
return _make_activity
2323

2424

25-
@pytest.fixture(name='create_fake_dao')
26-
def _create_fake_dao() -> domain.ActivitiesDao:
27-
db_fake = DB('sqlite:///:memory:')
28-
dao = infrastructure.ActivitiesSQLDao(db_fake)
29-
return dao
30-
31-
3225
@pytest.fixture(name='create_fake_database')
33-
def _create_fake_database() -> domain.ActivitiesDao:
26+
def _create_fake_database() -> DB:
3427
db_fake = DB('sqlite:///:memory:')
3528
return db_fake
3629

37-
@pytest.fixture
38-
def create_temp_time_entries(tmpdir_factory):
39-
temporary_directory = tmpdir_factory.mktemp("tmp")
40-
json_file = temporary_directory.join("time_entries.json")
41-
time_entries = [
42-
{
43-
"id": Faker().random_int(),
44-
"start_date": Faker().date(),
45-
"owner_id": Faker().random_int(),
46-
"description": Faker().sentence(),
47-
"activity_id": Faker().random_int(),
48-
"uri": Faker().domain_name(),
49-
"technologies": ["jira", "git"],
50-
"end_date": Faker().date(),
51-
"deleted": Faker().random_int(),
52-
"timezone_offset": "300",
53-
"project_id": Faker().random_int(),
54-
}
55-
]
5630

5731
@pytest.fixture(name='time_entry_factory')
58-
def _time_entry_factory() -> TimeEntry:
32+
def _time_entry_factory() -> domain_time_entries.TimeEntry:
5933
def _make_time_entry(
6034
id=Faker().random_int(),
61-
start_date=Faker().date(),
35+
start_date=str(Faker().date_time()),
6236
owner_id=Faker().random_int(),
6337
description=Faker().sentence(),
6438
activity_id=Faker().random_int(),
6539
uri=Faker().domain_name(),
6640
technologies=["jira", "git"],
67-
end_date=Faker().date(),
41+
end_date=str(Faker().date_time()),
6842
deleted=False,
6943
timezone_offset="300",
7044
project_id=Faker().random_int(),
7145
):
72-
time_entry = TimeEntry(
46+
time_entry = domain_time_entries.TimeEntry(
7347
id=id,
7448
start_date=start_date,
7549
owner_id=owner_id,

V2/tests/integration/daos/activities_sql_dao_test.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ def _new_activity(activity: domain.Activity, dao: domain.ActivitiesDao):
1515
return _new_activity
1616

1717

18+
@pytest.fixture(name='create_fake_dao')
19+
def _create_fake_dao() -> domain.ActivitiesDao:
20+
db_fake = DB('sqlite:///:memory:')
21+
dao = infrastructure.ActivitiesSQLDao(db_fake)
22+
return dao
23+
24+
1825
@pytest.fixture(name='clean_database', autouse=True)
1926
def _clean_database():
2027
yield

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

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import pytest
2+
3+
4+
import time_tracker.time_entries._domain as domain
5+
import time_tracker.activities._domain as domain_activities
6+
import time_tracker.time_entries._infrastructure as infrastructure
7+
import time_tracker.activities._infrastructure as infrastructure_activities
8+
from time_tracker._infrastructure import DB
9+
10+
11+
@pytest.fixture(name='insert_activity')
12+
def _insert_activity() -> domain_activities.Activity:
13+
def _new_activity(activity: domain_activities.Activity, database: DB):
14+
dao = infrastructure_activities.ActivitiesSQLDao(database)
15+
new_activity = dao.create(activity)
16+
return new_activity
17+
return _new_activity
18+
19+
20+
@pytest.fixture(name='create_fake_dao')
21+
def _create_fake_dao() -> domain.TimeEntriesDao:
22+
db_fake = DB('sqlite:///:memory:')
23+
dao = infrastructure.TimeEntriesJsonDao(db_fake)
24+
return dao
25+
26+
27+
@pytest.fixture(name='clean_database', autouse=True)
28+
def _clean_database():
29+
yield
30+
db_fake = DB('sqlite:///:memory:')
31+
dao = infrastructure.TimeEntriesJsonDao(db_fake)
32+
query = dao.time_entry.delete()
33+
dao.db.get_session().execute(query)
34+
35+
36+
def test__time_entry__returns_a_time_entry_dto__when_saves_correctly_with_sql_database(
37+
time_entry_factory, create_fake_dao, insert_activity, activity_factory
38+
):
39+
dao = create_fake_dao
40+
inserted_activity = insert_activity(activity_factory(), dao.db)
41+
42+
existent_time_entry = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]")
43+
44+
inserted_time_entry = dao.create(existent_time_entry)
45+
46+
assert isinstance(inserted_time_entry, domain.TimeEntry)
47+
assert inserted_time_entry == existent_time_entry
48+
49+
50+
def test__time_entry__returns_None__when_not_saves_correctly(
51+
time_entry_factory, create_fake_dao,
52+
):
53+
dao = create_fake_dao
54+
existent_time_entry = time_entry_factory(activity_id=1203, technologies="[jira,sql]")
55+
56+
inserted_time_entry = dao.create(existent_time_entry)
57+
58+
assert inserted_time_entry is None
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
from faker import Faker
2-
31
from time_tracker.time_entries._domain import TimeEntryService
42

53

6-
def test__create_time_entries__uses_the_time_entry_dao__to_create_an_time_entry(mocker):
4+
def test__create_time_entries__uses_the_time_entry_dao__to_create_an_time_entry(mocker, time_entry_factory):
75
expected_time_entry = mocker.Mock()
86
time_entry_dao = mocker.Mock(
97
create=mocker.Mock(return_value=expected_time_entry)
108
)
119
time_entry_service = TimeEntryService(time_entry_dao)
1210

13-
actual_time_entry = time_entry_service.create(Faker().pydict())
11+
actual_time_entry = time_entry_service.create(time_entry_factory())
1412

1513
assert time_entry_dao.create.called
1614
assert expected_time_entry == actual_time_entry

0 commit comments

Comments
 (0)