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_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 ---
|
||||
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 ---
|
||||
|
||||
|
|
|
@ -52,3 +52,75 @@ Subject: Test\r
|
|||
\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