* Fixed an issue where accepting events from an external organizer would send emails to the all event attendees upon synchronization. * Corrected the data model for events where multiple Odoo users are attendees for the same event. Now, only one event is created in Odoo, with all the attendees on the same event. This conforms to Odoo's existing calendar event data model. * Updated the setting of the organizer field (user_id) on the calendar events upon synchronization. Previously, the organizer field was always set to the current user whose events were being synchronized. Now, it is set based on the ORGANIZER parameter of the iCalendar event, if present. If not present, it defaults to the current synchronizing user. In the case that the organizer is external, the user_id field is left blank.
79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
from odoo.tests import TransactionCase
|
|
from unittest.mock import patch, MagicMock
|
|
from .common import CaldavTestCommon
|
|
import caldav
|
|
import logging
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class TestUsers(TransactionCase, CaldavTestCommon):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
|
|
def test_caldav_enabled_false_without_url(self):
|
|
# Create user with no CalDAV credentials
|
|
user = self._generate_user("test")
|
|
self.assertFalse(user.is_caldav_enabled)
|
|
|
|
def test_caldav_enabled_false_without_credentials(self):
|
|
"""Test that is_caldav_enabled is False when any required field is missing."""
|
|
# Test with missing URL - has username and password only
|
|
user1 = self._generate_user(
|
|
"test1", caldav_username="user1", caldav_password="pass1"
|
|
)
|
|
self.assertFalse(user1.is_caldav_enabled)
|
|
|
|
# Test with missing username - has password and URL only
|
|
user2 = self._generate_user(
|
|
"test2", caldav_password="pass2", caldav_url="https://example.com"
|
|
)
|
|
self.assertFalse(user2.is_caldav_enabled)
|
|
|
|
# Test with missing password - has username and URL only
|
|
user3 = self._generate_user(
|
|
"test3", caldav_username="user3", caldav_url="https://example.com"
|
|
)
|
|
self.assertFalse(user3.is_caldav_enabled)
|
|
|
|
@patch("caldav.DAVClient")
|
|
def test_caldav_enabled_success(self, MockDAVClient):
|
|
"""Test that is_caldav_enabled is True when connection succeeds."""
|
|
# Create user with name 'test' and set CalDAV credentials
|
|
user = self._generate_user(
|
|
"test",
|
|
caldav_username="user",
|
|
caldav_password="pass",
|
|
caldav_url="https://example.com/abc123",
|
|
)
|
|
|
|
# Mock successful connection
|
|
mock_client = MockDAVClient.return_value
|
|
mock_principal = MagicMock()
|
|
mock_client.principal.return_value = mock_principal
|
|
|
|
# Compute should succeed and set is_caldav_enabled to True
|
|
user._compute_is_caldav_enabled()
|
|
self.assertTrue(user.is_caldav_enabled)
|
|
|
|
@patch("caldav.DAVClient")
|
|
def test_caldav_enabled_connection_fails(self, MockDAVClient):
|
|
"""Test that is_caldav_enabled is False when connection fails."""
|
|
user = self._generate_user(
|
|
"test",
|
|
caldav_username="user",
|
|
caldav_password="pass",
|
|
caldav_url="https://example.com/abc123",
|
|
)
|
|
|
|
# Mock failed connection
|
|
mock_client = MockDAVClient.return_value
|
|
mock_client.principal.side_effect = caldav.error.AuthorizationError(
|
|
"Invalid credentials"
|
|
)
|
|
|
|
# Should handle the error gracefully and set is_caldav_enabled to False
|
|
with self.assertLogs("odoo.addons.caldav_sync.models.res_users", "ERROR"):
|
|
user._compute_is_caldav_enabled()
|
|
self.assertFalse(user.is_caldav_enabled)
|