103 lines
3.3 KiB
Python
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()
|