fix(files): a folder's kind is answered before its new name, as before

A blank name on a source folder answered 400 name_required; it answers 409
not_own again.
This commit is contained in:
2026-10-20 00:45:22 +02:00
parent 8206384c91
commit b376373af5
3 changed files with 12 additions and 1 deletions
+6 -1
View File
@@ -328,9 +328,14 @@ def create_own(db: Session, user_id: int, name: str) -> FileFolder:
return folder return folder
def renamable(folder: FileFolder) -> bool:
"""Only a folder of the user's own making takes a name: a source folder's is its origin's."""
return folder.kind == FolderKind.OWN
def rename(db: Session, folder: FileFolder, name: str) -> None: def rename(db: Session, folder: FileFolder, name: str) -> None:
"""Rename one of the user's own folders (a source folder's name is its origin's).""" """Rename one of the user's own folders (a source folder's name is its origin's)."""
if folder.kind != FolderKind.OWN: if not renamable(folder):
raise FolderError("file_folder_not_own") raise FolderError("file_folder_not_own")
folder.name = name folder.name = name
try: try:
+3
View File
@@ -375,6 +375,9 @@ def update_folder(
folder = own_folder(db, user, folder_id) folder = own_folder(db, user, folder_id)
sent = body.model_fields_set sent = body.model_fields_set
if "name" in sent: if "name" in sent:
# Which folder may be renamed is answered before what the name is, as it always was.
if not folders.renamable(folder):
raise refused(409, "file_folder_not_own")
try: try:
folders.rename(db, folder, _folder_name(body.name or "")) folders.rename(db, folder, _folder_name(body.name or ""))
except folders.FolderError as e: except folders.FolderError as e:
+3
View File
@@ -124,6 +124,9 @@ def test_only_an_own_folder_is_renamed_and_only_by_its_user(db, make_user, as_us
assert clash.json()["detail"]["reason"] == "file_folder_name_taken" assert clash.json()["detail"]["reason"] == "file_folder_name_taken"
no = c.patch(f"/api/files/folders/{src.id}", json={"name": "YouTube 2"}) no = c.patch(f"/api/files/folders/{src.id}", json={"name": "YouTube 2"})
assert no.status_code == 409 and no.json()["detail"]["reason"] == "file_folder_not_own" assert no.status_code == 409 and no.json()["detail"]["reason"] == "file_folder_not_own"
# Which folder is answered before what the name is: a blank one is still "not yours to name".
blank = c.patch(f"/api/files/folders/{src.id}", json={"name": " "})
assert blank.status_code == 409 and blank.json()["detail"]["reason"] == "file_folder_not_own"
stranger = as_user(make_user()).patch(f"/api/files/folders/{own.id}", json={"name": "X"}) stranger = as_user(make_user()).patch(f"/api/files/folders/{own.id}", json={"name": "X"})
assert stranger.status_code == 404 assert stranger.status_code == 404
db.refresh(own) db.refresh(own)