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 from calendar_manager import CalendarManager class TestCalendarManager(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 = CalendarManager(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.calendar_dir)) self.assertTrue(os.path.exists(self.manager.radicale_dir)) def test_ensure_config_exists(self): config_file = os.path.join(self.manager.radicale_dir, 'config') if os.path.exists(config_file): os.remove(config_file) self.manager._ensure_config_exists() self.assertTrue(os.path.exists(config_file)) def test_generate_radicale_config(self): config_file = os.path.join(self.manager.radicale_dir, 'config') if os.path.exists(config_file): os.remove(config_file) self.manager._generate_radicale_config() self.assertTrue(os.path.exists(config_file)) with open(config_file) as f: content = f.read() self.assertIn('[server]', content) self.assertIn('hosts = 0.0.0.0:5232', content) def test_get_status(self): status = self.manager.get_status() self.assertIsInstance(status, dict) self.assertIn('status', status) @patch.object(CalendarManager, 'create_calendar', return_value=True) @patch.object(CalendarManager, 'remove_calendar', return_value=True) def test_create_and_remove_calendar(self, mock_remove, mock_create): result = self.manager.create_calendar('testuser', 'testcal') self.assertTrue(result) result = self.manager.remove_calendar('testuser', 'testcal') self.assertTrue(result) @patch.object(CalendarManager, 'add_event', return_value=True) @patch.object(CalendarManager, 'remove_event', return_value=True) def test_add_and_remove_event(self, mock_remove, mock_add): result = self.manager.add_event('testuser', 'testcal', {'summary': 'Test'}) self.assertTrue(result) result = self.manager.remove_event('testuser', 'testcal', 'dummyuid') self.assertTrue(result) def test_error_handling(self): # Force errors by passing invalid arguments, should return False self.assertFalse(self.manager.create_calendar(None, None)) self.assertFalse(self.manager.add_event(None, None, None)) self.assertFalse(self.manager.remove_calendar(None, None)) self.assertFalse(self.manager.remove_event(None, None, None)) if __name__ == '__main__': unittest.main()