Skip to content

Commit 1006410

Browse files
committed
test: TT-352 entry_points and use_cases for activities complete testing
1 parent bb87c54 commit 1006410

File tree

5 files changed

+111
-18
lines changed

5 files changed

+111
-18
lines changed
Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,27 @@
11
from flask import Flask
2-
from flask_restplus import Resource, Api
2+
from flask_restplus import Namespace, Resource, Api
3+
from http import HTTPStatus
4+
35
from . import activities_endpoints
46

5-
app = Flask(__name__)
6-
api = Api(
7-
app,
8-
version='1.0',
9-
title='Time Tracker API',
10-
description='API for the TimeTracker project',
11-
)
12-
13-
ns_activities = api.namespace('activities', description='Endpoint for activities')
14-
ns_activities.route('/')(activities_endpoints.Activities)
15-
ns_activities.route('/<string:activity_id>')(activities_endpoints.Activity)
7+
8+
def create_app(test_config=None):
9+
app = Flask(__name__, instance_relative_config=True)
10+
11+
api = Api(
12+
app,
13+
version='1.0',
14+
title='Time Tracker API',
15+
description='API for the TimeTracker project',
16+
)
17+
18+
if test_config is not None:
19+
app.config.from_mapping(test_config)
20+
21+
ns_activities = Namespace('activities', description='Endpoint for activities')
22+
ns_activities.route('/')(activities_endpoints.Activities)
23+
ns_activities.route('/<string:activity_id>')(activities_endpoints.Activity)
24+
25+
api.add_namespace(ns_activities)
26+
27+
return app

V2/source/use_cases/_get_activities_use_case.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
from V2.source.services.activity_service import ActivityService
22
from V2.source.daos.activities_json_dao import ActivitiesJsonDao
3+
from V2.source.dtos.activity import Activity
4+
import typing
35

4-
def get_list_activities():
6+
def get_list_activities() -> typing.List[Activity]:
57
activity_json_dao = ActivitiesJsonDao('./V2/source/activities_data.json')
68
activity_service = ActivityService(activity_json_dao)
79
activities_dto = activity_service.get_all()

V2/source/use_cases/_get_activity_by_id_use_case.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from V2.source.services.activity_service import ActivityService
22
from V2.source.daos.activities_json_dao import ActivitiesJsonDao
3+
from V2.source.dtos.activity import Activity
34

4-
def get_activity_by_id(id: str):
5+
def get_activity_by_id(id: str) -> Activity:
56
activity_json_dao = ActivitiesJsonDao('./V2/source/activities_data.json')
67
activity_service = ActivityService(activity_json_dao)
78
activity_dto = activity_service.get_by_id(id)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import json
2+
3+
import pytest
4+
from http import HTTPStatus
5+
from pytest_mock import MockFixture
6+
from flask.testing import FlaskClient
7+
from faker import Faker
8+
from werkzeug.exceptions import NotFound
9+
10+
from V2.source.entry_points.flask_api import create_app
11+
from V2.source import use_cases
12+
from V2.source.dtos.activity import Activity
13+
14+
fake = Faker()
15+
16+
valid_id = fake.uuid4()
17+
18+
fake_activity = {
19+
"name": fake.company(),
20+
"description": fake.paragraph(),
21+
"tenant_id": fake.uuid4(),
22+
"id": valid_id,
23+
"deleted": fake.date(),
24+
"status": fake.boolean(),
25+
}
26+
fake_activity_dto = Activity(**fake_activity)
27+
28+
29+
@pytest.fixture
30+
def client():
31+
app = create_app({'TESTING': True})
32+
with app.test_client() as client:
33+
yield client
34+
35+
36+
def test_get_all_activities_endpoint(client: FlaskClient, mocker: MockFixture):
37+
use_cases.get_list_activities = mocker.Mock(return_value=[])
38+
response = client.get("/activities/")
39+
assert response.status_code == HTTPStatus.OK
40+
41+
json_data = json.loads(response.data)
42+
assert [] == json_data
43+
44+
45+
def test_get_activity_by_id_using_a_valid_id(client: FlaskClient, mocker: MockFixture):
46+
use_cases.get_activity_by_id = mocker.Mock(return_value=fake_activity_dto)
47+
response = client.get("/activities/%s" % valid_id)
48+
assert response.status_code == HTTPStatus.OK
49+
assert fake_activity == json.loads(response.data)
50+
51+
52+
def test_get_activity_by_id_using_an_invalid_id(client: FlaskClient, mocker: MockFixture):
53+
invalid_id = fake.uuid4()
54+
use_cases.get_activity_by_id = mocker.Mock(side_effect=NotFound)
55+
response = client.get("/activities/%s" % invalid_id)
56+
assert response.status_code == HTTPStatus.NOT_FOUND
Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,42 @@
1+
import pytest
2+
from pytest_mock import MockFixture
3+
from faker import Faker
4+
15
from V2.source import use_cases
26
from V2.source.daos.activities_json_dao import ActivitiesJsonDao
3-
import pytest
7+
8+
fake = Faker()
9+
410

511
@pytest.fixture(scope='module')
612
def activities_json_dao():
713
activities_json_dao = ActivitiesJsonDao('./V2/source/activities_data.json')
814
return activities_json_dao
915

10-
def test_get_activities_use_case(activities_json_dao):
16+
17+
def test_get_activities_use_case(activities_json_dao, mocker: MockFixture):
1118
activities_dto = activities_json_dao.get_all()
1219
activities_expected = use_cases.get_list_activities()
1320

1421
assert activities_dto == activities_expected
1522

16-
def test_get_activity_by_id_use_case(activities_json_dao):
23+
expected_activities = mocker.Mock()
24+
use_cases.get_list_activities = mocker.Mock(return_value=expected_activities)
25+
actual_activities = use_cases.get_list_activities()
26+
27+
assert use_cases.get_list_activities.called
28+
assert expected_activities == actual_activities
29+
30+
31+
def test_get_activity_by_id_use_case(activities_json_dao, mocker: MockFixture):
1732
activity_dto = activities_json_dao.get_by_id('94ec92e2-a500-4700-a9f6-e41eb7b5507c')
1833
activity_expected = use_cases.get_activity_by_id('94ec92e2-a500-4700-a9f6-e41eb7b5507c')
1934

20-
assert activity_dto == activity_expected
35+
assert activity_dto == activity_expected
36+
37+
expected_activity = mocker.Mock()
38+
use_cases.get_activity_by_id = mocker.Mock(return_value=expected_activity)
39+
actual_activity = use_cases.get_activity_by_id(fake.uuid4())
40+
41+
assert use_cases.get_activity_by_id.called
42+
assert expected_activity == actual_activity

0 commit comments

Comments
 (0)