feat(scheduling): expose invitation delivery capability

This commit is contained in:
2026-07-22 04:01:56 +02:00
parent 95c9f654e1
commit ed39f83688
4 changed files with 128 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ from __future__ import annotations
import unittest
from datetime import datetime, timezone
from unittest.mock import patch
from sqlalchemy import create_engine
from sqlalchemy.orm import Session, sessionmaker
@@ -184,7 +185,11 @@ class SchedulingParticipantPrivacyTests(unittest.TestCase):
def test_secure_default_returns_own_row_and_aggregate_counts(self) -> None:
request = self._request()
payload = self._participant_projection(request)
with patch(
"govoplan_scheduling.backend.service.notification_dispatch_provider",
return_value=object(),
):
payload = self._participant_projection(request)
response = SchedulingRequestResponse.model_validate(payload)
self.assertEqual(request.participant_visibility, "aggregates_only")
@@ -212,6 +217,7 @@ class SchedulingParticipantPrivacyTests(unittest.TestCase):
self.assertIsNone(response.create_calendar_event_on_decision)
self.assertIsNone(response.calendar_event_id)
self.assertIsNone(response.public_participation_policy_enforcement_available)
self.assertIsNone(response.participant_invitation_delivery_available)
self.assertEqual(response.metadata, {})
slot = response.slots[0]
self.assertIsNone(slot.poll_option_id)
@@ -287,6 +293,22 @@ class SchedulingParticipantPrivacyTests(unittest.TestCase):
"connector-uid-internal",
)
self.assertEqual(response.slots[0].tentative_hold_event_id, "hold-internal")
self.assertFalse(response.participant_invitation_delivery_available)
with patch(
"govoplan_scheduling.backend.service.notification_dispatch_provider",
return_value=object(),
):
delivery_enabled = SchedulingRequestResponse.model_validate(
scheduling_request_response(
request,
actor_ids=("manager-1",),
actor_user_id="manager-1",
can_manage=True,
)
)
self.assertTrue(delivery_enabled.participant_invitation_delivery_available)
def test_optional_policy_can_reduce_but_cannot_broaden_visibility(self) -> None:
restricting_policy = _PrivacyPolicy("aggregates_only")