projection-only multifiling

This commit is contained in:
2026-05-07 02:52:49 +02:00
parent 801d2f4851
commit 81e132b33b
9 changed files with 250 additions and 46 deletions

View File

@@ -84,6 +84,7 @@ def test_cmis_browser_binding_routes_are_advertised_in_openapi(cmis_client) -> N
assert "/cmis/{access_point_id}/browser/object/{object_id}" in paths
assert "/cmis/{access_point_id}/browser/content/{object_id}" in paths
assert "/cmis/{access_point_id}/browser/acl/{object_id}" in paths
assert "/cmis/{access_point_id}/browser/parents/{object_id}" in paths
assert "/cmis/{access_point_id}/browser/query" in paths
assert "/cmis/{access_point_id}/browser/relationships" in paths
assert "/cmis/{access_point_id}/browser/changes" in paths

View File

@@ -73,7 +73,7 @@ def test_mapper_exposes_repository_info_capabilities_and_base_type_definitions()
assert repository["cmis_version_supported"] == "1.1"
assert repository["binding"] == "browser"
assert repository["capabilities"]["capability_query"] == "metadataonly"
assert repository["capabilities"]["capability_multifiling"] is False
assert repository["capabilities"]["capability_multifiling"] is True
assert set(types) == {
"cmis:document",
@@ -128,6 +128,21 @@ def test_mapper_projects_asset_to_cmis_document_envelope() -> None:
assert CMISAction.UPDATE_PROPERTIES.value not in serialized["allowable_actions"]
def test_mapper_projects_multiple_parent_folders_without_duplicate_assets() -> None:
mapper = _mapper()
asset = _asset()
parents = mapper.parent_folders_for_asset(asset)
parent_paths = {parent["path"] for parent in parents}
assert "/sources/sharepoint/Architecture" in parent_paths
assert "/topics/architecture" in parent_paths
assert "/topics/cmis" in parent_paths
assert "/owners/Platform Knowledge" in parent_paths
assert "/lifecycle/active" in parent_paths
assert len(parent_paths) == len(parents)
def test_governed_authoring_projection_includes_write_allowable_actions() -> None:
mapper = _mapper(CMISAccessProfile.governed_authoring())
asset = _asset()
@@ -175,4 +190,3 @@ def test_mapper_projects_relationship_objects() -> None:
assert serialized["properties"]["cmis:sourceId"] == "cmis:asset:asset-source"
assert serialized["properties"]["cmis:targetId"] == "cmis:asset:asset-target"
assert serialized["properties"]["kontextual:predicate"] == "derived_from"

View File

@@ -25,7 +25,7 @@ def cmis_runtime() -> tuple[ServiceRuntime, object]:
asset_type="document",
sensitivity=Sensitivity.INTERNAL,
owner="Platform Knowledge",
topics=("cmis",),
topics=("cmis", "integration"),
),
context,
asset_id="asset-runtime-source",
@@ -85,16 +85,21 @@ def test_runtime_cmis_browser_repository_types_children_and_object(cmis_runtime)
repository = runtime.cmis_repository_info("readonly-browser")
types = runtime.cmis_type_definitions("readonly-browser")
children = runtime.cmis_children("readonly-browser", context)
topic_children = runtime.cmis_children("readonly-browser", context, folder_id="/topics/cmis")
obj = runtime.cmis_object("readonly-browser", "cmis:asset:asset-runtime-source", context)
parents = runtime.cmis_object_parents("readonly-browser", "cmis:asset:asset-runtime-source", context)
assert access_points["count"] == 4
assert repository["repository_id"] == "kontextual-readonly-browser"
assert repository["capabilities"]["capability_get_descendants"] is True
assert {item["base_type_id"] for item in types["items"]} >= {"cmis:document", "cmis:folder"}
object_ids = {item["object_id"] for item in children["objects"]}
assert "cmis:asset:asset-runtime-source" in object_ids
assert "cmis:asset:asset-runtime-public" in object_ids
assert "cmis:asset:asset-runtime-confidential" not in object_ids
root_paths = {item["path"] for item in children["objects"]}
topic_object_ids = {item["object_id"] for item in topic_children["objects"]}
parent_paths = {item["path"] for item in parents["parents"]}
assert "/topics" in root_paths
assert "cmis:asset:asset-runtime-source" in topic_object_ids
assert "cmis:asset:asset-runtime-confidential" not in topic_object_ids
assert {"/topics/cmis", "/topics/integration"} <= parent_paths
assert obj["properties"]["kontextual:assetId"] == "asset-runtime-source"

View File

@@ -658,6 +658,7 @@ def test_service_health_readiness_version_and_openapi_contracts(client) -> None:
assert "/cmis/{access_point_id}/browser" in paths
assert "/cmis/{access_point_id}/browser/children" in paths
assert "/cmis/{access_point_id}/browser/acl/{object_id}" in paths
assert "/cmis/{access_point_id}/browser/parents/{object_id}" in paths
assert "/cmis/{access_point_id}/browser/document" in paths
assert "/cmis/{access_point_id}/browser/object/{object_id}/properties" in paths
assert "/api/v1/assets" in paths