6
6
from sqlalchemy .exc import IntegrityError
7
7
8
8
from ptmd .api import app
9
+ from ptmd .exceptions import PasswordPolicyError
9
10
10
11
11
12
HEADERS = {'Content-Type' : 'application/json' }
@@ -110,6 +111,13 @@ def test_change_pwd(self, mock_user, mock_jwt, mock_session,
110
111
self .assertEqual (created_user .json , {'msg' : 'Passwords do not match' })
111
112
112
113
user_data ['confirm_password' ] = '1234'
114
+ created_user = client .put ('/api/users' ,
115
+ headers = {'Authorization' : f'Bearer { 123 } ' , ** HEADERS },
116
+ data = dumps (user_data ))
117
+ self .assertEqual (created_user .json , {'msg' : 'New password cannot be the same as the old one' })
118
+
119
+ user_data ['confirm_password' ] = '666'
120
+ user_data ['new_password' ] = '666'
113
121
mock_user .query .filter ().first ().change_password .return_value = False
114
122
created_user = client .put ('/api/users' ,
115
123
headers = {'Authorization' : f'Bearer { 123 } ' , ** HEADERS },
@@ -128,6 +136,23 @@ def test_change_pwd(self, mock_user, mock_jwt, mock_session,
128
136
data = dumps (user_data ))
129
137
self .assertEqual (created_user .json , {'msg' : 'You are not authorized to access this route' })
130
138
139
+ mock_user .query .filter ().first ().change_password .side_effect = PasswordPolicyError ()
140
+ mock_get_current_user ().role = 'admin'
141
+ created_user = client .put ('/api/users' ,
142
+ headers = {'Authorization' : f'Bearer { 123 } ' , ** HEADERS },
143
+ data = dumps (user_data ))
144
+ self .assertEqual (created_user .json , {'msg' : "Password must be between 8 and 20 characters long, contain at "
145
+ "least one uppercase letter, one lowercase letter, one number "
146
+ "and one special character." })
147
+ self .assertEqual (created_user .status_code , 400 )
148
+
149
+ mock_user .query .filter ().first ().change_password = lambda x : x / 0
150
+ created_user = client .put ('/api/users' ,
151
+ headers = {'Authorization' : f'Bearer { 123 } ' , ** HEADERS },
152
+ data = dumps (user_data ))
153
+ self .assertEqual (created_user .json , {'msg' : 'An unexpected error occurred' })
154
+ self .assertEqual (created_user .status_code , 500 )
155
+
131
156
@patch ('ptmd.api.queries.users.User' )
132
157
@patch ('ptmd.api.queries.users.get_jwt' , return_value = {'sub' : 1 })
133
158
def test_get_me (self , mock_jwt , mock_user , mock_get_current_user , mock_verify_jwt , mock_verify_in_request ):
@@ -258,13 +283,21 @@ def test_reset_password_failed(self, mock_get_current_user, mock_verify_jwt, moc
258
283
@patch ('ptmd.api.queries.users.get_token' )
259
284
def test_reset_password_error (self , mock_token ,
260
285
mock_get_current_user , mock_verify_jwt , mock_verify_in_request ):
261
- mock_token .side_effect = Exception ( 'test' )
286
+ mock_token .side_effect = PasswordPolicyError ( )
262
287
headers = {'Authorization' : f'Bearer { 123 } ' , ** HEADERS }
263
288
with app .test_client () as client :
264
289
response = client .post ('/api/users/reset/123' , data = dumps ({"password" : "None" }), headers = headers )
265
- self .assertEqual (response .json , {"msg" : "test" })
290
+ self .assertEqual (response .json , {"msg" : "Password must be between 8 and 20 characters long, contain at "
291
+ "least one uppercase letter, one lowercase letter, one number "
292
+ "and one special character." })
266
293
self .assertEqual (response .status_code , 400 )
267
294
295
+ mock_token .side_effect = Exception ()
296
+ with app .test_client () as client :
297
+ response = client .post ('/api/users/reset/123' , data = dumps ({"password" : "None" }), headers = headers )
298
+ self .assertEqual (response .json , {"msg" : "An unexpected error occurred" })
299
+ self .assertEqual (response .status_code , 500 )
300
+
268
301
@patch ('ptmd.api.queries.users.get_token' )
269
302
@patch ('ptmd.api.queries.users.session' )
270
303
def test_reset_password_success (self , mock_session , mock_token ,
0 commit comments