Skip to content

Commit a975cb1

Browse files
committed
refactor: TT-357 Refactor tests, and activity data
1 parent d9eaa42 commit a975cb1

32 files changed

+197
-147
lines changed

V2/serverless.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ package:
3838

3939
functions:
4040
get_activities:
41-
handler: time_entries/interface.get_activities
41+
handler: time_tracker/activities/interface.get_activities
4242
events:
4343
- http: true
4444
x-azure-settings:
@@ -48,7 +48,7 @@ functions:
4848
authLevel: anonymous
4949

5050
delete_activity:
51-
handler: time_entries/interface.delete_activity
51+
handler: time_tracker/activities/interface.delete_activity
5252
events:
5353
- http: true
5454
x-azure-settings:
@@ -58,7 +58,7 @@ functions:
5858
authLevel: anonymous
5959

6060
update_activity:
61-
handler: time_entries/interface.update_activity
61+
handler: time_tracker/activities/interface.update_activity
6262
events:
6363
- http: true
6464
x-azure-settings:
@@ -68,7 +68,7 @@ functions:
6868
authLevel: anonymous
6969

7070
create_activity:
71-
handler: time_entries/interface.create_activity
71+
handler: time_tracker/activities/interface.create_activity
7272
events:
7373
- http: true
7474
x-azure-settings:

V2/tests/api/api_fixtures.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import pytest
2+
3+
import time_tracker.activities._domain as domain
4+
import time_tracker.activities._infrastructure as infrastructure
5+
6+
@pytest.fixture(name='activity_factory')
7+
def _activity_factory() -> domain.Activity:
8+
def _make_activity(data: dict):
9+
activity = domain.Activity(**data)
10+
return activity
11+
return _make_activity
12+
13+
@pytest.fixture(name='create_fake_dao')
14+
def _create_fake_dao() -> domain.ActivitiesDao:
15+
db_fake = infrastructure.DB('sqlite:///:memory:')
16+
dao = infrastructure.ActivitiesSQLDao(db_fake)
17+
return dao
18+
19+
@pytest.fixture(name='create_fake_database')
20+
def _create_fake_database() -> domain.ActivitiesDao:
21+
db_fake = infrastructure.DB('sqlite:///:memory:')
22+
return db_fake
Lines changed: 52 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import pytest
22
import json
3-
import uuid
43
from faker import Faker
54

65
import azure.functions as func
76
import sqlalchemy
87
from sqlalchemy.sql.sqltypes import Integer
98

10-
import time_entries._application._activities as azure_activities
11-
import time_entries._domain as domain
12-
import time_entries._infrastructure as infrastructure
9+
import time_tracker.activities._application._activities as azure_activities
10+
import time_tracker.activities._domain as domain
11+
import time_tracker.activities._infrastructure as infrastructure
1312

1413
ACTIVITY_URL = '/api/activities/'
1514

@@ -18,122 +17,127 @@
1817
'id': 1,
1918
'name': 'Activity Demo create',
2019
'description': 'test demo create an new activity',
21-
'deleted': 'b4327ba6-9f96-49ee-a9ac-3c1edf525172',
22-
'status': 'active',
23-
'tenant_id': 'cc925a5d-9644-4a4f-8d99-0bee49aadd05',
20+
'deleted': None,
21+
'status': None,
2422
},
2523
{
2624
'id': 2,
2725
'name': 'Activity Demo create',
2826
'description': 'test demo create an new activity',
29-
'deleted': 'b4327ba6-9f96-49ee-a9ac-3c1edf525172',
30-
'status': 'active',
31-
'tenant_id': 'cc925a5d-9644-4a4f-8d99-0bee49aadd05',
27+
'deleted': None,
28+
'status': None,
3229
},
3330
]
3431

35-
@pytest.fixture(name='create_fake_database')
36-
def _create_fake_database() -> domain.ActivitiesDao:
37-
db_fake = infrastructure.DB('sqlite:///:memory:')
38-
39-
activity = sqlalchemy.Table('activity', db_fake.metadata,
40-
sqlalchemy.Column('id',sqlalchemy.Integer, primary_key=True,autoincrement=True),
41-
sqlalchemy.Column('name', sqlalchemy.String),
42-
sqlalchemy.Column('description', sqlalchemy.String),
43-
sqlalchemy.Column('deleted', sqlalchemy.String),
44-
sqlalchemy.Column('status', sqlalchemy.String),
45-
sqlalchemy.Column('tenant_id', sqlalchemy.String),
46-
extend_existing=True,
47-
)
48-
49-
query = activity.insert()
50-
db_fake.get_session().execute(query, DEMO_DATA)
51-
return db_fake
32+
33+
@pytest.fixture(name='insert_activity')
34+
def _insert_activity() -> domain.Activity:
35+
def _new_activity(activity: dict, database: infrastructure.DB):
36+
dao = infrastructure.ActivitiesSQLDao(database)
37+
new_activity = dao.create(activity)
38+
return new_activity
39+
return _new_activity
5240

5341
def test__activity_azure_endpoint__returns_all_activities(
54-
create_fake_database,
42+
create_fake_database, activity_factory, insert_activity
5543
):
56-
azure_activities._get_activities.DATABASE = create_fake_database
57-
req = func.HttpRequest(method='GET', body=None, url=ACTIVITY_URL)
44+
fake_database = create_fake_database
45+
existent_activities= [activity_factory(DEMO_DATA[0]), activity_factory(DEMO_DATA[1])]
46+
inserted_activities = [insert_activity(existent_activities[0].__dict__, fake_database).__dict__, insert_activity(existent_activities[1].__dict__, fake_database).__dict__]
5847

48+
azure_activities._get_activities.DATABASE = fake_database
49+
req = func.HttpRequest(method='GET', body=None, url=ACTIVITY_URL)
5950
response = azure_activities._get_activities.get_activities(req)
6051
activities_json_data = response.get_body().decode("utf-8")
6152

6253
assert response.status_code == 200
63-
assert activities_json_data == json.dumps(DEMO_DATA)
54+
assert activities_json_data == json.dumps(inserted_activities)
6455

6556

6657
def test__activity_azure_endpoint__returns_an_activity__when_activity_matches_its_id(
67-
create_fake_database,
58+
create_fake_database, activity_factory, insert_activity
6859
):
69-
azure_activities._get_activities.DATABASE = create_fake_database
60+
fake_database = create_fake_database
61+
existent_activity= activity_factory(DEMO_DATA[0])
62+
inserted_activity = insert_activity(existent_activity.__dict__, fake_database).__dict__
63+
64+
azure_activities._get_activities.DATABASE = fake_database
7065
req = func.HttpRequest(
7166
method='GET',
7267
body=None,
7368
url=ACTIVITY_URL,
74-
route_params={"id": str(DEMO_DATA[0]['id'])},
69+
route_params={"id": inserted_activity["id"]},
7570
)
7671

7772
response = azure_activities._get_activities.get_activities(req)
7873
activitiy_json_data = response.get_body().decode("utf-8")
7974

8075
assert response.status_code == 200
81-
assert activitiy_json_data == json.dumps(DEMO_DATA[0])
76+
assert activitiy_json_data == json.dumps(inserted_activity)
8277

8378

8479
def test__activity_azure_endpoint__returns_an_activity_with_inactive_status__when_an_activity_matching_its_id_is_found(
85-
create_fake_database,
86-
):
87-
azure_activities._delete_activity.DATABASE = create_fake_database
80+
create_fake_database,activity_factory, insert_activity
81+
):
82+
fake_database = create_fake_database
83+
existent_activity= activity_factory(DEMO_DATA[0])
84+
inserted_activity = insert_activity(existent_activity.__dict__, fake_database).__dict__
85+
86+
azure_activities._delete_activity.DATABASE = fake_database
8887
req = func.HttpRequest(
8988
method='DELETE',
9089
body=None,
9190
url=ACTIVITY_URL,
92-
route_params={"id": str(DEMO_DATA[0]['id'])},
91+
route_params={"id": inserted_activity["id"]},
9392
)
9493

9594
response = azure_activities._delete_activity.delete_activity(req)
9695
activity_json_data = json.loads(response.get_body().decode("utf-8"))
9796

9897
assert response.status_code == 200
99-
assert activity_json_data['status'] == 'inactive'
98+
assert activity_json_data['status'] == 0
99+
assert activity_json_data['deleted'] == True
100100

101101

102102
def test__update_activity_azure_endpoint__returns_an_activity__when_found_an_activity_to_update(
103-
create_fake_database,
103+
create_fake_database, activity_factory, insert_activity
104104
):
105-
azure_activities._update_activity.DATABASE = create_fake_database
105+
fake_database = create_fake_database
106+
existent_activity= activity_factory(DEMO_DATA[0])
107+
inserted_activity = insert_activity(existent_activity.__dict__, fake_database).__dict__
108+
109+
azure_activities._update_activity.DATABASE = fake_database
106110
activity_body = {"description": Faker().sentence()}
107111
req = func.HttpRequest(
108112
method='PUT',
109113
body=json.dumps(activity_body).encode("utf-8"),
110114
url=ACTIVITY_URL,
111-
route_params={"id": str(DEMO_DATA[0]['id'])},
115+
route_params={"id": inserted_activity["id"]},
112116
)
113117

114118
response = azure_activities._update_activity.update_activity(req)
115119
activitiy_json_data = response.get_body().decode("utf-8")
116-
new_activity = {**DEMO_DATA[0], **activity_body}
120+
inserted_activity.update(activity_body)
117121

118122
assert response.status_code == 200
119-
assert activitiy_json_data == json.dumps(new_activity)
123+
assert activitiy_json_data == json.dumps(inserted_activity)
124+
120125

121126
def test__activity_azure_endpoint__creates_an_activity__when_activity_has_all_attributes(
122127
create_fake_database,
123128
):
124129
azure_activities._create_activity.DATABASE = create_fake_database
125-
126-
activity_body = {'id': None, 'name': Faker().user_name(), 'description': Faker().sentence(),'deleted': Faker().uuid4() ,'status': 'active', 'tenant_id': Faker().uuid4()}
130+
activity_body = {'id': None, 'name': Faker().user_name(), 'description': Faker().sentence(),'deleted': False ,'status': 1}
127131
body = json.dumps(activity_body).encode("utf-8")
128132
req = func.HttpRequest(
129133
method='POST',
130134
body= body,
131135
url=ACTIVITY_URL,
132136
)
133137

134-
135138
response = azure_activities._create_activity.create_activity(req)
136139
activitiy_json_data = json.loads(response.get_body())
137140
activity_body['id'] = activitiy_json_data['id']
141+
138142
assert response.status_code == 201
139143
assert activitiy_json_data == activity_body

V2/tests/conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from tests.api.api_fixtures import _activity_factory, _create_fake_dao, _create_fake_database

0 commit comments

Comments
 (0)