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/