diff --git a/server/src/email_extract.rs b/server/src/email_extract.rs index 51cc3db..b1210dd 100644 --- a/server/src/email_extract.rs +++ b/server/src/email_extract.rs @@ -195,8 +195,16 @@ pub fn extract_calendar_metadata_from_mail( } } if let (Some(sm), Some(em)) = (month_num(start_month), month_num(end_month)) { - let current_year = chrono::Local::now().year().to_string(); - let start = format!("{}{}{}", current_year, sm, format!("{:0>2}", start_day)); + // If start month is later in calendar year than end month, start is in previous year + let sm_num: u32 = sm.parse().unwrap_or(1); + let em_num: u32 = em.parse().unwrap_or(1); + let end_year = year.parse::().unwrap_or_else(|_| chrono::Local::now().year()); + let start_year: i32 = if sm_num > em_num { + end_year - 1 + } else { + end_year + }; + let start = format!("{}{}{}", start_year, sm, format!("{:0>2}", start_day)); let mut end_date_val = chrono::NaiveDate::parse_from_str(&format!("{}-{}-{}", year, em, format!("{:0>2}", end_day)), "%Y-%m-%d").ok(); if let Some(d) = end_date_val.as_mut() { *d = d.succ_opt().unwrap_or(*d); @@ -2307,8 +2315,8 @@ mod tests { Some("calendar-notification@google.com".to_string()) ); // Dates: from subject, Thu Sep 11 to Fri Jan 30, 2026 - let current_year = chrono::Local::now().year(); - assert_eq!(meta.start_date, Some(format!("{}0911", current_year))); + // Start date is Sep 11, 2025 (one year before end since Sep > Jan) + assert_eq!(meta.start_date, Some("20250911".to_string())); assert_eq!(meta.end_date, Some("20260131".to_string())); } #[test] @@ -2408,8 +2416,8 @@ mod tests { Some("calendar-notification@google.com".to_string()) ); // Dates: from subject, Thu Sep 11 to Fri Jan 30, 2026 - let current_year = chrono::Local::now().year(); - assert_eq!(meta.start_date, Some(format!("{}0911", current_year))); + // Start date is Sep 11, 2025 (one year before end since Sep > Jan) + assert_eq!(meta.start_date, Some("20250911".to_string())); assert_eq!(meta.end_date, Some("20260131".to_string())); // Debug: print the rendered HTML for inspection if let Some(ref html) = meta.body_html { @@ -2442,8 +2450,8 @@ mod tests { Some("calendar-notification@google.com".to_string()) ); // Assert that the start and end dates are present - let current_year = chrono::Local::now().year(); - assert_eq!(meta.start_date, Some(format!("{}0911", current_year))); + // Start date is Sep 11, 2025 (one year before end since Sep > Jan) + assert_eq!(meta.start_date, Some("20250911".to_string())); assert_eq!(meta.end_date, Some("20260131".to_string())); // Assert that the HTML body contains recurrence info if let Some(ref html) = meta.body_html {