Implement Open-Xchange calendar profiles
This commit is contained in:
@@ -8,6 +8,7 @@ from sqlalchemy.orm import sessionmaker
|
||||
|
||||
from govoplan_access.backend.db import models as access_models # noqa: F401
|
||||
from govoplan_calendar.backend.capabilities import (
|
||||
SqlCalendarExternalProfileProvider,
|
||||
SqlCalendarInvitationProvider,
|
||||
SqlCalendarSchedulingProvider,
|
||||
)
|
||||
@@ -16,6 +17,7 @@ from govoplan_calendar.backend.service import create_calendar
|
||||
from govoplan_core.core.calendar import (
|
||||
CalendarCapabilityError,
|
||||
CalendarEventRequest,
|
||||
CalendarExternalProfileRequest,
|
||||
CalendarInvitationAttendeeRequest,
|
||||
CalendarInvitationRequest,
|
||||
)
|
||||
@@ -40,6 +42,64 @@ class CalendarSchedulingCapabilityTests(unittest.TestCase):
|
||||
)
|
||||
|
||||
|
||||
class CalendarExternalProfileCapabilityTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.engine = create_engine("sqlite:///:memory:")
|
||||
create_scope_tables(self.engine)
|
||||
Base.metadata.create_all(bind=self.engine)
|
||||
self.Session = sessionmaker(bind=self.engine)
|
||||
self.session = self.Session()
|
||||
self.session.add(Tenant(id="tenant-1", slug="tenant-1", name="Tenant"))
|
||||
self.calendar = create_calendar(
|
||||
self.session,
|
||||
tenant_id="tenant-1",
|
||||
user_id=None,
|
||||
payload=CalendarCollectionCreateRequest(name="Open-Xchange"),
|
||||
)
|
||||
self.provider = SqlCalendarExternalProfileProvider()
|
||||
|
||||
def tearDown(self) -> None:
|
||||
self.session.close()
|
||||
Base.metadata.drop_all(bind=self.engine)
|
||||
self.engine.dispose()
|
||||
|
||||
def test_open_xchange_profile_uses_caldav_and_retains_mapping_refs(self) -> None:
|
||||
configured = self.provider.configure_profile(
|
||||
self.session,
|
||||
tenant_id="tenant-1",
|
||||
user_id=None,
|
||||
request=CalendarExternalProfileRequest(
|
||||
profile_kind="open-xchange",
|
||||
calendar_id=self.calendar.id,
|
||||
endpoint_url="https://groupware.example.test/caldav/team/",
|
||||
connector_profile_ref="connector:ox-main",
|
||||
identity_mapping_ref="idm:ox-main",
|
||||
resource_calendar_ref="ox-resource:room-42",
|
||||
),
|
||||
)
|
||||
|
||||
source = self.calendar.metadata_["sync_source_id"]
|
||||
self.session.refresh(self.calendar)
|
||||
self.assertEqual(configured.source_id, source)
|
||||
self.assertEqual("caldav", configured.transport_kind)
|
||||
self.assertEqual("resource", self.calendar.owner_type)
|
||||
self.assertEqual("ox-resource:room-42", self.calendar.owner_id)
|
||||
self.assertEqual("open_xchange", self.calendar.metadata_["integration_profile"])
|
||||
|
||||
def test_unsupported_profile_is_rejected(self) -> None:
|
||||
with self.assertRaisesRegex(CalendarCapabilityError, "Unsupported"):
|
||||
self.provider.configure_profile(
|
||||
self.session,
|
||||
tenant_id="tenant-1",
|
||||
user_id=None,
|
||||
request=CalendarExternalProfileRequest(
|
||||
profile_kind="unknown",
|
||||
calendar_id=self.calendar.id,
|
||||
endpoint_url="https://groupware.example.test/caldav/team/",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class CalendarInvitationCapabilityTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.engine = create_engine("sqlite:///:memory:")
|
||||
|
||||
Reference in New Issue
Block a user