diff --git a/caldav_sync/__manifest__.py b/caldav_sync/__manifest__.py index d3a5d54..e3d6e3a 100644 --- a/caldav_sync/__manifest__.py +++ b/caldav_sync/__manifest__.py @@ -21,7 +21,6 @@ 'website': 'https://www.bemade.org', 'depends': ['base', 'calendar'], 'data': [ - 'security/ir.model.access.csv', 'views/res_users_views.xml', 'data/caldav_sync_data.xml', ], diff --git a/caldav_sync/models/calendar_event.py b/caldav_sync/models/calendar_event.py index 0ffb955..e9b1019 100644 --- a/caldav_sync/models/calendar_event.py +++ b/caldav_sync/models/calendar_event.py @@ -30,7 +30,7 @@ class CalendarEvent(models.Model): if not self.env.context.get('caldav_no_sync'): try: _logger.debug(f"Updating event {self.name} in CalDAV") - self.with_context(caldav_no_sync=True).sync_update_to_caldav() + self.sync_update_to_caldav() except Exception as e: _logger.error(f"Failed to update event in CalDAV server: {e}") return res @@ -40,7 +40,7 @@ class CalendarEvent(models.Model): for event in self: try: _logger.debug(f"Removing event {event.name} from CalDAV") - event.with_context(caldav_no_sync=True).sync_remove_from_caldav() + event.sync_remove_from_caldav() except Exception as e: _logger.error(f"Failed to delete event from CalDAV server: {e}") return super(CalendarEvent, self).unlink() @@ -95,7 +95,7 @@ class CalendarEvent(models.Model): if event.caldav_uid: try: _logger.debug(f"Removing CalDAV event {event.caldav_uid}") - caldav_event = calendar.event_by_uid(event.caldav_uid) + caldav_event = calendar.object_by_uid(event.caldav_uid) caldav_event.delete() except caldav.error.NotFoundError: _logger.warning(f"CalDAV event {event.caldav_uid} not found on server.") diff --git a/caldav_sync/security/__init__.py b/caldav_sync/security/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/caldav_sync/security/ir.model.access.csv b/caldav_sync/security/ir.model.access.csv deleted file mode 100644 index ac64680..0000000 --- a/caldav_sync/security/ir.model.access.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_caldav_calendar,access_caldav_calendar,model_caldav_calendar,base.group_user,1,1,1,1 - diff --git a/caldav_sync/tests/test_caldav_sync.py b/caldav_sync/tests/test_caldav_sync.py index 0ec64bf..38e2c27 100644 --- a/caldav_sync/tests/test_caldav_sync.py +++ b/caldav_sync/tests/test_caldav_sync.py @@ -25,28 +25,40 @@ class TestCaldavSync(TransactionCase): def test_create_caldav_event(self, mock_get_caldav_client): mock_client = MagicMock() mock_calendar = MagicMock() - mock_event = MagicMock() - mock_event.id = 'test-uid-12345' # Ensure the id attribute is correctly set - mock_client.calendar.return_value = mock_calendar - mock_calendar.add_event.return_value = mock_event + def add_event_side_effect(ical_event): + caldav_event = MagicMock() + cal = Calendar.from_ical(ical_event) + ical_event_instance = next(iter(cal.subcomponents)) + caldav_event.vobject_instance.vevent.uid.value = ical_event_instance['UID'] + return caldav_event + + mock_calendar.add_event.side_effect = add_event_side_effect mock_get_caldav_client.return_value = mock_client + mock_client.calendar.return_value = mock_calendar - event = self.env['calendar.event'].with_user(self.user).create({ + event_data = { 'name': 'Test Event', 'start': '2024-05-22 10:00:00', 'stop': '2024-05-22 11:00:00', - 'description': 'This is a test event', + 'description': '

This is a test event

', 'location': 'Test Location', - 'create_uid': self.user.id, - }) + } - self.assertEqual(event.name, 'Test Event') - self.assertEqual(event.caldav_uid, 'test-uid-12345') + event = self.env['calendar.event'].with_user(self.user).create(event_data) + + cal = Calendar.from_ical(mock_calendar.add_event.call_args[0][0]) + ical_event = next(iter(cal.subcomponents)) + + self.assertEqual(str(ical_event.get('summary')), event_data['name']) + self.assertEqual(str(ical_event.get('location')), event_data['location']) + self.assertEqual(ical_event.get('description'), event_data['description']) + self.assertIsNotNone(event.caldav_uid) + self.assertEqual(event.caldav_uid, ical_event['UID']) @patch('odoo.addons.caldav_sync.models.calendar_event.CalendarEvent._get_caldav_client') - @patch('odoo.addons.caldav_sync.models.calendar_event.CalendarEvent.sync_to_caldav') - def test_update_caldav_event(self, mock_sync_to_caldav, mock_get_caldav_client): + @patch('odoo.addons.caldav_sync.models.calendar_event.CalendarEvent.sync_update_to_caldav') + def test_update_caldav_event(self, mock_sync_update_to_caldav, mock_get_caldav_client): mock_client = MagicMock() mock_calendar = MagicMock() mock_event = MagicMock() @@ -70,21 +82,19 @@ class TestCaldavSync(TransactionCase): 'start': '2024-05-22 12:00:00', 'stop': '2024-05-22 13:00:00', }) - self.assertEqual(mock_sync_to_caldav.call_count, 2) + mock_sync_update_to_caldav.assert_called_once() self.assertEqual(event.name, 'Updated Test Event') self.assertEqual(event.start, datetime(2024, 5, 22, 12, 0)) @patch('odoo.addons.caldav_sync.models.calendar_event.CalendarEvent._get_caldav_client') - @patch('odoo.addons.caldav_sync.models.calendar_event.CalendarEvent.remove_from_caldav') - def test_delete_caldav_event(self, mock_remove_from_caldav, mock_get_caldav_client): + def test_delete_caldav_event(self, mock_get_caldav_client): mock_client = MagicMock() mock_calendar = MagicMock() mock_event = MagicMock() - mock_event.id = 'test-uid-12345' mock_client.calendar.return_value = mock_calendar - mock_calendar.add_event.return_value = mock_event + mock_calendar.object_by_uid.return_value = mock_event mock_get_caldav_client.return_value = mock_client event = self.env['calendar.event'].with_user(self.user).create({ @@ -95,9 +105,11 @@ class TestCaldavSync(TransactionCase): 'location': 'Test Location', 'create_uid': self.user.id, }) - + uid = event.caldav_uid event.with_user(self.user).unlink() - mock_remove_from_caldav.assert_called() + + mock_calendar.object_by_uid.assert_called_once_with(uid) + mock_event.delete.assert_called_once() @patch('odoo.addons.caldav_sync.models.calendar_event.CalendarEvent.sync_event_from_ical') def test_poll_caldav_server(self, mock_sync_event_from_ical):