120 lines
5.0 KiB
Python
120 lines
5.0 KiB
Python
import sys
|
|
from pathlib import Path
|
|
|
|
# Add api directory to path
|
|
api_dir = Path(__file__).parent.parent / 'api'
|
|
sys.path.insert(0, str(api_dir))
|
|
import unittest
|
|
import tempfile
|
|
import shutil
|
|
import os
|
|
from unittest.mock import patch, MagicMock
|
|
from file_manager import FileManager
|
|
|
|
class TestFileManager(unittest.TestCase):
|
|
def setUp(self):
|
|
self.test_dir = tempfile.mkdtemp()
|
|
self.data_dir = os.path.join(self.test_dir, 'data')
|
|
self.config_dir = os.path.join(self.test_dir, 'config')
|
|
os.makedirs(self.data_dir, exist_ok=True)
|
|
os.makedirs(self.config_dir, exist_ok=True)
|
|
self.manager = FileManager(data_dir=self.data_dir, config_dir=self.config_dir)
|
|
|
|
def tearDown(self):
|
|
shutil.rmtree(self.test_dir)
|
|
|
|
def test_initialization(self):
|
|
self.assertTrue(os.path.exists(self.manager.files_dir))
|
|
self.assertTrue(os.path.exists(self.manager.webdav_dir))
|
|
|
|
def test_create_and_delete_user(self):
|
|
result = self.manager.create_user('testuser', 'password')
|
|
self.assertTrue(result)
|
|
result = self.manager.delete_user('testuser')
|
|
self.assertTrue(result)
|
|
|
|
def test_list_users_empty(self):
|
|
users = self.manager.list_users()
|
|
self.assertIsInstance(users, list)
|
|
self.assertEqual(len(users), 0)
|
|
|
|
def test_create_and_delete_folder(self):
|
|
self.manager.create_user('testuser', 'password')
|
|
result = self.manager.create_folder('testuser', 'TestFolder')
|
|
self.assertTrue(result)
|
|
result = self.manager.delete_folder('testuser', 'TestFolder')
|
|
self.assertTrue(result)
|
|
|
|
def test_upload_download_delete_file(self):
|
|
self.manager.create_user('testuser', 'password')
|
|
self.manager.create_folder('testuser', 'TestFolder')
|
|
file_data = b'Hello, world!'
|
|
result = self.manager.upload_file('testuser', 'TestFolder/hello.txt', file_data)
|
|
self.assertTrue(result)
|
|
downloaded = self.manager.download_file('testuser', 'TestFolder/hello.txt')
|
|
self.assertEqual(downloaded, file_data)
|
|
result = self.manager.delete_file('testuser', 'TestFolder/hello.txt')
|
|
self.assertTrue(result)
|
|
|
|
def test_list_files(self):
|
|
self.manager.create_user('testuser', 'password')
|
|
self.manager.create_folder('testuser', 'TestFolder')
|
|
self.manager.upload_file('testuser', 'TestFolder/hello.txt', b'abc')
|
|
files = self.manager.list_files('testuser', 'TestFolder')
|
|
self.assertIsInstance(files, list)
|
|
self.assertEqual(len(files), 1)
|
|
self.assertEqual(files[0]['name'], 'hello.txt')
|
|
|
|
@patch('subprocess.run')
|
|
def test_get_webdav_status(self, mock_run):
|
|
mock_run.return_value.stdout = 'cell-webdav\n'
|
|
mock_run.return_value.returncode = 0
|
|
status = self.manager.get_webdav_status()
|
|
self.assertIsInstance(status, dict)
|
|
self.assertIn('webdav_running', status)
|
|
|
|
@patch('requests.get')
|
|
def test_test_webdav_connectivity(self, mock_get):
|
|
mock_get.return_value.status_code = 200
|
|
result = self.manager.test_webdav_connectivity()
|
|
self.assertIsInstance(result, dict)
|
|
mock_get.side_effect = Exception('HTTP error')
|
|
result = self.manager.test_webdav_connectivity()
|
|
self.assertIn('http', result)
|
|
|
|
@patch('subprocess.run')
|
|
def test_get_webdav_logs(self, mock_run):
|
|
mock_run.return_value.stdout = 'log line\n'
|
|
mock_run.return_value.returncode = 0
|
|
logs = self.manager.get_webdav_logs(10)
|
|
self.assertIsInstance(logs, str)
|
|
self.assertIn('log line', logs)
|
|
|
|
def test_backup_and_restore_user_files(self):
|
|
self.manager.create_user('testuser', 'password')
|
|
backup_path = os.path.join(self.test_dir, 'backup.zip')
|
|
result = self.manager.backup_user_files('testuser', backup_path)
|
|
self.assertTrue(result)
|
|
result = self.manager.restore_user_files('testuser', backup_path)
|
|
self.assertTrue(result)
|
|
|
|
def test_get_status(self):
|
|
status = self.manager.get_status()
|
|
self.assertIsInstance(status, dict)
|
|
self.assertIn('status', status)
|
|
|
|
def test_error_handling(self):
|
|
# Force errors by passing invalid arguments, should return False or empty/None
|
|
self.assertFalse(self.manager.create_user('', ''))
|
|
self.assertFalse(self.manager.delete_user(''))
|
|
self.assertFalse(self.manager.create_folder('', ''))
|
|
self.assertFalse(self.manager.delete_folder('', ''))
|
|
self.assertFalse(self.manager.upload_file('', '', b''))
|
|
self.assertIsNone(self.manager.download_file('', ''))
|
|
self.assertFalse(self.manager.delete_file('', ''))
|
|
self.assertEqual(self.manager.list_files(''), [])
|
|
self.assertFalse(self.manager.backup_user_files('', ''))
|
|
self.assertFalse(self.manager.restore_user_files('', ''))
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main() |