Scoped CMIS workspace folders with create, list, parent, path lookup, delete, and delete-tree behavior

This commit is contained in:
2026-05-08 16:47:30 +02:00
parent efb6152487
commit 06e3654aaa
6 changed files with 1103 additions and 23 deletions

View File

@@ -190,6 +190,58 @@ def test_runtime_cmis_governed_authoring_allows_selected_mutations(cmis_runtime)
assert "CMIS object not found" in str(exc_info.value)
def test_runtime_cmis_compat_profile_supports_workspace_folder_lifecycle(cmis_runtime) -> None:
runtime, context = cmis_runtime
folder = runtime.cmis_create_folder(
"compat-tck",
{"name": "TCK Workspace", "properties": {"cmis:objectTypeId": "cmis:folder"}},
context,
)
folder_object_id = folder["object_id"]
root_children = runtime.cmis_children("compat-tck", context)
fetched = runtime.cmis_object("compat-tck", folder_object_id, context)
parents = runtime.cmis_object_parents("compat-tck", folder_object_id, context)
document = runtime.cmis_create_document(
"compat-tck",
{
"name": "Workspace Document",
"folder_id": folder_object_id,
"content": "Workspace content",
"media_type": "text/plain",
},
context,
)
folder_children = runtime.cmis_children("compat-tck", context, folder_id=folder_object_id)
document_by_path = runtime.cmis_object_by_path("compat-tck", "/TCK Workspace/Workspace Document", context)
document_parents = runtime.cmis_object_parents("compat-tck", document["object_id"], context)
assert folder["path"] == "/TCK Workspace"
assert folder["properties"]["kontextual:workspaceFolder"] is True
assert folder_object_id in {item["object_id"] for item in root_children["objects"]}
assert fetched["properties"]["cmis:path"] == "/TCK Workspace"
assert parents["parents"][0]["object_id"] == "cmis-root"
assert document["path"] == "/TCK Workspace/Workspace Document"
assert document["properties"]["cmis:path"] == "/TCK Workspace/Workspace Document"
assert document_by_path["object_id"] == document["object_id"]
assert document_parents["count"] == 1
assert document_parents["parents"][0]["properties"]["cmis:path"] == "/TCK Workspace"
assert document["object_id"] in {item["object_id"] for item in folder_children["objects"]}
with pytest.raises(Exception) as exc_info:
runtime.cmis_delete_object("compat-tck", folder_object_id, {}, context)
assert "CMIS folder is not empty" in str(exc_info.value)
deleted_tree = runtime.cmis_delete_tree("compat-tck", folder_object_id, {}, context)
root_children_after_delete = runtime.cmis_children("compat-tck", context)
assert deleted_tree["failedToDelete"] == []
assert folder_object_id not in {item["object_id"] for item in root_children_after_delete["objects"]}
with pytest.raises(Exception) as exc_info:
runtime.cmis_object("compat-tck", folder_object_id, context)
assert "CMIS folder not found" in str(exc_info.value)
def test_runtime_cmis_rejects_unsupported_standard_property_updates(cmis_runtime) -> None:
runtime, context = cmis_runtime
@@ -216,6 +268,15 @@ def test_runtime_cmis_readonly_profile_rejects_mutations(cmis_runtime) -> None:
assert "CMIS operation denied" in str(exc_info.value)
with pytest.raises(Exception) as exc_info:
runtime.cmis_create_folder(
"readonly-browser",
{"name": "Denied Folder"},
context,
)
assert "CMIS operation denied" in str(exc_info.value)
def test_runtime_cmis_acl_projection_and_redaction(cmis_runtime) -> None:
runtime, context = cmis_runtime