fix(caldav): ignorer les événements gérés sans UID
This commit is contained in:
+2
-2
@@ -156,7 +156,7 @@
|
|||||||
"filename": "tests/unit/test_caldav_gateway.py",
|
"filename": "tests/unit/test_caldav_gateway.py",
|
||||||
"hashed_secret": "1c58bd92003bbaa0538e249fff6ee19a270dec5f",
|
"hashed_secret": "1c58bd92003bbaa0538e249fff6ee19a270dec5f",
|
||||||
"is_verified": false,
|
"is_verified": false,
|
||||||
"line_number": 763
|
"line_number": 794
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"tests/unit/test_caldav_security.py": [
|
"tests/unit/test_caldav_security.py": [
|
||||||
@@ -185,5 +185,5 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"generated_at": "2026-09-12T17:57:39Z"
|
"generated_at": "2026-09-12T22:12:56Z"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,7 +191,11 @@ class CalDAVGateway:
|
|||||||
for vevent in component.walk("VEVENT"):
|
for vevent in component.walk("VEVENT"):
|
||||||
managed = vevent.get(MANAGED_PROPERTY)
|
managed = vevent.get(MANAGED_PROPERTY)
|
||||||
if managed is not None and str(managed) == MANAGED_VALUE:
|
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)
|
canonical_uid = normalize_pronote_uid(raw_uid)
|
||||||
result.append((raw_uid, canonical_uid, vevent))
|
result.append((raw_uid, canonical_uid, vevent))
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
|
|||||||
@@ -327,6 +327,37 @@ def test_list_managed_events_returns_only_managed(
|
|||||||
assert str(vevent.get("UID")) == "test-uid-123"
|
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(
|
def test_list_managed_events_not_connected_raises(
|
||||||
caldav_settings: CalDAVSettings,
|
caldav_settings: CalDAVSettings,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user