test webdav put
This commit is contained in:
parent
649a7b8b1b
commit
e522251bec
2 changed files with 118 additions and 2 deletions
|
@ -429,11 +429,55 @@ fn rfc4918_webdav_core() {
|
||||||
assert!(root_success.prop.0.iter().find(|p| matches!(p, dav::AnyProperty::Value(dav::Property::GetContentType(_)))).is_none());
|
assert!(root_success.prop.0.iter().find(|p| matches!(p, dav::AnyProperty::Value(dav::Property::GetContentType(_)))).is_none());
|
||||||
assert!(root_not_found.prop.0.iter().find(|p| matches!(p, dav::AnyProperty::Request(dav::PropertyRequest::GetContentLength))).is_some());
|
assert!(root_not_found.prop.0.iter().find(|p| matches!(p, dav::AnyProperty::Request(dav::PropertyRequest::GetContentLength))).is_some());
|
||||||
|
|
||||||
// depth 1
|
// depth 1 / -> /alice/
|
||||||
|
let body = http.request(reqwest::Method::from_bytes(b"PROPFIND")?, "http://localhost:8087").header("Depth", "1").send()?.text()?;
|
||||||
|
let multistatus = dav_deserialize::<dav::Multistatus<All>>(&body);
|
||||||
|
let _user_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("user collection must exist");
|
||||||
|
|
||||||
// check tree (calendar, Personal)
|
// depth 1 /alice/ -> /alice/calendar/
|
||||||
|
let body = http.request(reqwest::Method::from_bytes(b"PROPFIND")?, "http://localhost:8087/alice/").header("Depth", "1").send()?.text()?;
|
||||||
|
let multistatus = dav_deserialize::<dav::Multistatus<All>>(&body);
|
||||||
|
let _user_calendars_propstats = multistatus.responses.iter()
|
||||||
|
.find_map(|v| match &v.status_or_propstat {
|
||||||
|
dav::StatusOrPropstat::PropStat(dav::Href(p), x) if p.as_str() == "/alice/calendar/" => Some(x),
|
||||||
|
_ => None,
|
||||||
|
})
|
||||||
|
.expect("user collection must exist");
|
||||||
|
|
||||||
|
// depth 1 /alice/calendar/ -> /alice/calendar/Personal/
|
||||||
|
let body = http.request(reqwest::Method::from_bytes(b"PROPFIND")?, "http://localhost:8087/alice/calendar/").header("Depth", "1").send()?.text()?;
|
||||||
|
let multistatus = dav_deserialize::<dav::Multistatus<All>>(&body);
|
||||||
|
let _user_calendars_propstats = multistatus.responses.iter()
|
||||||
|
.find_map(|v| match &v.status_or_propstat {
|
||||||
|
dav::StatusOrPropstat::PropStat(dav::Href(p), x) if p.as_str() == "/alice/calendar/Personal/" => Some(x),
|
||||||
|
_ => None,
|
||||||
|
})
|
||||||
|
.expect("Personal calendar must exist");
|
||||||
|
|
||||||
|
// depth 1 /alice/calendar/Personal/ -> empty for now...
|
||||||
|
let body = http.request(reqwest::Method::from_bytes(b"PROPFIND")?, "http://localhost:8087/alice/calendar/Personal/").header("Depth", "1").send()?.text()?;
|
||||||
|
let multistatus = dav_deserialize::<dav::Multistatus<All>>(&body);
|
||||||
|
assert_eq!(multistatus.responses.len(), 1);
|
||||||
|
|
||||||
// --- PUT ---
|
// --- PUT ---
|
||||||
|
let resp = http.request(reqwest::Method::from_bytes(b"PUT")?, "http://localhost:8087/alice/calendar/Personal/rfc2.ics").header("If-None-Match", "*").body(ICAL_RFC2).send()?;
|
||||||
|
assert_eq!(resp.status(), 201);
|
||||||
|
|
||||||
|
let body = http.request(reqwest::Method::from_bytes(b"PROPFIND")?, "http://localhost:8087/alice/calendar/Personal/").header("Depth", "1").send()?.text()?;
|
||||||
|
let multistatus = dav_deserialize::<dav::Multistatus<All>>(&body);
|
||||||
|
assert_eq!(multistatus.responses.len(), 2);
|
||||||
|
|
||||||
|
let resp = http.request(reqwest::Method::from_bytes(b"PUT")?, "http://localhost:8087/alice/calendar/Personal/rfc3.ics").header("If-None-Match", "*").body(ICAL_RFC3).send()?;
|
||||||
|
assert_eq!(resp.status(), 201);
|
||||||
|
|
||||||
|
let body = http.request(reqwest::Method::from_bytes(b"PROPFIND")?, "http://localhost:8087/alice/calendar/Personal/").header("Depth", "1").send()?.text()?;
|
||||||
|
let multistatus = dav_deserialize::<dav::Multistatus<All>>(&body);
|
||||||
|
assert_eq!(multistatus.responses.len(), 3);
|
||||||
|
|
||||||
// --- GET ---
|
// --- GET ---
|
||||||
|
|
||||||
|
|
|
@ -52,3 +52,75 @@ Subject: Test\r
|
||||||
\r
|
\r
|
||||||
Hello world!\r
|
Hello world!\r
|
||||||
";
|
";
|
||||||
|
|
||||||
|
pub static ICAL_RFC1: &[u8] = b"BEGIN:VCALENDAR
|
||||||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
||||||
|
VERSION:2.0
|
||||||
|
BEGIN:VEVENT
|
||||||
|
UID:1@example.com
|
||||||
|
SUMMARY:One-off Meeting
|
||||||
|
DTSTAMP:20041210T183904Z
|
||||||
|
DTSTART:20041207T120000Z
|
||||||
|
DTEND:20041207T130000Z
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
UID:2@example.com
|
||||||
|
SUMMARY:Weekly Meeting
|
||||||
|
DTSTAMP:20041210T183838Z
|
||||||
|
DTSTART:20041206T120000Z
|
||||||
|
DTEND:20041206T130000Z
|
||||||
|
RRULE:FREQ=WEEKLY
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
UID:2@example.com
|
||||||
|
SUMMARY:Weekly Meeting
|
||||||
|
RECURRENCE-ID:20041213T120000Z
|
||||||
|
DTSTAMP:20041210T183838Z
|
||||||
|
DTSTART:20041213T130000Z
|
||||||
|
DTEND:20041213T140000Z
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
||||||
|
";
|
||||||
|
|
||||||
|
pub static ICAL_RFC2: &[u8] = b"BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
||||||
|
BEGIN:VEVENT
|
||||||
|
UID:20010712T182145Z-123401@example.com
|
||||||
|
DTSTAMP:20060712T182145Z
|
||||||
|
DTSTART:20060714T170000Z
|
||||||
|
DTEND:20060715T040000Z
|
||||||
|
SUMMARY:Bastille Day Party
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
||||||
|
";
|
||||||
|
|
||||||
|
pub static ICAL_RFC3: &[u8] = b"BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
PRODID:-//Example Corp.//CalDAV Client//EN
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
LAST-MODIFIED:20040110T032845Z
|
||||||
|
TZID:US/Eastern
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
DTSTART:20000404T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
||||||
|
TZNAME:EDT
|
||||||
|
TZOFFSETFROM:-0500
|
||||||
|
TZOFFSETTO:-0400
|
||||||
|
END:DAYLIGHT
|
||||||
|
BEGIN:STANDARD
|
||||||
|
DTSTART:20001026T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||||
|
TZNAME:EST
|
||||||
|
TZOFFSETFROM:-0400
|
||||||
|
TZOFFSETTO:-0500
|
||||||
|
END:STANDARD
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=US/Eastern:20060104T100000
|
||||||
|
DURATION:PT1H
|
||||||
|
SUMMARY:Event #3
|
||||||
|
UID:DC6C50A017428C5216A2F1CD@example.com
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
||||||
|
";
|
||||||
|
|
Loading…
Reference in a new issue