Add template and generated artifact contracts

This commit is contained in:
2026-08-02 12:37:58 +02:00
parent fe62fd4644
commit e4d2d10c7e
9 changed files with 411 additions and 2 deletions
+76
View File
@@ -0,0 +1,76 @@
from __future__ import annotations
import unittest
from govoplan_core.core.files import (
CAPABILITY_FILES_ARTIFACT_STORE,
ManagedArtifactRef,
ManagedArtifactStore,
ManagedArtifactWriteRequest,
)
from govoplan_core.core.templates import (
CAPABILITY_TEMPLATE_CATALOG,
CAPABILITY_TEMPLATE_RENDERER,
TemplateCatalogProvider,
TemplateRenderRequest,
TemplateRendererProvider,
)
class _Catalog:
def list_templates(self, session, principal, **kwargs):
del session, principal, kwargs
return ()
def get_template(self, session, principal, **kwargs):
del session, principal, kwargs
return None
def check_compatibility(self, session, principal, **kwargs):
del session, principal, kwargs
return None
class _Renderer:
def render(self, session, principal, *, request):
del session, principal, request
return None
class _Store:
def store_artifact(self, session, principal, *, request):
del session, principal
return ManagedArtifactRef(
file_asset_id="file-1",
file_version_id="version-1",
filename=request.filename,
display_path=request.filename,
content_type=request.content_type,
size_bytes=len(request.payload),
sha256="0" * 64,
)
class TemplateContractTests(unittest.TestCase):
def test_capability_names_and_runtime_protocols_are_stable(self) -> None:
self.assertEqual("templates.catalog", CAPABILITY_TEMPLATE_CATALOG)
self.assertEqual("templates.renderer", CAPABILITY_TEMPLATE_RENDERER)
self.assertEqual("files.artifact_store", CAPABILITY_FILES_ARTIFACT_STORE)
self.assertIsInstance(_Catalog(), TemplateCatalogProvider)
self.assertIsInstance(_Renderer(), TemplateRendererProvider)
self.assertIsInstance(_Store(), ManagedArtifactStore)
def test_requests_do_not_expose_consumer_or_files_models(self) -> None:
render = TemplateRenderRequest(template_id="template-1")
artifact = ManagedArtifactWriteRequest(
filename="result.html",
payload=b"result",
content_type="text/html",
)
self.assertEqual((), render.items)
self.assertEqual("preview", render.mode)
self.assertEqual("Generated", artifact.folder)
if __name__ == "__main__":
unittest.main()