feat: add reusable content fragments
This commit is contained in:
+39
-1
@@ -2,20 +2,26 @@ from __future__ import annotations
|
||||
|
||||
import hashlib
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
|
||||
from govoplan_core.auth import ApiPrincipal
|
||||
from govoplan_core.core.access import PrincipalRef
|
||||
from govoplan_core.core.files import ManagedArtifactRef
|
||||
from govoplan_core.core.templates import (
|
||||
CAPABILITY_TEMPLATE_CATALOG,
|
||||
CAPABILITY_TEMPLATE_CONTENT_LIBRARY,
|
||||
CAPABILITY_TEMPLATE_RENDERER,
|
||||
TemplateCompatibilityError,
|
||||
TemplateContentDraftRequest,
|
||||
TemplateRenderError,
|
||||
TemplateRenderRequest,
|
||||
)
|
||||
from govoplan_core.db.base import Base
|
||||
from govoplan_core.db.session import configure_database, reset_database
|
||||
from govoplan_templates.backend.capabilities import SqlTemplateCatalog
|
||||
from govoplan_templates.backend.capabilities import (
|
||||
SqlTemplateCatalog,
|
||||
SqlTemplateContentLibrary,
|
||||
)
|
||||
from govoplan_templates.backend.db.models import (
|
||||
TemplateDefinition,
|
||||
TemplateRender,
|
||||
@@ -158,10 +164,38 @@ class TemplateServiceTests(unittest.TestCase):
|
||||
self.assertEqual(1, len(refs))
|
||||
self.assertEqual("serial_letter", refs[0].template_type)
|
||||
self.assertEqual(("campaign.postal",), refs[0].revision.usages)
|
||||
self.assertIn("Dear", refs[0].revision.content_html)
|
||||
self.assertEqual("postal.address", refs[0].revision.required_fields[1].path)
|
||||
self.assertNotEqual(first.definition_hash, second.definition_hash)
|
||||
self.assertEqual(2, second.revision)
|
||||
|
||||
def test_content_library_creates_unpublished_provider_owned_draft(self) -> None:
|
||||
with self.database.session() as session, patch(
|
||||
"govoplan_templates.backend.capabilities.audit_from_principal"
|
||||
), patch("govoplan_templates.backend.capabilities.emit_platform_event"):
|
||||
result = SqlTemplateContentLibrary().create_content_draft(
|
||||
session,
|
||||
principal(),
|
||||
request=TemplateContentDraftRequest(
|
||||
name="Closing paragraph",
|
||||
template_type="content_fragment",
|
||||
usages=("campaign.content",),
|
||||
locale="de",
|
||||
content_text="Mit freundlichen Grüßen",
|
||||
metadata={"campaign_targets": ["text"]},
|
||||
),
|
||||
)
|
||||
session.commit()
|
||||
|
||||
self.assertEqual("draft", result.status)
|
||||
self.assertEqual("content_fragment", result.template_type)
|
||||
self.assertEqual("Mit freundlichen Grüßen", result.revision.content_text)
|
||||
self.assertEqual(["text"], result.revision.metadata["campaign_targets"])
|
||||
self.assertEqual(
|
||||
"templates.content_library",
|
||||
result.revision.metadata["created_through"],
|
||||
)
|
||||
|
||||
def test_frozen_postal_snapshot_renders_deterministic_letter_bundle(self) -> None:
|
||||
frozen = (
|
||||
{"name": "Ada", "postal": {"address": "Street 1"}},
|
||||
@@ -322,6 +356,10 @@ class TemplateManifestTests(unittest.TestCase):
|
||||
self.assertFalse(manifest.dependencies)
|
||||
self.assertIn("files", manifest.optional_dependencies)
|
||||
self.assertIn(CAPABILITY_TEMPLATE_CATALOG, manifest.capability_factories)
|
||||
self.assertIn(
|
||||
CAPABILITY_TEMPLATE_CONTENT_LIBRARY,
|
||||
manifest.capability_factories,
|
||||
)
|
||||
self.assertIn(CAPABILITY_TEMPLATE_RENDERER, manifest.capability_factories)
|
||||
self.assertEqual("@govoplan/templates-webui", manifest.frontend.package_name)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user