Files
govoplan-core/tests/test_template_contract.py

103 lines
3.3 KiB
Python

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_CONTENT_LIBRARY,
CAPABILITY_TEMPLATE_RENDERER,
TemplateCatalogProvider,
TemplateContentDraftRequest,
TemplateContentLibraryProvider,
TemplateFieldRequirement,
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 _ContentLibrary:
def create_content_draft(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.content_library", CAPABILITY_TEMPLATE_CONTENT_LIBRARY
)
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(_ContentLibrary(), TemplateContentLibraryProvider)
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)
content = TemplateContentDraftRequest(
name="Closing paragraph",
template_type="content_fragment",
usages=("campaign.content",),
content_text="Kind regards",
required_fields=(
TemplateFieldRequirement(path="local.display_name", label="Display name"),
),
)
self.assertEqual("de", content.locale)
self.assertEqual("local.display_name", content.required_fields[0].path)
if __name__ == "__main__":
unittest.main()