diff --git a/caldav_sync/__manifest__.py b/caldav_sync/__manifest__.py index 8528768..ddc3da0 100644 --- a/caldav_sync/__manifest__.py +++ b/caldav_sync/__manifest__.py @@ -8,7 +8,7 @@ { "name": "CalDAV Synchronization", - "version": "17.0.0.5.6", + "version": "17.0.0.5.7", "license": "LGPL-3", "category": "Productivity", "summary": "Synchronize Odoo Calendar Events with CalDAV Servers", diff --git a/caldav_sync/models/calendar_event.py b/caldav_sync/models/calendar_event.py index a117cf0..ecb732f 100644 --- a/caldav_sync/models/calendar_event.py +++ b/caldav_sync/models/calendar_event.py @@ -1,5 +1,5 @@ import uuid -from odoo import models, api, fields +from odoo import models, api, fields, Command from odoo.exceptions import UserError import caldav import logging @@ -391,7 +391,7 @@ class CalendarEvent(models.Model): changed_vals.update( { "partner_ids", - values.pop("partner_ids"), + [Command.set(values.pop("partner_ids"))], } ) diff --git a/caldav_sync/models/res_users.py b/caldav_sync/models/res_users.py index e555f64..904c59e 100644 --- a/caldav_sync/models/res_users.py +++ b/caldav_sync/models/res_users.py @@ -5,7 +5,7 @@ class ResUsers(models.Model): caldav_calendar_url = fields.Char(string='CalDAV Calendar URL') caldav_username = fields.Char(string='CalDAV Username') - caldav_password = fields.Char(string='CalDAV Password', password=True) + caldav_password = fields.Char(string='CalDAV Password') def is_caldav_enabled(self): self.ensure_one() diff --git a/caldav_sync/tests/__init__.py b/caldav_sync/tests/__init__.py deleted file mode 100644 index 7b0bb1f..0000000 --- a/caldav_sync/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import test_caldav_sync diff --git a/caldav_sync/tests/test_caldav_sync.py b/caldav_sync/tests/test_caldav_sync.py deleted file mode 100644 index 15cb617..0000000 --- a/caldav_sync/tests/test_caldav_sync.py +++ /dev/null @@ -1,167 +0,0 @@ -from odoo.tests.common import TransactionCase -from unittest.mock import patch, MagicMock -import caldav -from icalendar import Calendar, Event -from datetime import datetime -import logging - -_logger = logging.getLogger(__name__) - - -class TestCaldavSync(TransactionCase): - - def setUp(self): - super(TestCaldavSync, self).setUp() - self.user = self.env["res.users"].create( - { - "name": "Test User", - "login": "testuser", - "caldav_calendar_url": "http://test.calendar.url", - "caldav_username": "testuser", - "caldav_password": "password", - } - ) - self.env = self.env(context=dict(self.env.context, no_reset_password=True)) - - @patch( - "odoo.addons.caldav_sync.models.calendar_event.CalendarEvent._get_caldav_client" - ) - def test_create_caldav_event(self, mock_get_caldav_client): - mock_client = MagicMock() - mock_calendar = MagicMock() - - 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_data = { - "name": "Test Event", - "start": "2024-05-22 10:00:00", - "stop": "2024-05-22 11:00:00", - "description": "This is a test event", - "location": "Test Location", - } - - 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_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() - mock_event.id = "test-uid-12345" - - mock_client.calendar.return_value = mock_calendar - mock_calendar.add_event.return_value = mock_event - mock_get_caldav_client.return_value = mock_client - - event = ( - self.env["calendar.event"] - .with_user(self.user) - .create( - { - "name": "Test Event", - "start": "2024-05-22 10:00:00", - "stop": "2024-05-22 11:00:00", - "description": "This is a test event", - "location": "Test Location", - "create_uid": self.user.id, - } - ) - ) - - event.with_user(self.user).write( - { - "name": "Updated Test Event", - "start": "2024-05-22 12:00:00", - "stop": "2024-05-22 13:00:00", - } - ) - 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" - ) - def test_delete_caldav_event(self, mock_get_caldav_client): - mock_client = MagicMock() - mock_calendar = MagicMock() - mock_event = MagicMock() - - mock_client.calendar.return_value = mock_calendar - 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( - { - "name": "Test Event", - "start": "2024-05-22 10:00:00", - "stop": "2024-05-22 11:00:00", - "description": "This is a test event", - "location": "Test Location", - "create_uid": self.user.id, - } - ) - ) - uid = event.caldav_uid - event.with_user(self.user).unlink() - - 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): - mock_sync_event_from_ical.return_value = None - with patch("caldav.DAVClient") as MockClient: - mock_client = MockClient.return_value - mock_calendar = mock_client.calendar.return_value - mock_event = MagicMock() - - # Create a Calendar object and add an Event to it - cal = Calendar() - event = Event() - event.add("uid", "test-uid-12345") - event.add("dtstamp", datetime(2024, 5, 22, 10, 0, 0)) - event.add("dtstart", datetime(2024, 5, 22, 10, 0, 0)) - event.add("dtend", datetime(2024, 5, 22, 11, 0, 0)) - event.add("summary", "Polled Event") - event.add("description", "This event was polled from CalDAV") - event.add("location", "Polled Location") - cal.add_component(event) - - # Set the mock event's icalendar_instance to the iCal string - mock_event.icalendar_instance = Calendar.from_ical(cal.to_ical()) - mock_calendar.events.return_value = [mock_event] - - self.env["calendar.event"].poll_caldav_server() - mock_sync_event_from_ical.assert_called_once()