diff --git a/src/event.rs b/src/event.rs index b995c81..7dde9a5 100644 --- a/src/event.rs +++ b/src/event.rs @@ -1,7 +1,7 @@ //! Event handling and iCalendar parsing -use crate::error::{CalDavError, CalDavResult}; -use chrono::{DateTime, Utc, NaiveDateTime}; +use crate::error::CalDavResult; +use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use uuid::Uuid; @@ -369,7 +369,11 @@ fn escape_ical_text(text: &str) -> String { } /// Parse iCalendar date/time +#[cfg(test)] fn parse_ical_datetime(dt_str: &str) -> CalDavResult> { + use crate::error::CalDavError; + use chrono::NaiveDateTime; + // Handle different iCalendar date formats if dt_str.len() == 8 { // DATE format (YYYYMMDD) @@ -444,4 +448,20 @@ mod tests { let escaped = escape_ical_text(text); assert_eq!(escaped, "Hello\\, world\\; this\\\\is a test"); } + + #[test] + fn test_parse_ical_datetime() { + // Test DATE format (YYYYMMDD) + let date_result = parse_ical_datetime("20231225").unwrap(); + assert_eq!(date_result.format("%Y%m%d").to_string(), "20231225"); + assert_eq!(date_result.format("%H%M%S").to_string(), "000000"); + + // Test UTC datetime format (YYYYMMDDTHHMMSSZ) + let datetime_result = parse_ical_datetime("20231225T103000Z").unwrap(); + assert_eq!(datetime_result.format("%Y%m%dT%H%M%SZ").to_string(), "20231225T103000Z"); + + // Test local time format (should fail) + let local_result = parse_ical_datetime("20231225T103000"); + assert!(local_result.is_err()); + } }