Fix MS Exchange EWS: add support for version negotiation and other enhancements (closes #6)

This commit is contained in:
Maurus Decimus
2026-06-10 11:43:09 +02:00
parent 49f344660a
commit bf0ef2083b
14 changed files with 888 additions and 99 deletions
+25
View File
@@ -89,6 +89,10 @@ pub fn find_item_body(
out.push_str("\" Offset=\"");
out.push_str(&offset.to_string());
out.push_str("\" BasePoint=\"Beginning\"/>");
out.push_str(
"<m:SortOrder><t:FieldOrder Order=\"Ascending\">\
<t:FieldURI FieldURI=\"item:DateTimeCreated\"/></t:FieldOrder></m:SortOrder>",
);
out.push_str("<m:ParentFolderIds>");
write_folder_ref(&mut out, parent);
out.push_str("</m:ParentFolderIds></m:FindItem>");
@@ -175,6 +179,12 @@ const CALENDAR_FIELDS: &[&str] = &[
"calendar:Organizer",
"calendar:RequiredAttendees",
"calendar:OptionalAttendees",
"calendar:Resources",
"calendar:IsOnlineMeeting",
"calendar:MeetingWorkspaceUrl",
"calendar:NetShowUrl",
"item:ReminderIsSet",
"item:ReminderMinutesBeforeStart",
"calendar:Recurrence",
"calendar:ModifiedOccurrences",
"calendar:DeletedOccurrences",
@@ -274,6 +284,21 @@ mod tests {
assert!(body.contains("<t:FolderId Id=\"FID\" ChangeKey=\"FCK\"/>"));
}
#[test]
fn find_item_sorts_by_creation_time_for_stable_paging() {
let folder = FolderId::new("FID", "FCK");
let body = find_item_body(FolderRef::Concrete(&folder), Traversal::Shallow, 0, 50);
assert!(body.contains("<m:SortOrder>"));
assert!(body.contains("Order=\"Ascending\""));
assert!(body.contains("item:DateTimeCreated"));
let sort_at = body.find("<m:SortOrder>").unwrap();
let parents_at = body.find("<m:ParentFolderIds>").unwrap();
assert!(
sort_at < parents_at,
"SortOrder must precede ParentFolderIds"
);
}
#[test]
fn get_item_message_shape_requests_mime() {
let ids = vec![ItemId::new("I1", "CK1"), ItemId::new("I2", "")];