diff --git a/crates/dav/src/common/propfind.rs b/crates/dav/src/common/propfind.rs
index 1780abb5..7a7b6957 100644
--- a/crates/dav/src/common/propfind.rs
+++ b/crates/dav/src/common/propfind.rs
@@ -1480,7 +1480,7 @@ async fn multiget(
if !resource.is_container() {
if document_ids
.as_ref()
- .is_none_or(|docs| docs.contains(resource.document_id()))
+ .is_none_or(|docs| docs.contains(resource.parent_id().unwrap()))
{
paths.push(PropFindItem::new(
resources.format_resource(resource),
diff --git a/tests/src/webdav/acl.rs b/tests/src/webdav/acl.rs
index 214aa17a..da8ea997 100644
--- a/tests/src/webdav/acl.rs
+++ b/tests/src/webdav/acl.rs
@@ -120,6 +120,25 @@ pub async fn test(test: &WebDavTest) {
.await
.with_status(StatusCode::OK)
.with_body(&owner_file_content);
+ match resource_type {
+ DavResourceName::Cal => {
+ sharee_client
+ .multiget_calendar(&owner_folder, &[&owner_file])
+ .await
+ .properties(&owner_file)
+ .with_status(StatusCode::OK)
+ .is_defined(DavProperty::WebDav(WebDavProperty::GetETag));
+ }
+ DavResourceName::Card => {
+ sharee_client
+ .multiget_addressbook(&owner_folder, &[&owner_file])
+ .await
+ .properties(&owner_file)
+ .with_status(StatusCode::OK)
+ .is_defined(DavProperty::WebDav(WebDavProperty::GetETag));
+ }
+ _ => {}
+ }
// Test 5: Read ACL as owner
let response = owner_client
diff --git a/tests/src/webdav/multiget.rs b/tests/src/webdav/multiget.rs
index d6fe796b..ac816a3a 100644
--- a/tests/src/webdav/multiget.rs
+++ b/tests/src/webdav/multiget.rs
@@ -5,7 +5,7 @@
*/
use super::WebDavTest;
-use crate::webdav::GenerateTestDavResource;
+use crate::webdav::{DummyWebDavClient, GenerateTestDavResource, prop::DavMultiStatus};
use dav_proto::schema::property::{CalDavProperty, CardDavProperty, DavProperty, WebDavProperty};
use groupware::DavResourceName;
use hyper::StatusCode;
@@ -16,8 +16,7 @@ const MULTIGET_CALENDAR: &str = r#"
- $PATH_1
- $PATH_2
+ $PATH
"#;
const MULTIGET_ADDRESSBOOK: &str = r#"
@@ -27,8 +26,7 @@ const MULTIGET_ADDRESSBOOK: &str = r#"
- $PATH_1
- $PATH_2
+ $PATH
"#;
@@ -56,14 +54,9 @@ pub async fn test(test: &WebDavTest) {
if resource_type == DavResourceName::Cal {
let path = format!("{}/john", resource_type.base_path());
- let body = MULTIGET_CALENDAR
- .replace("$PATH_1", &paths[0].0)
- .replace("$PATH_2", &paths[1].0);
let response = client
- .request("REPORT", &path, &body)
- .await
- .with_status(StatusCode::MULTI_STATUS)
- .into_propfind_response(None);
+ .multiget_calendar(&path, &[&paths[0].0, &paths[1].0])
+ .await;
for (path, etag, contents) in paths {
let props = response.properties(&path);
props
@@ -77,14 +70,9 @@ pub async fn test(test: &WebDavTest) {
}
} else {
let path = format!("{}/john", resource_type.base_path());
- let body = MULTIGET_ADDRESSBOOK
- .replace("$PATH_1", &paths[0].0)
- .replace("$PATH_2", &paths[1].0);
let response = client
- .request("REPORT", &path, &body)
- .await
- .with_status(StatusCode::MULTI_STATUS)
- .into_propfind_response(None);
+ .multiget_addressbook(&path, &[&paths[0].0, &paths[1].0])
+ .await;
for (path, etag, contents) in paths {
let props = response.properties(&path);
props
@@ -102,3 +90,33 @@ pub async fn test(test: &WebDavTest) {
client.delete_default_containers().await;
test.assert_is_empty().await;
}
+
+impl DummyWebDavClient {
+ pub async fn multiget_calendar(&self, path: &str, uris: &[&str]) -> DavMultiStatus {
+ let mut paths = String::new();
+ for uri in uris {
+ paths.push_str(&format!("{}", uri));
+ }
+
+ self.request("REPORT", path, &MULTIGET_CALENDAR.replace("$PATH", &paths))
+ .await
+ .with_status(StatusCode::MULTI_STATUS)
+ .into_propfind_response(None)
+ }
+
+ pub async fn multiget_addressbook(&self, path: &str, uris: &[&str]) -> DavMultiStatus {
+ let mut paths = String::new();
+ for uri in uris {
+ paths.push_str(&format!("{}", uri));
+ }
+
+ self.request(
+ "REPORT",
+ path,
+ &MULTIGET_ADDRESSBOOK.replace("$PATH", &paths),
+ )
+ .await
+ .with_status(StatusCode::MULTI_STATUS)
+ .into_propfind_response(None)
+ }
+}