aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dav/calencoder.rs75
1 files changed, 65 insertions, 10 deletions
diff --git a/src/dav/calencoder.rs b/src/dav/calencoder.rs
index 05d0454..f5f4924 100644
--- a/src/dav/calencoder.rs
+++ b/src/dav/calencoder.rs
@@ -677,27 +677,82 @@ impl<C: CalContext> QuickWritable<C> for TimeRange {
#[cfg(test)]
mod tests {
use super::*;
- use crate::dav::types::{Error, Violation as DavViolation};
+ use crate::dav::types as dav;
use tokio::io::AsyncWriteExt;
- #[tokio::test]
- async fn test_violation() {
+ async fn serialize<C: Context, Q: QuickWritable<C>>(ctx: C, elem: &Q) -> String {
let mut buffer = Vec::new();
let mut tokio_buffer = tokio::io::BufWriter::new(&mut buffer);
let mut writer = Writer::new_with_indent(&mut tokio_buffer, b' ', 4);
+ elem.write(&mut writer, ctx).await.expect("xml serialization");
+ tokio_buffer.flush().await.expect("tokio buffer flush");
+ let got = std::str::from_utf8(buffer.as_slice()).unwrap();
- let res = Error(vec![
- DavViolation::Extension(Violation::ResourceMustBeNull),
- ]);
+ return got.into()
+ }
- res.write(&mut writer, CalExtension { root: true }).await.expect("xml serialization");
- tokio_buffer.flush().await.expect("tokio buffer flush");
+ #[tokio::test]
+ async fn basic_violation() {
+ let got = serialize(
+ CalExtension { root: true },
+ &dav::Error(vec![
+ dav::Violation::Extension(Violation::ResourceMustBeNull),
+ ])
+ ).await;
let expected = r#"<D:error xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<C:resource-must-be-null/>
</D:error>"#;
- let got = std::str::from_utf8(buffer.as_slice()).unwrap();
- assert_eq!(got, expected);
+ assert_eq!(&got, expected, "\n---GOT---\n{got}\n---EXP---\n{expected}\n");
+ }
+
+ #[tokio::test]
+ async fn rfc_calendar_query1() {
+ let got = serialize(
+ CalExtension { root: true },
+ &CalendarQuery {
+ selector: Some(CalendarSelector::Prop(dav::PropName(vec![
+ ]))),
+ filter: Filter(CompFilter {
+ name: Component::VCalendar,
+ additional_rules: None,
+ }),
+ timezone: None,
+ }
+ ).await;
+
+ let expected = r#"<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
+ <D:prop>
+ <D:getetag/>
+ <C:calendar-data>
+ <C:comp name="VCALENDAR">
+ <C:prop name="VERSION"/>
+ <C:comp name="VEVENT">
+ <C:prop name="SUMMARY"/>
+ <C:prop name="UID"/>
+ <C:prop name="DTSTART"/>
+ <C:prop name="DTEND"/>
+ <C:prop name="DURATION"/>
+ <C:prop name="RRULE"/>
+ <C:prop name="RDATE"/>
+ <C:prop name="EXRULE"/>
+ <C:prop name="EXDATE"/>
+ <C:prop name="RECURRENCE-ID"/>
+ </C:comp>
+ <C:comp name="VTIMEZONE"/>
+ </C:comp>
+ </C:calendar-data>
+ </D:prop>
+ <C:filter>
+ <C:comp-filter name="VCALENDAR">
+ <C:comp-filter name="VEVENT">
+ <C:time-range start="20060104T000000Z" end="20060105T000000Z"/>
+ </C:comp-filter>
+ </C:comp-filter>
+ </C:filter>
+</C:calendar-query>"#;
+
+ assert_eq!(&got, expected, "\n---GOT---\n{got}\n---EXP---\n{expected}\n");
}
}