136 lines
5.7 KiB
Python
136 lines
5.7 KiB
Python
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()
|
|
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
|
|
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,
|
|
})
|
|
|
|
self.assertEqual(event.name, 'Test Event')
|
|
self.assertEqual(event.caldav_uid, 'test-uid-12345')
|
|
|
|
@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):
|
|
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',
|
|
})
|
|
self.assertEqual(mock_sync_to_caldav.call_count, 2)
|
|
|
|
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):
|
|
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).unlink()
|
|
mock_remove_from_caldav.assert_called()
|
|
|
|
@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()
|
|
|
|
@patch('odoo.addons.caldav_sync.models.calendar_event._logger')
|
|
def test_poll_caldav_server_with_exception(self, mock_logger):
|
|
with patch('caldav.DAVClient') as MockClient:
|
|
mock_client = MockClient.return_value
|
|
mock_client.calendar.side_effect = Exception('Invalid credentials')
|
|
|
|
self.env['calendar.event'].poll_caldav_server()
|
|
mock_logger.error.assert_any_call('Failed to poll CalDAV server for user Test User: Invalid credentials')
|