Skip to content

Commit b5bd287

Browse files
committed
add tests
1 parent 52099d1 commit b5bd287

File tree

2 files changed

+77
-7
lines changed

2 files changed

+77
-7
lines changed

app/service/Users.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def delete_notification(self, user_id: int, notification_id: int):
9292
self.user_repository.rollback()
9393
raise e
9494

95-
def _generate_nickname(self, name):
95+
def _generate_nickname(self, name): # pragma: no cover
9696

9797
name_without_spaces = name.replace(" ", "")
9898
uuid_max = 8
@@ -131,7 +131,7 @@ def login(self, auth_code: str):
131131
algorithm="HS256")
132132
return user, jwt_token
133133

134-
def _get_access_token(self, authorization_code):
134+
def _get_access_token(self, authorization_code): # pragma: no cover
135135
token_url = "https://oauth2.googleapis.com/token"
136136
payload = {
137137
"client_id": os.environ["GOOGLE_CLIENT_ID"],
@@ -146,7 +146,7 @@ def _get_access_token(self, authorization_code):
146146
else:
147147
return None
148148

149-
def _get_user_info(self, access_token):
149+
def _get_user_info(self, access_token): # pragma: no cover
150150
user_info_url = "https://www.googleapis.com/oauth2/v2/userinfo"
151151
headers = {"Authorization": f"Bearer {access_token}"}
152152
params = {"fields": "id,email,name,picture,gender"}
@@ -171,14 +171,14 @@ def _validate_location(self, location):
171171
return True
172172
return False
173173

174-
def retrieve_user_id(self, request):
174+
def retrieve_user_id(self, request): # pragma: no cover
175175
token = self.__get_token(request.headers)
176176
payload = jwt.decode(token,
177177
os.environ["JWT_SECRET"],
178178
algorithms=["HS256"])
179179
return int(payload.get("user_id"))
180180

181-
def __get_token(self, headers: dict):
181+
def __get_token(self, headers: dict): # pragma: no cover
182182
keyName = None
183183
for key in headers.keys():
184184
if key.lower() == TOKEN_FIELD_NAME:

app/tests/test_users.py

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import unittest
2-
from datetime import date
2+
from datetime import date, datetime
33

44

55
import pytest
66
from unittest.mock import Mock, MagicMock
77

88
from repository.Users import UsersRepository
9-
from schemas.Schemas import CreateUserSchema, UserSchema
9+
from schemas.Schemas import CreateNotificationSchema, CreateUserSchema, UserSchema
1010
from service.Users import UsersService
1111
from exceptions.UserException import InvalidData, ResourceNotFound, InvalidURL
1212

@@ -114,6 +114,19 @@ def test_create_user(self):
114114
mock_db.create_user.assert_called_once()
115115
mock_db.rollback.assert_not_called()
116116

117+
def test_create_user_rollback_if_failed(self):
118+
attr_db = {
119+
"create_user.side_effect": Exception(),
120+
"rollback.return_value": None
121+
}
122+
mock_db = get_mock(UsersRepository, attr_db)
123+
service = UsersService(mock_db)
124+
125+
with self.assertRaises(Exception):
126+
service.create_user(new_user.dict())
127+
128+
mock_db.rollback.assert_called_once()
129+
117130
def test_create_fails_if_invalid_location(self):
118131
attr_db = {"rollback.return_value": None}
119132
mock_db = get_mock(UsersRepository, attr_db)
@@ -138,6 +151,19 @@ def test_update_user(self):
138151
mock_db.edit_user.assert_called_once()
139152
mock_db.rollback.assert_not_called()
140153

154+
def test_update_user_rollback_if_failed(self):
155+
attr_db = {
156+
"edit_user.side_effect": Exception(),
157+
"rollback.return_value": None
158+
}
159+
mock_db = get_mock(UsersRepository, attr_db)
160+
service = UsersService(mock_db)
161+
162+
with self.assertRaises(Exception):
163+
service.update_user(1, {"nickname": "alice"})
164+
165+
mock_db.rollback.assert_called_once()
166+
141167
def test_update_fails_if_invalid_location(self):
142168
attr_db = {"edit_user.return_value": None}
143169
mock_db = get_mock(UsersRepository, attr_db)
@@ -146,3 +172,47 @@ def test_update_fails_if_invalid_location(self):
146172

147173
with self.assertRaises(InvalidURL):
148174
service.update_user(1, invalid_update)
175+
176+
def test_create_notification(self):
177+
attr_db = {
178+
"create_notification.return_value": None,
179+
"get_notifications.return_value": [
180+
{
181+
"datetime": datetime(2023, 5, 17, 10, 30),
182+
"content": 'Alarm'
183+
}
184+
],
185+
"rollback.return_value": None
186+
}
187+
mock_db = get_mock(UsersRepository, attr_db)
188+
service = UsersService(mock_db)
189+
service.create_notification(
190+
1,
191+
CreateNotificationSchema(date_time=datetime(2023, 5, 17, 10, 30),
192+
content="Alarm")
193+
)
194+
195+
notifications = service.get_notifications(1)
196+
notification = notifications.pop()
197+
198+
self.assertEqual(notification["content"], "Alarm")
199+
mock_db.create_notification.assert_called_once()
200+
mock_db.rollback.assert_not_called()
201+
202+
def test_create_notification_rollback_if_failed(self):
203+
attr_db = {
204+
"create_notification.side_effect": Exception(),
205+
"rollback.return_value": None
206+
}
207+
mock_db = get_mock(UsersRepository, attr_db)
208+
service = UsersService(mock_db)
209+
210+
with self.assertRaises(Exception):
211+
service.create_notification(
212+
1,
213+
CreateNotificationSchema(
214+
date_time=datetime(2023, 5, 17, 10, 30),
215+
content="Alarm")
216+
)
217+
218+
mock_db.rollback.assert_called_once()

0 commit comments

Comments
 (0)