diff --git a/src/server.rs b/src/server.rs
index 0c2c9d4..2aee843 100644
--- a/src/server.rs
+++ b/src/server.rs
@@ -812,9 +812,16 @@ struct PathItem {
}
impl PathItem {
+ pub fn is_dir(&self) -> bool {
+ self.path_type == PathType::Dir || self.path_type == PathType::SymlinkDir
+ }
+
pub fn to_dav_xml(&self, prefix: &str) -> String {
let mtime = Utc.timestamp_millis(self.mtime as i64).to_rfc2822();
- let href = encode_uri(&format!("{}{}", prefix, &self.name));
+ let mut href = encode_uri(&format!("{}{}", prefix, &self.name));
+ if self.is_dir() && !href.ends_with('/') {
+ href.push('/');
+ }
let displayname = escape_str_pcdata(self.base_name());
match self.path_type {
PathType::Dir | PathType::SymlinkDir => format!(
diff --git a/tests/webdav.rs b/tests/webdav.rs
index fee0ce8..cedfad5 100644
--- a/tests/webdav.rs
+++ b/tests/webdav.rs
@@ -10,7 +10,7 @@ fn propfind_dir(server: TestServer) -> Result<(), Error> {
let resp = fetch!(b"PROPFIND", format!("{}dira", server.url())).send()?;
assert_eq!(resp.status(), 207);
let body = resp.text()?;
- assert!(body.contains("/dira"));
+ assert!(body.contains("/dira/"));
assert!(body.contains("dira"));
for f in FILES {
assert!(body.contains(&format!("/dira/{}", utils::encode_uri(f))));
@@ -29,7 +29,7 @@ fn propfind_dir_depth0(server: TestServer) -> Result<(), Error> {
.send()?;
assert_eq!(resp.status(), 207);
let body = resp.text()?;
- assert!(body.contains("/dira"));
+ assert!(body.contains("/dira/"));
assert!(body.contains("dira"));
assert_eq!(
body.lines()