From 54d10ed48274607c7bc4e0fd5fb1919f57317b70 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Wed, 22 May 2024 23:48:34 +0200 Subject: check calendar autodiscovery --- aerogramme/tests/behavior.rs | 54 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/aerogramme/tests/behavior.rs b/aerogramme/tests/behavior.rs index 7d2fc67..d13e556 100644 --- a/aerogramme/tests/behavior.rs +++ b/aerogramme/tests/behavior.rs @@ -19,6 +19,7 @@ fn main() { // WebDAV rfc4918_webdav_core(); rfc5397_webdav_principal(); + rfc4791_webdav_caldav(); println!("โœ… SUCCESS ๐ŸŒŸ๐Ÿš€๐Ÿฅณ๐Ÿ™๐Ÿฅน"); } @@ -549,7 +550,56 @@ fn rfc5397_webdav_principal() { .expect("test fully run") } -// @TODO CALDAV -// @TODO find calendar-home-set +fn rfc4791_webdav_caldav() { + println!("๐Ÿงช rfc4791_webdav_caldav"); + common::aerogramme_provider_daemon_dev(|_imap, _lmtp, http| { + // Check calendar discovery from principal + let propfind_req = r#" + + + "#; + + let body = http + .request( + reqwest::Method::from_bytes(b"PROPFIND")?, + "http://localhost:8087/alice/", + ) + .body(propfind_req) + .send()? + .text()?; + let multistatus = dav_deserialize::>(&body); + let principal_propstats = multistatus + .responses + .iter() + .find_map(|v| match &v.status_or_propstat { + dav::StatusOrPropstat::PropStat(dav::Href(p), x) if p.as_str() == "/alice/" => { + Some(x) + } + _ => None, + }) + .expect("propstats for root must exist"); + let principal_success = principal_propstats + .iter() + .find(|p| p.status.0.as_u16() == 200) + .expect("current-user-principal must exist"); + let calendar_home_set = principal_success + .prop + .0 + .iter() + .find_map(|v| match v { + dav::AnyProperty::Value(dav::Property::Extension(realization::Property::Cal( + cal::Property::CalendarHomeSet(dav::Href(x)), + ))) => Some(x), + _ => None, + }) + .expect("request returns a calendar home set"); + assert_eq!(calendar_home_set, "/alice/calendar/"); + + + + Ok(()) + }) + .expect("test fully run") +} // @TODO SYNC -- cgit v1.2.3