import unittest
from unittest.mock import patch, MagicMock
from datetime import datetime
from apps.services.user import UserManager, User
from apps.db.mysql import User as UserModel, MysqlDB
class TestUserManager(unittest.TestCase):
@patch('apps.models.mysql_db.MysqlDB')
@patch('apps.logger.get_logger')
def test_add_userinfo_failure(self, mock_get_logger, mock_mysql_db):
mock_logger = MagicMock()
UserManager.logger = mock_logger
userinfo = User(user_sub="test_user_sub", organization="test_org", revision_number="123")
mock_session = MagicMock()
mock_get_session = MagicMock(return_value=mock_session)
mock_mysql_db.return_value.get_session = mock_get_session
mock_session.__enter__.return_value = mock_session
mock_session.__exit__.return_value = False
UserManager.add_userinfo(userinfo)
mock_logger.info.assert_called_once_with("Add userinfo failed due to error: __enter__")
@patch.object(MysqlDB, 'get_session')
def test_get_userinfo_by_user_sub_success(self, mock_get_session):
user_sub = "test_user_sub"
revision_number = 1
mock_query = MagicMock()
mock_user = UserModel(user_sub=user_sub, revision_number=revision_number)
mock_query.filter.return_value.first.side_effect = [mock_user, None]
mock_session = MagicMock(query=mock_query)
mock_get_session.return_value.__enter__.return_value = mock_session
result = UserManager.get_userinfo_by_user_sub(user_sub)
self.assertIsNotNone(result)
@patch('apps.models.mysql_db.MysqlDB')
@patch('apps.manager.user_manager.UserManager.get_userinfo_by_user_sub')
def test_update_userinfo_by_user_sub_success(self, mock_get_userinfo, mock_mysql_db):
userinfo = User(user_sub="test_user_sub", organization="test_org", revision_number="123")
mock_get_userinfo.return_value = userinfo
mock_session = MagicMock()
mock_query = MagicMock()
mock_query.filter.return_value.first.return_value = None
mock_session.query.return_value = mock_query
mock_mysql_db_instance = mock_mysql_db.return_value
mock_mysql_db_instance.get_session.return_value = mock_session
updated_userinfo = UserManager.update_refresh_revision_by_user_sub(userinfo, refresh_revision=True)
self.assertEqual(updated_userinfo.revision_number, userinfo.revision_number)
if __name__ == '__main__':
unittest.main()