From d9cca5a29827239205fbdaab4036ea31fa264aac Mon Sep 17 00:00:00 2001 From: Lennart <18233294+lennart-k@users.noreply.github.com> Date: Fri, 12 Dec 2025 23:43:14 +0100 Subject: [PATCH] improve caldav integration test --- src/integration_tests/caldav/calendar.rs | 70 +++++++++++++++---- src/integration_tests/caldav/mod.rs | 2 +- ...ion_tests__caldav__caldav_principal-4.snap | 6 +- ...__caldav__calendar__caldav_calendar-3.snap | 2 +- ...__caldav__calendar__caldav_calendar-4.snap | 6 +- 5 files changed, 65 insertions(+), 21 deletions(-) diff --git a/src/integration_tests/caldav/calendar.rs b/src/integration_tests/caldav/calendar.rs index 466e7fe..328ec1a 100644 --- a/src/integration_tests/caldav/calendar.rs +++ b/src/integration_tests/caldav/calendar.rs @@ -1,13 +1,23 @@ use crate::integration_tests::{ResponseExtractString, get_app}; -use axum::body::{Body, Bytes}; +use axum::body::Body; use axum::extract::Request; use headers::{Authorization, HeaderMapExt}; use http::{HeaderValue, StatusCode}; use rstest::rstest; -use rustical_store::{Calendar, CalendarMetadata}; +use rustical_store::{CalendarMetadata, CalendarStore}; +use rustical_store_sqlite::{calendar_store::SqliteCalendarStore, tests::get_test_calendar_store}; use tower::ServiceExt; -const MKCOL_REQUEST: &str = r#" +fn mkcalendar_template( + CalendarMetadata { + displayname, + order: _order, + description, + color, + }: &CalendarMetadata, +) -> String { + format!( + r#" @@ -16,9 +26,9 @@ const MKCOL_REQUEST: &str = r#" - Amazing Calendar - Description - #FFF8DCFF + {displayname} + {description} + {color} Europe/Berlin @@ -28,7 +38,12 @@ const MKCOL_REQUEST: &str = r#" - "#; + "#, + displayname = displayname.as_deref().unwrap_or_default(), + description = description.as_deref().unwrap_or_default(), + color = color.as_deref().unwrap_or_default(), + ) +} #[rstest] #[tokio::test] @@ -36,14 +51,27 @@ async fn test_caldav_calendar( #[from(get_app)] #[future] app: axum::Router, + #[from(get_test_calendar_store)] + #[future] + cal_store: SqliteCalendarStore, ) { let app = app.await; + let cal_store = cal_store.await; + + let calendar_meta = CalendarMetadata { + displayname: Some("Calendar".to_string()), + description: Some("Description".to_string()), + color: Some("#00FF00".to_string()), + order: 0, + }; + let (principal, cal_id) = ("user", "calendar"); + let url = format!("/caldav/principal/{principal}/{cal_id}"); let request_template = || { Request::builder() .method("MKCALENDAR") - .uri("/caldav/principal/user/calendar") - .body(Body::from(MKCOL_REQUEST)) + .uri(&url) + .body(Body::from(mkcalendar_template(&calendar_meta))) .unwrap() }; @@ -66,7 +94,7 @@ async fn test_caldav_calendar( let mut request = Request::builder() .method("GET") - .uri("/caldav/principal/user/calendar") + .uri(&url) .body(Body::empty()) .unwrap(); request @@ -77,9 +105,18 @@ async fn test_caldav_calendar( let body = response.extract_string().await; insta::assert_snapshot!(body); + assert_eq!( + cal_store + .get_calendar(principal, cal_id, false) + .await + .unwrap() + .meta, + calendar_meta + ); + let mut request = Request::builder() .method("PROPFIND") - .uri("/caldav/principal/user/calendar") + .uri(&url) .body(Body::empty()) .unwrap(); request @@ -90,7 +127,7 @@ async fn test_caldav_calendar( let body = response.extract_string().await; insta::with_settings!({ filters => vec![ - (r"[0-9a-f-]+", "[PUSH_TOPIC]") + (r"[0-9a-f-]+", "[PUSH_TOPIC]") ] }, { insta::assert_snapshot!(body); @@ -98,7 +135,8 @@ async fn test_caldav_calendar( let mut request = Request::builder() .method("DELETE") - .uri("/caldav/principal/user/calendar") + .uri(&url) + .header("X-No-Trashbin", HeaderValue::from_static("1")) .body(Body::empty()) .unwrap(); request @@ -108,4 +146,10 @@ async fn test_caldav_calendar( assert_eq!(response.status(), StatusCode::OK); let body = response.extract_string().await; insta::assert_snapshot!(body); + + assert!(matches!( + cal_store.get_calendar(principal, cal_id, false).await, + Err(rustical_store::Error::NotFound) + )); } + diff --git a/src/integration_tests/caldav/mod.rs b/src/integration_tests/caldav/mod.rs index c65ad00..87db81d 100644 --- a/src/integration_tests/caldav/mod.rs +++ b/src/integration_tests/caldav/mod.rs @@ -111,7 +111,7 @@ async fn test_caldav_principal( let body = response.extract_string().await; insta::with_settings!({ filters => vec![ - (r"[0-9a-f-]+", "[PUSH_TOPIC]") + (r"[0-9a-f-]+", "[PUSH_TOPIC]") ] }, { insta::assert_snapshot!(body); diff --git a/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__caldav_principal-4.snap b/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__caldav_principal-4.snap index a4a1aa1..7e33986 100644 --- a/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__caldav_principal-4.snap +++ b/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__caldav_principal-4.snap @@ -54,7 +54,7 @@ expression: body /caldav/principal/user/calendar/ - #FFF8DCFF + #00FF00 Description BEGIN:VCALENDAR PRODID:-//github.com/lennart-k/vzic-rs//RustiCal Calendar server//EN @@ -209,7 +209,7 @@ END:VCALENDAR - [PUSH_TOPIC] + [PUSH_TOPIC] 1 @@ -222,7 +222,7 @@ END:VCALENDAR - Amazing Calendar + Calendar /caldav/principal/user/ diff --git a/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__calendar__caldav_calendar-3.snap b/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__calendar__caldav_calendar-3.snap index 5963b3c..4fb2e93 100644 --- a/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__calendar__caldav_calendar-3.snap +++ b/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__calendar__caldav_calendar-3.snap @@ -6,7 +6,7 @@ BEGIN:VCALENDAR VERSION:4.0 CALSCALE:GREGORIAN PRODID:RustiCal -X-WR-CALNAME:Amazing Calendar +X-WR-CALNAME:Calendar X-WR-CALDESC:Description X-WR-TIMEZONE:Europe/Berlin END:VCALENDAR diff --git a/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__calendar__caldav_calendar-4.snap b/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__calendar__caldav_calendar-4.snap index 390da39..4f01c77 100644 --- a/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__calendar__caldav_calendar-4.snap +++ b/src/integration_tests/caldav/snapshots/rustical__integration_tests__caldav__calendar__caldav_calendar-4.snap @@ -8,7 +8,7 @@ expression: body /caldav/principal/user/calendar/ - #FFF8DCFF + #00FF00 Description BEGIN:VCALENDAR PRODID:-//github.com/lennart-k/vzic-rs//RustiCal Calendar server//EN @@ -163,7 +163,7 @@ END:VCALENDAR - [PUSH_TOPIC] + [PUSH_TOPIC] 1 @@ -176,7 +176,7 @@ END:VCALENDAR - Amazing Calendar + Calendar /caldav/principal/user/