WebDAV import materialised the account root collection as a directory named after the account displayname (fixes #18)

This commit is contained in:
Maurus Decimus
2026-07-12 18:54:43 +02:00
parent ec6b3f9d15
commit 0f28e9b17e
9 changed files with 237 additions and 64 deletions
+32 -5
View File
@@ -89,8 +89,8 @@ fn webdav_starts_seeds_and_imports() {
|r| r.get(0),
)
.unwrap();
let expected_dirs = account.layout.files.iter().filter(|s| s.directory).count() + 1;
let expected_files = account.layout.files.len() - (expected_dirs - 1);
let expected_dirs = account.layout.files.iter().filter(|s| s.directory).count();
let expected_files = account.layout.files.len() - expected_dirs;
assert_eq!(
files as usize, expected_files,
@@ -99,16 +99,43 @@ fn webdav_starts_seeds_and_imports() {
);
assert_eq!(
dirs as usize, expected_dirs,
"{}: directory count mismatch (seeded layout dirs + account root = {expected_dirs}, imported {dirs})",
"{}: directory count mismatch (seeded layout dirs = {expected_dirs}, imported {dirs}); the account root is a virtual mount point, not a node (issue #18)",
seed.username
);
assert_eq!(
nodes,
account.layout.files.len() + 1,
"{}: total file_nodes mismatch (layout + account root)",
account.layout.files.len(),
"{}: total file_nodes mismatch (layout only, no synthetic account-root node)",
seed.username
);
let admin_root_nodes: i64 = conn
.query_row(
"SELECT count(*) FROM file_nodes WHERE name = ?1",
[&account.username],
|r| r.get(0),
)
.unwrap();
assert_eq!(
admin_root_nodes, 0,
"{}: the account root must not be materialised as a directory named after the account (issue #18)",
seed.username
);
for spec in account.layout.files.iter().filter(|s| s.parent.is_none()) {
let parent_id: Option<i64> = conn
.query_row(
"SELECT parent_id FROM file_nodes WHERE name = ?1",
[spec.name],
|r| r.get(0),
)
.unwrap();
assert_eq!(
parent_id, None,
"{}: top-level node {} must map to the target's implicit root (NULL parent), not nest under an account-root directory (issue #18)",
seed.username, spec.name
);
}
for spec in account.layout.files {
let segments = layout_segments(account.layout.files, spec.key);
let mut probes: Vec<Vec<&str>> = Vec::new();