Skip to content

Commit e4fa202

Browse files
authored
Fixing minor bugs (#150)
* fixed #149 * fixed #131
1 parent b31d347 commit e4fa202

File tree

7 files changed

+49
-4
lines changed

7 files changed

+49
-4
lines changed

ptmd/api/queries/users.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ def reset_password(token: str) -> tuple[Response, int]:
200200
user: User = reset_token_from_db.user_reset[0]
201201
user.set_password(password)
202202
session.delete(reset_token_from_db) # type: ignore
203+
session.commit()
203204
return jsonify({"msg": "Password changed successfully"}), 200
204205
except (PasswordPolicyError, TokenInvalidError, TokenExpiredError) as e:
205206
return jsonify({"msg": str(e)}), 400

ptmd/boot/core.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
""" This module contains the main initializer of the application.
22
"""
3+
from os.path import exists
4+
from os import mkdir
5+
36
from ptmd.config import app, engine
4-
from ptmd.const import ADMIN_EMAIL, ADMIN_USERNAME, ADMIN_PASSWORD
7+
from ptmd.const import ADMIN_EMAIL, ADMIN_USERNAME, ADMIN_PASSWORD, DOWNLOAD_DIRECTORY_PATH
58
from ptmd.database import User, Base
69
from ptmd.lib import GoogleDriveConnector
710
from ptmd.logger import LOGGER
@@ -24,6 +27,7 @@ def initialize() -> None:
2427
"""
2528
LOGGER.info('Initializing the application')
2629
create_config_file()
30+
create_download_directory()
2731
connector: GoogleDriveConnector = GoogleDriveConnector()
2832
Base.metadata.create_all(engine)
2933

@@ -41,3 +45,11 @@ def initialize() -> None:
4145
LOGGER.error('Error initializing the application: %s', e)
4246
raise e
4347
LOGGER.info('Application initialized')
48+
49+
50+
def create_download_directory() -> None:
51+
""" Create the download directory under ptmd/resources/.
52+
"""
53+
if not exists(DOWNLOAD_DIRECTORY_PATH):
54+
mkdir(DOWNLOAD_DIRECTORY_PATH)
55+
LOGGER.info('Download directory created')

ptmd/database/models/user.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ def __enable_account(self) -> None:
127127
self.role = 'enabled'
128128
if self.activation_token:
129129
session.delete(self.activation_token) # type: ignore
130+
session.commit()
130131
send_validation_mail(self)
131132

132133
def __activate_account(self) -> None:

ptmd/database/queries/users.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ def get_token(token: str) -> Token:
5555
if token_from_db is None:
5656
raise TokenInvalidError
5757
if token_from_db.expires_on < datetime.now(token_from_db.expires_on.tzinfo):
58-
# session.delete(token_from_db) # type: ignore
58+
session.delete(token_from_db) # type: ignore
59+
session.commit()
5960
raise TokenExpiredError
6061
return token_from_db

tests/test_api/test_queries/test_users.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,16 @@ def test_validate_account(self, mock_get_current_user, mock_verify_jwt, mock_ver
220220
response = client.get('/api/users/2/activate', headers={'Authorization': f'Bearer {123}', **HEADERS})
221221
self.assertEqual(response.json, {'msg': 'Account validated'})
222222

223-
def test_enable_account_errors(self, mock_get_current_user, mock_verify_jwt, mock_verify_in_request):
223+
@patch('ptmd.api.queries.users.session.delete')
224+
@patch('ptmd.api.queries.users.session.commit')
225+
def test_enable_account_errors(self, mock_session_commit, mock_session_delete,
226+
mock_get_current_user, mock_verify_jwt, mock_verify_in_request):
224227
with patch('ptmd.database.queries.users.Token') as mocked_token:
225228
mocked_token.query.filter().first.return_value.expires_on = datetime.now() - timedelta(days=11)
226229
with app.test_client() as client:
227230
response = client.get('/api/users/enable/2', headers={'Authorization': f'Bearer {123}', **HEADERS})
231+
mock_session_commit.assert_called_once()
232+
mock_session_delete.assert_called_once_with(mocked_token.query.filter().first.return_value)
228233
self.assertEqual(response.json, {'msg': 'Token expired'})
229234
self.assertEqual(response.status_code, 400)
230235

tests/test_boot/test_core.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from unittest.mock import patch
33

44
from ptmd.boot import initialize
5+
from ptmd.boot.core import create_download_directory
6+
from ptmd.const import DOWNLOAD_DIRECTORY_PATH
57

68

79
class MockUser:
@@ -40,3 +42,20 @@ def test_init_error(self, mock_boot, mock_gdc, mock_user, mock_base):
4042
mock_boot.assert_not_called()
4143
mock_base.metadata.drop_all.assert_called_once()
4244
mock_gdc.assert_called_once()
45+
46+
47+
class TestUtils(TestCase):
48+
49+
@patch('ptmd.boot.core.mkdir')
50+
@patch('ptmd.boot.core.exists', return_value=False)
51+
def test_create_download_directory_true(self, exists_mock, mkdir_mock):
52+
create_download_directory()
53+
exists_mock.assert_called_once_with(DOWNLOAD_DIRECTORY_PATH)
54+
mkdir_mock.assert_called_once_with(DOWNLOAD_DIRECTORY_PATH)
55+
56+
@patch('ptmd.boot.core.mkdir')
57+
@patch('ptmd.boot.core.exists', return_value=True)
58+
def test_create_download_directory_false(self, exists_mock, mkdir_mock):
59+
create_download_directory()
60+
exists_mock.assert_called_once_with(DOWNLOAD_DIRECTORY_PATH)
61+
mkdir_mock.assert_not_called()

tests/test_database/test_queries/test_users.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,14 @@ def test_create_users(self, mock_user, mock_organisation, mock_users_session, mo
5151
self.assertEqual(user[0], 123)
5252

5353
@patch('ptmd.database.queries.users.Token')
54-
def test_get_token(self, mock_token):
54+
@patch('ptmd.database.queries.users.session.delete')
55+
@patch('ptmd.database.queries.users.session.commit')
56+
def test_get_token(self, mock_session_commit, mock_session_delete, mock_token):
5557
mock_token.query.filter().first.return_value = None
5658
with self.assertRaises(TokenInvalidError) as context:
5759
get_token('ABC')
60+
mock_session_delete.assert_not_called()
61+
mock_session_commit.assert_not_called()
5862
self.assertEqual(str(context.exception), 'Invalid token')
5963

6064
class MockToken:
@@ -64,4 +68,6 @@ def __init__(self):
6468
mock_token.query.filter().first.return_value = MockToken()
6569
with self.assertRaises(TokenExpiredError) as context:
6670
get_token('ABC')
71+
mock_session_delete.assert_called_once_with(mock_token.query.filter().first())
72+
mock_session_commit.assert_called_once()
6773
self.assertEqual(str(context.exception), 'Token expired')

0 commit comments

Comments
 (0)