Skip to content

Commit c729e03

Browse files
committed
test: TT-404 get time entries
1 parent 6346bec commit c729e03

File tree

13 files changed

+254
-155
lines changed

13 files changed

+254
-155
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.

V2/tests/conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# flake8: noqa
2-
from fixtures import _activity_factory, _create_fake_dao, _create_fake_database
3-
from tests.api.api_fixtures import create_temp_activities
2+
from fixtures import _activity_factory, _create_fake_database, _time_entry_factory,_insert_activity
3+
#from tests.api.api_fixtures import create_temp_activities
44
from tests.api.api_fixtures import create_temp_time_entries

V2/tests/fixtures.py

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
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.activities._infrastructure as infrastructure_activities
6+
import time_tracker.time_entries._domain as domain_time_entries
57
from time_tracker._infrastructure import DB
6-
from faker import Faker
78

89

910
@pytest.fixture(name='activity_factory')
10-
def _activity_factory() -> domain.Activity:
11+
def _activity_factory() -> domain_activities.Activity:
1112
def _make_activity(
1213
name: str = Faker().name(), description: str = Faker().sentence(), deleted: bool = False, status: int = 1
1314
):
14-
activity = domain.Activity(
15+
activity = domain_activities.Activity(
1516
id=None,
1617
name=name,
1718
description=description,
@@ -22,14 +23,47 @@ def _make_activity(
2223
return _make_activity
2324

2425

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-
3226
@pytest.fixture(name='create_fake_database')
33-
def _create_fake_database() -> domain.ActivitiesDao:
27+
def _create_fake_database() -> DB:
3428
db_fake = DB('sqlite:///:memory:')
3529
return db_fake
30+
31+
32+
@pytest.fixture(name='time_entry_factory')
33+
def _time_entry_factory() -> domain_time_entries.TimeEntry:
34+
def _make_time_entry(
35+
id=Faker().random_int(),
36+
start_date=str(Faker().date_time()),
37+
owner_id=Faker().random_int(),
38+
description=Faker().sentence(),
39+
activity_id=Faker().random_int(),
40+
uri=Faker().domain_name(),
41+
technologies=["jira", "git"],
42+
end_date=str(Faker().date_time()),
43+
deleted=False,
44+
timezone_offset="300",
45+
project_id=Faker().random_int(),
46+
):
47+
time_entry = domain_time_entries.TimeEntry(
48+
id=id,
49+
start_date=start_date,
50+
owner_id=owner_id,
51+
description=description,
52+
activity_id=activity_id,
53+
uri=uri,
54+
technologies=technologies,
55+
end_date=end_date,
56+
deleted=deleted,
57+
timezone_offset=timezone_offset,
58+
project_id=project_id,
59+
)
60+
return time_entry
61+
return _make_time_entry
62+
63+
@pytest.fixture(name='insert_activity')
64+
def _insert_activity() -> dict:
65+
def _new_activity(activity: domain_activities.Activity, database: DB):
66+
dao = infrastructure_activities.ActivitiesSQLDao(database)
67+
new_activity = dao.create(activity)
68+
return new_activity
69+
return _new_activity
Lines changed: 128 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1-
from time_tracker.time_entries._infrastructure import TimeEntriesJsonDao
2-
from time_tracker.time_entries._domain import TimeEntry
3-
from faker import Faker
41
import json
52
import pytest
63
import typing
74
import random
85

6+
from faker import Faker
7+
8+
import time_tracker.activities._domain as domain
9+
import time_tracker.activities._infrastructure as infrastructure
10+
from time_tracker._infrastructure import DB
11+
12+
from time_tracker.time_entries._infrastructure import TimeEntriesSQLDao
13+
from time_tracker.time_entries._domain import TimeEntry,TimeEntriesDao
14+
915
fake_time_entries = [
1016
{
1117
"id": Faker().pyint(),
@@ -21,60 +27,142 @@
2127
"project_id": Faker().uuid4(),
2228
}
2329
]
30+
# @pytest.fixture(name='insert_activity')
31+
# def _insert_activity() -> domain.Activity:
32+
# def _new_activity(activity: domain.Activity, dao: domain.ActivitiesDao):
33+
# new_activity = dao.create(activity)
34+
# return new_activity
35+
# return _new_activity
2436

2537

26-
@pytest.fixture(name="create_fake_time_entries")
27-
def _create_fake_time_entries(mocker) -> typing.List[TimeEntry]:
28-
def _creator(time_entries):
29-
read_data = json.dumps(time_entries)
30-
mocker.patch("builtins.open", mocker.mock_open(read_data=read_data))
31-
return [TimeEntry(**time_entry) for time_entry in time_entries]
3238

33-
return _creator
39+
@pytest.fixture(name='insert_time_entry')
40+
def _insert_time_entry() -> TimeEntry:
41+
def _new_time_entry(time_entry: TimeEntry, dao: TimeEntriesSQLDao):
42+
_new_time_entry = dao.create(time_entry)
43+
return _new_time_entry
44+
return _new_time_entry
3445

46+
@pytest.fixture(name='create_fake_dao')
47+
def _create_fake_dao() -> TimeEntriesSQLDao:
48+
db_fake = DB('sqlite:///:memory:')
49+
dao = TimeEntriesSQLDao(db_fake)
50+
return dao
3551

36-
def test_get_by_id__returns_an_time_entry_dto__when_found_one_time_entry_that_matches_its_id(
37-
create_fake_time_entries,
38-
):
39-
print(fake_time_entries)
40-
time_entries_json_dao = TimeEntriesJsonDao(Faker().file_path())
41-
time_entries = create_fake_time_entries(fake_time_entries)
42-
time_entries_dto = time_entries.pop()
4352

44-
result = time_entries_json_dao.get_by_id(time_entries_dto.id)
53+
@pytest.fixture(name='clean_database', autouse=True)
54+
def _clean_database():
55+
yield
56+
db_fake = DB('sqlite:///:memory:')
57+
dao = infrastructure.ActivitiesSQLDao(db_fake)
58+
query = dao.activity.delete()
59+
dao.db.get_session().execute(query)
60+
4561

46-
assert result == time_entries_dto
4762

63+
# @pytest.fixture(name="create_fake_time_entries")
64+
# def _create_fake_time_entries(mocker) -> typing.List[TimeEntry]:
65+
# def _creator(time_entries):
66+
# read_data = json.dumps(time_entries)
67+
# mocker.patch("builtins.open", mocker.mock_open(read_data=read_data))
68+
# return [TimeEntry(**time_entry) for time_entry in time_entries]
4869

49-
def test__get_by_id__returns_none__when_no_time_entry_matches_its_id(
50-
create_fake_time_entries,
70+
# return _creator
71+
72+
73+
def test__get_all__returns_a_list_of_time_entries_dto_objects__when_one_or_more_time_entries_are_found_in_sql_database(
74+
create_fake_dao, time_entry_factory, insert_time_entry,insert_activity, activity_factory
5175
):
52-
time_entries_json_dao = TimeEntriesJsonDao(Faker().file_path())
53-
create_fake_time_entries([])
76+
dao=create_fake_dao
77+
inserted_activity = insert_activity(activity_factory(),dao.db)
78+
print("================")
79+
print(activity_factory())
80+
print(inserted_activity)
81+
existent_time_entries = [time_entry_factory(activity_id=inserted_activity.id)]
82+
inserted_time_entries = [insert_time_entry(existent_time_entries[0], dao)]
83+
time_entry= dao.get_all()
84+
85+
assert isinstance(time_entry, typing.List)
86+
assert time_entry == inserted_time_entries
5487

55-
result = time_entries_json_dao.get_by_id(Faker().uuid4())
88+
# def test__get_by_id__returns_none__when_no_time_entry_matches_its_id(
89+
# create_fake_time_entries,
90+
# ):
91+
# time_entries_json_dao = TimeEntriesJsonDao(Faker().file_path())
92+
# create_fake_time_entries([])
5693

57-
assert result is None
94+
# result = time_entries_json_dao.get_by_id(Faker().uuid4())
5895

96+
# assert result is None
5997

60-
def test__get_all__returns_a_list_of_time_entry_dto_objects__when_one_or_more_time_entries_are_found(
61-
create_fake_time_entries,
62-
):
63-
time_entries_json_dao = TimeEntriesJsonDao(Faker().file_path())
64-
number_of_time_entries = 3
65-
time_entries = create_fake_time_entries(fake_time_entries * number_of_time_entries)
6698

67-
result = time_entries_json_dao.get_all()
99+
# def test__get_all__returns_a_list_of_time_entry_dto_objects__when_one_or_more_time_entries_are_found(
100+
# create_fake_time_entries,
101+
# ):
102+
# time_entries_json_dao = TimeEntriesJsonDao(Faker().file_path())
103+
# number_of_time_entries = 3
104+
# time_entries = create_fake_time_entries(fake_time_entries * number_of_time_entries)
68105

69-
assert result == time_entries
106+
# result = time_entries_json_dao.get_all()
70107

108+
# assert result == time_entries
109+
110+
111+
# def test_get_all__returns_an_empty_list__when_doesnt_found_any_time_entries(
112+
# create_fake_time_entries,
113+
# ):
114+
# time_entries_json_dao = TimeEntriesJsonDao(Faker().file_path())
115+
# time_entries = create_fake_time_entries([])
116+
117+
# result = time_entries_json_dao.get_all()
118+
119+
# assert result == time_entries
120+
121+
# def test__get_all__returns_a_list_of_activity_dto_objects__when_one_or_more_activities_are_found_with_sql_database(
122+
# create_fake_dao, activity_factory, insert_activity
123+
# ):
124+
# dao = create_fake_dao
125+
# existent_activities = [activity_factory(), activity_factory()]
126+
# inserted_activities = [
127+
# insert_activity(existent_activities[0], dao),
128+
# insert_activity(existent_activities[1], dao)
129+
# ]
130+
131+
# activities = dao.get_all()
132+
133+
# assert isinstance(activities, typing.List)
134+
# assert activities == inserted_activities
135+
136+
137+
# def test_get_by_id__returns_an_activity_dto__when_found_one_activity_that_matches_its_id_with_sql_database(
138+
# create_fake_dao, activity_factory, insert_activity
139+
# ):
140+
# dao = create_fake_dao
141+
# existent_activity = activity_factory()
142+
# inserted_activity = insert_activity(existent_activity, dao)
143+
144+
# activity = dao.get_by_id(inserted_activity.id)
145+
146+
# assert isinstance(activity, domain.Activity)
147+
# assert activity.id == inserted_activity.id
148+
# assert activity == inserted_activity
149+
150+
151+
# def test__get_by_id__returns_none__when_no_activity_matches_its_id_with_sql_database(
152+
# create_fake_dao, activity_factory
153+
# ):
154+
# dao = create_fake_dao
155+
# existent_activity = activity_factory()
156+
157+
# activity = dao.get_by_id(existent_activity.id)
158+
159+
# assert activity is None
71160

72-
def test_get_all__returns_an_empty_list__when_doesnt_found_any_time_entries(
73-
create_fake_time_entries,
74-
):
75-
time_entries_json_dao = TimeEntriesJsonDao(Faker().file_path())
76-
time_entries = create_fake_time_entries([])
77161

78-
result = time_entries_json_dao.get_all()
162+
# def test_get_all__returns_an_empty_list__when_doesnt_found_any_activities_with_sql_database(
163+
# create_fake_dao
164+
# ):
165+
# activities = create_fake_dao.get_all()
79166

80-
assert result == time_entries
167+
# assert isinstance(activities, typing.List)
168+
# assert activities == []

V2/time_tracker/activities/_infrastructure/_data_persistence/_activities_sql_dao.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def get_all(self) -> typing.List[domain.Activity]:
4141

4242
def create(self, activity_data: domain.Activity) -> domain.Activity:
4343
new_activity = activity_data.__dict__
44-
new_activity.pop('id', None)
44+
#new_activity.pop('id', None)
4545
new_activity.update({"status": 1, "deleted": False})
4646

4747
query = self.activity.insert().values(new_activity).return_defaults()

0 commit comments

Comments
 (0)