Skip to content

Commit 70d23f1

Browse files
committed
test: TT-414 add test to get latest projects
1 parent 6f2e96a commit 70d23f1

File tree

15 files changed

+115
-129
lines changed

15 files changed

+115
-129
lines changed

V2/serverless.yml

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -107,16 +107,6 @@ functions:
107107
route: time-entries/{id}
108108
authLevel: anonymous
109109

110-
get_latest_time_entry:
111-
handler: time_tracker/time_entries/interface.get_latest_entries
112-
events:
113-
- http: true
114-
x-azure-settings:
115-
methods:
116-
- GET
117-
route: time-entries/latest
118-
authLevel: anonymous
119-
120110
update_time_entry:
121111
handler: time_tracker/time_entries/interface.update_time_entry
122112
events:

V2/tests/api/azure/project_azure_endpoints_test.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,3 +232,40 @@ def test__project_azure_endpoint__returns_a_status_code_500__when_project_receiv
232232

233233
assert response.status_code == HTTPStatus.INTERNAL_SERVER_ERROR
234234
assert response.get_body() == b"could not be created"
235+
236+
237+
def test__get_latest_projects_azure_endpoint__returns_a_list_of_latest_projects__when_an_owner_id_match(
238+
insert_time_entry
239+
):
240+
inserted_time_entry = insert_time_entry().__dict__
241+
242+
req = func.HttpRequest(
243+
method='GET',
244+
body=None,
245+
url=PROJECT_URL+"latest/",
246+
params={"owner_id": inserted_time_entry["owner_id"]},
247+
)
248+
249+
response = azure_projects._get_latest_projects.get_latest_projects(req)
250+
projects_json_data = json.loads(response.get_body().decode("utf-8"))
251+
252+
assert response.status_code == HTTPStatus.OK
253+
assert inserted_time_entry["project_id"] == projects_json_data[0]["id"]
254+
255+
256+
def test__get_latest_projects_azure_endpoint__returns_an_empty_list__when_an_owner_id_not_match(
257+
insert_time_entry
258+
):
259+
insert_time_entry().__dict__
260+
261+
req = func.HttpRequest(
262+
method='GET',
263+
body=None,
264+
url=PROJECT_URL+"latest/",
265+
)
266+
267+
response = azure_projects._get_latest_projects.get_latest_projects(req)
268+
projects_json_data = json.loads(response.get_body().decode("utf-8"))
269+
270+
assert response.status_code == HTTPStatus.OK
271+
assert projects_json_data == []

V2/tests/api/azure/time_entry_azure_endpoints_test.py

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,11 @@ def test__delete_time_entries_azure_endpoint__returns_a_status_code_400__when_ti
8383

8484

8585
def test__time_entry_azure_endpoint__returns_all_time_entries(
86-
test_db, time_entry_factory, insert_time_entry, activity_factory, insert_activity
86+
test_db, time_entry_factory, insert_time_entry, activity_factory, insert_activity, insert_project
8787
):
88+
inserted_project = insert_project()
8889
inserted_activity = insert_activity(activity_factory(), test_db)
89-
time_entries_to_insert = time_entry_factory(activity_id=inserted_activity.id)
90+
time_entries_to_insert = time_entry_factory(activity_id=inserted_activity.id, project_id=inserted_project.id)
9091
inserted_time_entries = insert_time_entry(time_entries_to_insert, test_db).__dict__
9192

9293
req = func.HttpRequest(method="GET", body=None, url=TIME_ENTRY_URL)
@@ -100,10 +101,11 @@ def test__time_entry_azure_endpoint__returns_all_time_entries(
100101

101102

102103
def test__time_entry_azure_endpoint__returns_an_time_entry__when_time_entry_matches_its_id(
103-
test_db, time_entry_factory, insert_time_entry, activity_factory, insert_activity
104+
test_db, time_entry_factory, insert_time_entry, activity_factory, insert_activity, insert_project
104105
):
106+
inserted_project = insert_project()
105107
inserted_activity = insert_activity(activity_factory(), test_db)
106-
time_entries_to_insert = time_entry_factory(activity_id=inserted_activity.id)
108+
time_entries_to_insert = time_entry_factory(activity_id=inserted_activity.id, project_id=inserted_project.id)
107109
inserted_time_entries = insert_time_entry(time_entries_to_insert, test_db).__dict__
108110

109111
req = func.HttpRequest(
@@ -121,10 +123,11 @@ def test__time_entry_azure_endpoint__returns_an_time_entry__when_time_entry_matc
121123

122124

123125
def test__get_time_entries_azure_endpoint__returns_a_status_code_400__when_time_entry_recive_invalid_id(
124-
test_db, time_entry_factory, insert_time_entry, activity_factory, insert_activity
126+
test_db, time_entry_factory, insert_time_entry, activity_factory, insert_activity, insert_project
125127
):
128+
inserted_project = insert_project()
126129
inserted_activity = insert_activity(activity_factory(), test_db)
127-
time_entries_to_insert = time_entry_factory(activity_id=inserted_activity.id)
130+
time_entries_to_insert = time_entry_factory(activity_id=inserted_activity.id, project_id=inserted_project.id)
128131
insert_time_entry(time_entries_to_insert, test_db).__dict__
129132

130133
req = func.HttpRequest(
@@ -177,7 +180,7 @@ def test__get_latest_entries_azure_endpoint__returns_no_time_entries_found__when
177180
response = azure_time_entries._get_latest_entries.get_latest_entries(req)
178181

179182
assert response.status_code == 404
180-
assert response.get_body() == b'No time entries found'
183+
assert response.get_body() == b'Not found'
181184

182185

183186
def test__update_time_entry_azure_endpoint__returns_an_time_entry__when_found_an_time_entry_to_update(
@@ -253,27 +256,6 @@ def test__update_time_entries_azure_endpoint__returns_a_status_code_400__when_ti
253256
assert response.get_body() == b'Incorrect time entry body'
254257

255258

256-
def test__get_latest_entries_azure_endpoint__returns_a_list_of_latest_time_entries__when_an_owner_id_match(
257-
test_db, time_entry_factory, insert_time_entry, insert_activity, activity_factory,
258-
):
259-
inserted_activity = insert_activity(activity_factory(), test_db).__dict__
260-
time_entry_body = time_entry_factory(activity_id=inserted_activity["id"], technologies="[jira,sql]")
261-
inserted_time_entry = insert_time_entry(time_entry_body, test_db).__dict__
262-
263-
req = func.HttpRequest(
264-
method='GET',
265-
body=None,
266-
url=TIME_ENTRY_URL+"latest/",
267-
params={"owner_id": inserted_time_entry["owner_id"]},
268-
)
269-
270-
response = azure_time_entries._get_latest_entries.get_latest_entries(req)
271-
time_entry_json_data = json.loads(response.get_body().decode("utf-8"))
272-
273-
assert response.status_code == HTTPStatus.OK
274-
assert time_entry_json_data == [inserted_time_entry]
275-
276-
277259
def test__get_latest_entries_azure_endpoint__returns_not_found__when_recieve_an_invalid_owner_id(
278260
test_db, insert_activity, activity_factory,
279261
):

V2/tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# flake8: noqa
22
from fixtures import _activity_factory, _test_db, _insert_activity
3-
from fixtures import _time_entry_factory
3+
from fixtures import _time_entry_factory, _insert_time_entry
44
from fixtures import _customer_factory, _insert_customer
55
from fixtures import _project_factory, _insert_project

V2/tests/fixtures.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import time_tracker.activities._domain as activities_domain
55
import time_tracker.activities._infrastructure as activities_infrastructure
66
import time_tracker.time_entries._domain as time_entries_domain
7+
import time_tracker.time_entries._infrastructure as time_entries_infrastructure
78
import time_tracker.customers._domain as customers_domain
89
import time_tracker.customers._infrastructure as customers_infrastructure
910
import time_tracker.projects._domain as projects_domain
@@ -146,3 +147,22 @@ def _new_project():
146147
inserted_project = dao.create(project_to_insert)
147148
return inserted_project
148149
return _new_project
150+
151+
152+
@pytest.fixture(name='insert_time_entry')
153+
def _insert_time_entry(
154+
test_db, insert_project, activity_factory, insert_activity, time_entry_factory
155+
) -> time_entries_domain.TimeEntry:
156+
157+
inserted_project = insert_project()
158+
inserted_activity = insert_activity(activity_factory(), test_db)
159+
160+
def _new_time_entry(owner_id: int = Faker().pyint()):
161+
dao = time_entries_infrastructure.TimeEntriesSQLDao(test_db)
162+
time_entries_to_insert = time_entry_factory(
163+
activity_id=inserted_activity.id, project_id=inserted_project.id, owner_id=owner_id
164+
)
165+
166+
inserted_time_entries = dao.create(time_entries_to_insert)
167+
return inserted_time_entries
168+
return _new_time_entry

V2/tests/integration/daos/projects_dao_test.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,15 @@ def test_delete__returns_none__when_no_project_matching_its_id_is_found_with_sql
139139
results = dao.delete(project_to_insert.id)
140140

141141
assert results is None
142+
143+
144+
def test_get_latest_projects__returns_a_list_of_project_dto_objects__when_find_projects_in_the_latest_time_entries(
145+
create_fake_dao, insert_time_entry
146+
):
147+
dao = create_fake_dao
148+
owner_id = Faker().pyint()
149+
inserted_time_entries = insert_time_entry(owner_id)
150+
latest_projects = dao.get_latest(owner_id)
151+
152+
assert isinstance(latest_projects, typing.List)
153+
assert latest_projects[0].id == inserted_time_entries.project_id

V2/tests/integration/daos/time_entries_dao_test.py

Lines changed: 6 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -88,17 +88,6 @@ def test_get_latest_entries__returns_a_list_of_latest_time_entries__when_an_owne
8888
assert result == [inserted_time_entry]
8989

9090

91-
def test_get_latest_entries__returns_none__when_an_owner_id_is_not_found(
92-
create_fake_dao, test_db, insert_activity, activity_factory
93-
):
94-
dao = create_fake_dao(test_db)
95-
insert_activity(activity_factory(), dao.db)
96-
97-
result = dao.get_latest_entries(Faker().pyint())
98-
99-
assert result is None
100-
101-
10291
def test_update__returns_an_time_entry_dto__when_found_one_time_entry_to_update(
10392
test_db, create_fake_dao, time_entry_factory, insert_activity, activity_factory, insert_project
10493
):
@@ -132,12 +121,13 @@ def test_update__returns_none__when_doesnt_found_one_time_entry_to_update(
132121

133122

134123
def test__get_all__returns_a_list_of_time_entries_dto_objects__when_one_or_more_time_entries_are_found_in_sql_database(
135-
test_db, create_fake_dao, time_entry_factory, insert_activity, activity_factory
124+
test_db, create_fake_dao, time_entry_factory, insert_activity, activity_factory, insert_project
136125
):
137126

138127
dao = create_fake_dao(test_db)
128+
inserted_project = insert_project()
139129
inserted_activity = insert_activity(activity_factory(), dao.db)
140-
time_entries_to_insert = time_entry_factory(activity_id=inserted_activity.id)
130+
time_entries_to_insert = time_entry_factory(activity_id=inserted_activity.id, project_id=inserted_project.id)
141131
inserted_time_entries = [dao.create(time_entries_to_insert)]
142132

143133
time_entry = dao.get_all()
@@ -157,11 +147,12 @@ def test__get_all__returns_an_empty_list__when_doesnt_found_any_time_entries_in_
157147

158148

159149
def test__get_by_id__returns_a_time_entry_dto__when_found_one_time_entry_that_match_id_with_sql_database(
160-
test_db, create_fake_dao, time_entry_factory, insert_activity, activity_factory
150+
test_db, create_fake_dao, time_entry_factory, insert_activity, activity_factory, insert_project
161151
):
162152
dao = create_fake_dao(test_db)
153+
inserted_project = insert_project()
163154
inserted_activity = insert_activity(activity_factory(), dao.db)
164-
time_entries_to_insert = time_entry_factory(activity_id=inserted_activity.id)
155+
time_entries_to_insert = time_entry_factory(activity_id=inserted_activity.id, project_id=inserted_project.id)
165156
inserted_time_entries = dao.create(time_entries_to_insert)
166157

167158
time_entry = dao.get_by_id(time_entries_to_insert.id)
@@ -184,21 +175,6 @@ def test__get_by_id__returns_none__when_no_time_entry_matches_by_id(
184175
assert time_entry is None
185176

186177

187-
def test_get_latest_entries__returns_a_list_of_latest_time_entries__when_an_owner_id_match(
188-
create_fake_dao, time_entry_factory, insert_activity, activity_factory, test_db
189-
):
190-
dao = create_fake_dao(test_db)
191-
inserted_activity = insert_activity(activity_factory(), dao.db)
192-
time_entry_to_insert = time_entry_factory(
193-
activity_id=inserted_activity.id,
194-
technologies="[jira,sql]")
195-
inserted_time_entry = dao.create(time_entry_to_insert)
196-
197-
result = dao.get_latest_entries(int(inserted_time_entry.owner_id))
198-
199-
assert result == [inserted_time_entry.__dict__]
200-
201-
202178
def test_get_latest_entries__returns_none__when_an_owner_id_is_not_found(
203179
create_fake_dao, test_db, insert_activity, activity_factory
204180
):

V2/tests/unit/services/project_service_test.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,18 @@ def test__create_project__uses_the_project_dao__to_create_an_project(mocker, pro
7272

7373
assert project_dao.create.called
7474
assert expected_project == actual_project
75+
76+
77+
def test__get_latest_projects__uses_the_project_dao__to_get_last_projects(
78+
mocker,
79+
):
80+
expected_latest_projects = mocker.Mock()
81+
project_dao = mocker.Mock(
82+
get_latest=mocker.Mock(return_value=expected_latest_projects)
83+
)
84+
85+
project_service = ProjectService(project_dao)
86+
latest_projects = project_service.get_latest(Faker().pyint())
87+
88+
assert expected_latest_projects == latest_projects
89+
assert project_dao.get_latest.called

V2/tests/unit/services/time_entry_service_test.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,6 @@ def test__delete_time_entry__uses_the_time_entry_dao__to_delete_time_entry_selec
3131
assert expected_time_entry == deleted_time_entry
3232

3333

34-
def test__get_latest_entries__uses_the_time_entry_dao__to_get_last_entries(
35-
mocker,
36-
):
37-
expected_latest_time_entries = mocker.Mock()
38-
time_entry_dao = mocker.Mock(
39-
get_latest_entries=mocker.Mock(return_value=expected_latest_time_entries)
40-
)
41-
42-
time_entry_service = TimeEntryService(time_entry_dao)
43-
latest_time_entries = time_entry_service.get_latest_entries(Faker().pyint(), Faker().pyint())
44-
45-
assert expected_latest_time_entries == latest_time_entries
46-
assert time_entry_dao.get_latest_entries.called
47-
48-
4934
def test__update_time_entry__uses_the_time_entry_dao__to_update_one_time_entry(
5035
mocker,
5136
):

V2/tests/unit/use_cases/projects_use_case_test.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,16 @@ def test__update_project_function__uses_the_projects_service__to_update_an_proje
7878

7979
assert project_service.update.called
8080
assert expected_project == updated_project
81+
82+
83+
def test__get_latest_projects_function__uses_the_project_service__to_get_latest_project(
84+
mocker: MockFixture,
85+
):
86+
expected_latest_projects = mocker.Mock()
87+
project_service = mocker.Mock(get_latest=mocker.Mock(return_value=expected_latest_projects))
88+
89+
project_use_case = _use_cases.GetLatestProjectsUseCase(project_service)
90+
latest_projects = project_use_case.get_latest(Faker().pyint())
91+
92+
assert project_service.get_latest.called
93+
assert expected_latest_projects == latest_projects

0 commit comments

Comments
 (0)