Skip to content

Commit 5f66057

Browse files
committed
feat: TT-407 tests added
1 parent 65505f0 commit 5f66057

File tree

18 files changed

+86
-135
lines changed

18 files changed

+86
-135
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"type": "httpTrigger",
66
"direction": "in",
77
"name": "req",
8-
"route": "time-entries/latest",
8+
"route": "time-entries/latest/",
99
"authLevel": "anonymous",
1010
"methods": [
1111
"GET"

V2/serverless.yml

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
service: azure-time-tracker
22

3-
frameworkVersion: "2"
3+
frameworkVersion: '2'
44

55
provider:
66
name: azure
@@ -23,18 +23,18 @@ plugins:
2323

2424
package:
2525
patterns:
26-
- "!env/**"
27-
- "!.env/**"
28-
- "!local.settings.json"
29-
- "!.vscode/**"
30-
- "!__pycache__/**"
31-
- "!node_modules/**"
32-
- "!.python_packages/**"
33-
- "!.funcignore"
34-
- "!package.json"
35-
- "!package-lock.json"
36-
- "!.gitignore"
37-
- "!.git/**"
26+
- '!env/**'
27+
- '!.env/**'
28+
- '!local.settings.json'
29+
- '!.vscode/**'
30+
- '!__pycache__/**'
31+
- '!node_modules/**'
32+
- '!.python_packages/**'
33+
- '!.funcignore'
34+
- '!package.json'
35+
- '!package-lock.json'
36+
- '!.gitignore'
37+
- '!.git/**'
3838

3939
functions:
4040
get_activities:
@@ -63,9 +63,9 @@ functions:
6363
- http: true
6464
x-azure-settings:
6565
methods:
66-
- PUT
66+
- PUT
6767
route: activities/{id}
68-
authLevel: anonymous
68+
authLevel: anonymous
6969

7070
create_activity:
7171
handler: time_tracker/activities/interface.create_activity
@@ -94,5 +94,5 @@ functions:
9494
x-azure-settings:
9595
methods:
9696
- GET
97-
route: time-entries/latest
97+
route: time-entries/latest/
9898
authLevel: anonymous
Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import pytest
22
import json
3+
from faker import Faker
34

45
import azure.functions as func
56

@@ -21,43 +22,44 @@ def _new_time_entry(time_entry: domain_time_entries.TimeEntry, database: DB):
2122
return _new_time_entry
2223

2324

24-
def test__delete_time_entries_azure_endpoint__returns_an_time_entry_with_true_deleted__when_its_id_is_found(
25+
def test__get_latest_entries_azure_endpoint__returns_a_list_of_latest_time_entries__when_an_owner_id_match(
2526
create_fake_database, time_entry_factory, insert_time_entry, insert_activity, activity_factory,
2627
):
2728
db = create_fake_database
28-
azure_time_entries._delete_time_entry.DATABASE = db
29+
azure_time_entries._get_latest_entries.DATABASE = db
2930
inserted_activity = insert_activity(activity_factory(), db).__dict__
3031
time_entry_body = time_entry_factory(activity_id=inserted_activity["id"], technologies="[jira,sql]")
3132
inserted_time_entry = insert_time_entry(time_entry_body, db)
3233

3334
req = func.HttpRequest(
34-
method='DELETE',
35+
method='GET',
3536
body=None,
36-
url=TIME_ENTRY_URL,
37-
route_params={"id": inserted_time_entry.id},
37+
url=TIME_ENTRY_URL+"latest/",
38+
params={"owner_id": inserted_time_entry.owner_id},
3839
)
3940

40-
response = azure_time_entries._delete_time_entry.delete_time_entry(req)
41+
response = azure_time_entries._get_latest_entries.get_latest_entries(req)
4142
time_entry_json_data = json.loads(response.get_body().decode("utf-8"))
4243

4344
assert response.status_code == 200
44-
assert time_entry_json_data['deleted'] is True
45+
assert time_entry_json_data == [inserted_time_entry.__dict__]
4546

4647

47-
def test__delete_time_entries_azure_endpoint__returns_a_status_code_400__when_time_entry_recive_invalid_id(
48-
create_fake_database,
48+
def test__get_latest_entries_azure_endpoint__returns_No_time_entries_found__when_recieve_an_invalid_owner_id(
49+
create_fake_database, insert_activity, activity_factory,
4950
):
5051
db = create_fake_database
51-
azure_time_entries._delete_time_entry.DATABASE = db
52+
azure_time_entries._get_latest_entries.DATABASE = db
53+
insert_activity(activity_factory(), db)
5254

5355
req = func.HttpRequest(
54-
method="DELETE",
56+
method='GET',
5557
body=None,
56-
url=TIME_ENTRY_URL,
57-
route_params={"id": "invalid id"},
58+
url=TIME_ENTRY_URL+"latest/",
59+
params={"owner_id": Faker().pyint()},
5860
)
5961

60-
response = azure_time_entries._delete_time_entry.delete_time_entry(req)
62+
response = azure_time_entries._get_latest_entries.get_latest_entries(req)
6163

62-
assert response.status_code == 400
63-
assert response.get_body() == b'Invalid Format ID'
64+
assert response.status_code == 404
65+
assert response.get_body() == b'No time entries found'

V2/tests/integration/daos/time_entries_dao_test.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,25 @@ def _create_fake_dao() -> domain.TimeEntriesDao:
1313
return dao
1414

1515

16-
def test_delete__returns_an_time_entry_with_true_deleted__when_an_time_entry_matching_its_id_is_found(
16+
def test_get_latest_entries__returns_a_list_of_latest_time_entries__when_an_owner_id_match(
1717
create_fake_dao, time_entry_factory, insert_activity, activity_factory
1818
):
1919
dao = create_fake_dao
2020
inserted_activity = insert_activity(activity_factory(), dao.db)
21-
existent_time_entry = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]")
22-
inserted_time_entry = dao.create(existent_time_entry)
21+
time_entry_to_insert = time_entry_factory(activity_id=inserted_activity.id, technologies="[jira,sql]")
22+
inserted_time_entry = dao.create(time_entry_to_insert)
2323

24-
result = dao.delete(inserted_time_entry.id)
24+
result = dao.get_latest_entries(int(inserted_time_entry.owner_id))
2525

26-
assert result.deleted is True
26+
assert result == [inserted_time_entry.__dict__]
2727

2828

29-
def test_delete__returns_none__when_no_time_entry_matching_its_id_is_found(
30-
create_fake_dao,
29+
def test_get_latest_entries__returns_None__when_an_owner_id_is_not_found(
30+
create_fake_dao, time_entry_factory, insert_activity, activity_factory
3131
):
3232
dao = create_fake_dao
33+
insert_activity(activity_factory(), dao.db)
3334

34-
result = dao.delete(Faker().pyint())
35+
result = dao.get_latest_entries(Faker().pyint())
3536

3637
assert result is None

V2/tests/unit/services/time_entry_service_test.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
from time_tracker.time_entries._domain import TimeEntryService
44

55

6-
def test__delete_time_entry__uses_the_time_entry_dao__to_change_time_entry_deleted(
6+
def test__get_latest_entries__uses_the_time_entry_dao__to_get_last_entries(
77
mocker,
88
):
9-
expected_time_entry = mocker.Mock()
9+
expected_latest_time_entries = mocker.Mock()
1010
time_entry_dao = mocker.Mock(
11-
delete=mocker.Mock(return_value=expected_time_entry)
11+
get_latest_entries=mocker.Mock(return_value=expected_latest_time_entries)
1212
)
1313

1414
time_entry_service = TimeEntryService(time_entry_dao)
15-
deleted_time_entry = time_entry_service.delete(Faker().pyint())
15+
latest_time_entries = time_entry_service.get_latest_entries(Faker().pyint(), Faker().pyint())
1616

17-
assert time_entry_dao.delete.called
18-
assert expected_time_entry == deleted_time_entry
17+
assert expected_latest_time_entries == latest_time_entries
18+
assert time_entry_dao.get_latest_entries.called

V2/tests/unit/use_cases/time_entries_use_case_test.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
from time_tracker.time_entries._domain import _use_cases
55

66

7-
def test__delete_time_entry_function__uses_the_time_entry_service__to_change_time_entry_deleted(
7+
def test__get_latest_entries_function__uses_the_time_entry_service__to_get_last_entries(
88
mocker: MockFixture,
99
):
10-
expected_time_entry = mocker.Mock()
11-
time_entry_service = mocker.Mock(delete=mocker.Mock(return_value=expected_time_entry))
10+
expected_latest_time_entries = mocker.Mock()
11+
time_entry_service = mocker.Mock(get_latest_entries=mocker.Mock(return_value=expected_latest_time_entries))
1212

13-
time_entry_use_case = _use_cases.DeleteTimeEntryUseCase(time_entry_service)
14-
deleted_time_entry = time_entry_use_case.delete_time_entry(Faker().pyint())
13+
time_entry_use_case = _use_cases.GetLastTimeEntryUseCase(time_entry_service)
14+
latest_time_entries = time_entry_use_case.get_latest_entries(Faker().pyint(), Faker().pyint())
1515

16-
assert time_entry_service.delete.called
17-
assert expected_time_entry == deleted_time_entry
16+
assert time_entry_service.get_latest_entries.called
17+
assert expected_latest_time_entries == latest_time_entries
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# flake8: noqa
2-
from ._time_entries import delete_time_entry, get_latest_entries
2+
from ._time_entries import get_latest_entries
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
# flake8: noqa
2-
from ._delete_time_entry import delete_time_entry
32
from ._get_latest_entries import get_latest_entries

V2/time_tracker/time_entries/_application/_time_entries/_delete_time_entry.py

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

V2/time_tracker/time_entries/_application/_time_entries/_get_latest_entries.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,21 @@ def get_latest_entries(req: func.HttpRequest) -> func.HttpResponse:
1515
use_case = _domain._use_cases.GetLastTimeEntryUseCase(time_entry_service)
1616

1717
try:
18-
time_entries = use_case.get_latest_entries()
18+
owner_id = req.params.get("owner_id")
19+
limit = req.params.get("limit")
20+
21+
if not owner_id:
22+
return func.HttpResponse(
23+
body="No owner id found",
24+
status_code=404,
25+
mimetype="application/json"
26+
)
27+
28+
time_entries = use_case.get_latest_entries(int(owner_id), int(limit) if limit and int(limit) > 0 else None)
1929

2030
if not time_entries or len(time_entries) == 0:
2131
return func.HttpResponse(
22-
body="Not found",
32+
body="No time entries found",
2333
status_code=404,
2434
mimetype="application/json"
2535
)

0 commit comments

Comments
 (0)