1
1
import unittest
2
- from datetime import date
2
+ from datetime import date , datetime
3
3
4
4
5
5
import pytest
6
6
from unittest .mock import Mock , MagicMock
7
7
8
8
from repository .Users import UsersRepository
9
- from schemas .Schemas import CreateUserSchema , UserSchema
9
+ from schemas .Schemas import CreateNotificationSchema , CreateUserSchema , UserSchema
10
10
from service .Users import UsersService
11
11
from exceptions .UserException import InvalidData , ResourceNotFound , InvalidURL
12
12
@@ -114,6 +114,19 @@ def test_create_user(self):
114
114
mock_db .create_user .assert_called_once ()
115
115
mock_db .rollback .assert_not_called ()
116
116
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
+
117
130
def test_create_fails_if_invalid_location (self ):
118
131
attr_db = {"rollback.return_value" : None }
119
132
mock_db = get_mock (UsersRepository , attr_db )
@@ -138,6 +151,19 @@ def test_update_user(self):
138
151
mock_db .edit_user .assert_called_once ()
139
152
mock_db .rollback .assert_not_called ()
140
153
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
+
141
167
def test_update_fails_if_invalid_location (self ):
142
168
attr_db = {"edit_user.return_value" : None }
143
169
mock_db = get_mock (UsersRepository , attr_db )
@@ -146,3 +172,47 @@ def test_update_fails_if_invalid_location(self):
146
172
147
173
with self .assertRaises (InvalidURL ):
148
174
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