fix(caldav): ignorer les événements gérés sans UID #51

Merged
Codex merged 1 commits from fix/issue-47-caldav-missing-uid into main 2026-09-13 00:13:29 +02:00
3 changed files with 38 additions and 3 deletions
Showing only changes of commit 211dd1af1d - Show all commits
+2 -2
View File
@@ -156,7 +156,7 @@
"filename": "tests/unit/test_caldav_gateway.py",
"hashed_secret": "1c58bd92003bbaa0538e249fff6ee19a270dec5f",
"is_verified": false,
"line_number": 763
"line_number": 794
}
],
"tests/unit/test_caldav_security.py": [
@@ -185,5 +185,5 @@
}
]
},
"generated_at": "2026-09-12T17:57:39Z"
"generated_at": "2026-09-12T22:12:56Z"
}
+5 -1
View File
@@ -191,7 +191,11 @@ class CalDAVGateway:
for vevent in component.walk("VEVENT"):
managed = vevent.get(MANAGED_PROPERTY)
if managed is not None and str(managed) == MANAGED_VALUE:
raw_uid = str(vevent.get("UID"))
raw_uid_value = vevent.get("UID")
if raw_uid_value is None or not str(raw_uid_value).strip():
logger.warning("Événement CalDAV géré sans UID ignoré.")
continue
raw_uid = str(raw_uid_value)
canonical_uid = normalize_pronote_uid(raw_uid)
result.append((raw_uid, canonical_uid, vevent))
except Exception as exc:
+31
View File
@@ -327,6 +327,37 @@ def test_list_managed_events_returns_only_managed(
assert str(vevent.get("UID")) == "test-uid-123"
def test_list_managed_events_ignores_managed_event_without_uid(
caldav_settings: CalDAVSettings,
mock_client_factory: MagicMock,
caplog: LogCaptureFixture,
) -> None:
"""Ignore un événement géré sans UID et ne le transmet pas au planificateur.
:param caldav_settings: Paramètres CalDAV valides.
:param mock_client_factory: Usine de clients CalDAV mockée.
:param caplog: Capture des journaux de diagnostic.
:return: None
"""
gateway = CalDAVGateway(caldav_settings, client_factory=mock_client_factory)
gateway.connect()
malformed_event = Event()
malformed_event.add("SUMMARY", "Événement sans identifiant")
malformed_event.add(MANAGED_PROPERTY, MANAGED_VALUE)
remote_event = MagicMock()
remote_event.icalendar_component = Calendar()
remote_event.icalendar_component.add_component(malformed_event)
calendar = mock_client_factory.return_value.principal.return_value.calendars.return_value[0]
calendar.search.return_value = [remote_event]
with caplog.at_level(logging.WARNING):
result = gateway.list_managed_events(datetime(2026, 1, 1), datetime(2026, 12, 31))
assert result == []
assert "sans UID ignoré" in caplog.text
def test_list_managed_events_not_connected_raises(
caldav_settings: CalDAVSettings,
) -> None: