Source code for mdvtools.dbutils.test.unit.test_dbservice

import unittest
from unittest.mock import patch, MagicMock
from mdvtools.dbutils.dbservice import ProjectService, FileService
#from mdvtools.dbutils.dbmodels import Project, File
from datetime import datetime

[docs] class TestProjectService(unittest.TestCase): @patch('mdvtools.dbutils.dbmodels.Project.query') @patch('mdvtools.dbutils.dbmodels.Project.query')
[docs] def test_get_active_projects_success(self, mock_query): mock_query.filter_by.return_value.all.return_value = [MagicMock(), MagicMock()] result = ProjectService.get_active_projects() self.assertEqual(len(result), 2)
@patch('mdvtools.dbutils.dbmodels.db.session.query') @patch('mdvtools.dbutils.dbmodels.db.func.max') @patch('mdvtools.dbutils.dbmodels.db.session.query') @patch('mdvtools.dbutils.dbmodels.db.func.max')
[docs] def test_get_next_project_id_success(self, mock_max, mock_query): mock_max.return_value = 5 mock_query.return_value.scalar.return_value = 5 result = ProjectService.get_next_project_id() self.assertEqual(result, 6)
@patch('mdvtools.dbutils.dbmodels.db.session') @patch('mdvtools.dbutils.dbmodels.Project') @patch('mdvtools.dbutils.dbmodels.db.session') @patch('mdvtools.dbutils.dbmodels.Project')
[docs] def test_add_new_project_success(self, mock_project, mock_session): mock_session.add = MagicMock() mock_session.commit = MagicMock() mock_project.return_value = MagicMock(id=1) result = ProjectService.add_new_project("/path/to/project", "Test Project") self.assertIsNotNone(result) self.assertEqual(result.name, "Test Project")
@patch('project_service.Project.query')
[docs] def test_get_project_by_id_success(self, mock_query): mock_query.get.return_value = MagicMock() result = ProjectService.get_project_by_id(1) self.assertIsNotNone(result)
@patch('project_service.Project.query') @patch('project_service.db.session')
[docs] def test_soft_delete_project_success(self, mock_session, mock_query): mock_query.get.return_value = MagicMock(is_deleted=False) mock_session.commit = MagicMock() result = ProjectService.soft_delete_project(1) self.assertTrue(result)
# Failure scenarios @patch('project_service.Project.query')
[docs] def test_get_active_projects_failure(self, mock_query): mock_query.filter_by.side_effect = Exception("Database error") result = ProjectService.get_active_projects() self.assertEqual(result, [])
@patch('project_service.db.session.query') @patch('project_service.db.func.max')
[docs] def test_get_next_project_id_failure(self, mock_max, mock_query): mock_max.side_effect = Exception("Database error") mock_query.return_value.scalar.return_value = None result = ProjectService.get_next_project_id() self.assertIsNone(result)
@patch('project_service.db.session') @patch('project_service.Project')
[docs] def test_add_new_project_failure(self, mock_project, mock_session): mock_session.add.side_effect = Exception("Database error") result = ProjectService.add_new_project("/path/to/project") self.assertIsNone(result)
@patch('project_service.Project.query')
[docs] def test_get_project_by_id_failure(self, mock_query): mock_query.get.side_effect = Exception("Database error") result = ProjectService.get_project_by_id(1) self.assertIsNone(result)
@patch('project_service.Project.query') @patch('project_service.db.session')
[docs] def test_soft_delete_project_failure(self, mock_session, mock_query): mock_query.get.return_value = MagicMock(is_deleted=False) mock_session.commit.side_effect = Exception("Database error") result = ProjectService.soft_delete_project(1) self.assertFalse(result)
[docs] class TestFileService(unittest.TestCase): @patch('project_service.FileService.get_file_by_path_and_project') @patch('project_service.db.session')
[docs] def test_add_or_update_file_in_project_success(self, mock_session, mock_get_file): mock_get_file.return_value = None mock_session.add = MagicMock() mock_session.commit = MagicMock() result = FileService.add_or_update_file_in_project("file.txt", "/path/to/file.txt", 1) self.assertIsNotNone(result) self.assertEqual(result.name, "file.txt")
@patch('project_service.FileService.get_file_by_path_and_project') @patch('project_service.db.session')
[docs] def test_add_or_update_file_in_project_update_success(self, mock_session, mock_get_file): existing_file = MagicMock(name="file.txt", update_timestamp=datetime.now()) mock_get_file.return_value = existing_file mock_session.commit = MagicMock() result = FileService.add_or_update_file_in_project("new_name.txt", "/path/to/file.txt", 1) self.assertIsNotNone(result) self.assertEqual(result.name, "new_name.txt")
@patch('project_service.File.query')
[docs] def test_get_file_by_path_and_project_success(self, mock_query): mock_query.filter_by.return_value.first.return_value = MagicMock() result = FileService.get_file_by_path_and_project("/path/to/file.txt", 1) self.assertIsNotNone(result)
@patch('project_service.File.query')
[docs] def test_file_exists_in_project_success(self, mock_query): mock_query.filter_by.return_value.first.return_value = MagicMock() result = FileService.file_exists_in_project("/path/to/file.txt", 1) self.assertTrue(result)
@patch('project_service.File.query')
[docs] def test_get_files_by_project_success(self, mock_query): mock_query.filter_by.return_value.all.return_value = [MagicMock(), MagicMock()] result = FileService.get_files_by_project(1) self.assertEqual(len(result), 2)
@patch('project_service.File.query') @patch('project_service.db.session')
[docs] def test_delete_files_by_project_success(self, mock_session, mock_query): mock_query.filter_by.return_value.all.return_value = [MagicMock(), MagicMock()] mock_session.delete = MagicMock() mock_session.commit = MagicMock() result = FileService.delete_files_by_project(1) self.assertTrue(result)
@patch('project_service.File.query') @patch('project_service.db.session')
[docs] def test_update_file_timestamp_success(self, mock_session, mock_query): mock_query.get.return_value = MagicMock() mock_session.commit = MagicMock() result = FileService.update_file_timestamp(1) self.assertTrue(result)
# Failure scenarios @patch('project_service.FileService.get_file_by_path_and_project') @patch('project_service.db.session')
[docs] def test_add_or_update_file_in_project_failure(self, mock_session, mock_get_file): mock_get_file.return_value = None mock_session.add.side_effect = Exception("Database error") result = FileService.add_or_update_file_in_project("file.txt", "/path/to/file.txt", 1) self.assertIsNone(result)
@patch('project_service.FileService.get_file_by_path_and_project') @patch('project_service.db.session')
[docs] def test_add_or_update_file_in_project_update_failure(self, mock_session, mock_get_file): existing_file = MagicMock(name="file.txt", update_timestamp=datetime.now()) mock_get_file.return_value = existing_file mock_session.commit.side_effect = Exception("Database error") result = FileService.add_or_update_file_in_project("new_name.txt", "/path/to/file.txt", 1) self.assertIsNone(result)
@patch('project_service.File.query')
[docs] def test_get_file_by_path_and_project_failure(self, mock_query): mock_query.filter_by.side_effect = Exception("Database error") result = FileService.get_file_by_path_and_project("/path/to/file.txt", 1) self.assertIsNone(result)
@patch('project_service.File.query')
[docs] def test_file_exists_in_project_failure(self, mock_query): mock_query.filter_by.side_effect = Exception("Database error") result = FileService.file_exists_in_project("/path/to/file.txt", 1) self.assertFalse(result)
@patch('project_service.File.query')
[docs] def test_get_files_by_project_failure(self, mock_query): mock_query.filter_by.side_effect = Exception("Database error") result = FileService.get_files_by_project(1) self.assertEqual(result, [])
@patch('project_service.File.query') @patch('project_service.db.session')
[docs] def test_delete_files_by_project_failure(self, mock_session, mock_query): mock_query.filter_by.return_value.all.return_value = [MagicMock(), MagicMock()] mock_session.delete.side_effect = Exception("Database error") result = FileService.delete_files_by_project(1) self.assertFalse(result)
@patch('project_service.File.query') @patch('project_service.db.session')
[docs] def test_update_file_timestamp_failure(self, mock_session, mock_query): mock_query.get.return_value = MagicMock() mock_session.commit.side_effect = Exception("Database error") result = FileService.update_file_timestamp(1) self.assertFalse(result)
if __name__ == '__main__': unittest.main()