EWS fixes

This commit is contained in:
Maurus Decimus
2026-06-10 20:26:41 +02:00
parent f7371cc2ae
commit adbd0276a6
11 changed files with 631 additions and 280 deletions
+27
View File
@@ -332,6 +332,33 @@ fn http_503_retries_then_succeeds() {
assert!(c.retries_observed() >= 1);
}
#[test]
fn xml_entities_decoded_in_displayname_and_calendar_data() {
let body = r#"<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav">
<d:response>
<d:href>/cal/1.ics</d:href>
<d:propstat><d:prop>
<d:displayname>Sales &amp; Marketing &lt;Team&gt;</d:displayname>
<c:calendar-data>BEGIN:VEVENT
SUMMARY:Q&amp;A &amp; review
END:VEVENT</c:calendar-data>
</d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat>
</d:response>
</d:multistatus>"#;
let r = parse_multistatus(Cursor::new(body), "https://x/").expect("parse");
assert_eq!(r.len(), 1);
assert_eq!(
r[0].props.displayname.as_deref(),
Some("Sales & Marketing <Team>")
);
let cal = r[0].props.calendar_data.as_deref().unwrap();
assert!(
cal.contains("SUMMARY:Q&A & review"),
"calendar-data entities must be decoded: {cal}"
);
}
#[test]
fn duplicate_response_hrefs_collapsed_on_parse() {
let body = r#"<?xml version="1.0"?>