generated from coulomb/repo-seed
108 lines
3.8 KiB
Python
108 lines
3.8 KiB
Python
from markitect_tool.diagnostics import has_error
|
|
from markitect_tool.render import (
|
|
RENDER_EXPORT_ADAPTER_ENTRY_POINT_GROUP,
|
|
RENDER_EXPORT_SCHEMA_VERSION,
|
|
RenderExportAdapterDescriptor,
|
|
RenderExportAdapterRegistry,
|
|
RenderExportRequest,
|
|
default_render_export_adapter_registry,
|
|
render_capability_diagnostics,
|
|
render_export_registry_descriptor,
|
|
render_with_adapter,
|
|
)
|
|
|
|
|
|
def test_render_export_registry_lists_fake_adapter_and_serializes_descriptor():
|
|
registry = default_render_export_adapter_registry()
|
|
|
|
descriptor = registry.get("render.fake")
|
|
data = descriptor.to_dict()
|
|
|
|
assert data["kind"] == "render-export"
|
|
assert data["operations"] == ["inspect-profile", "export-source", "render-artifact"]
|
|
assert "pdf" in data["output_profiles"]
|
|
assert registry.to_dict()["count"] >= 1
|
|
|
|
|
|
def test_fake_render_export_adapter_exports_source_and_provenance():
|
|
request = RenderExportRequest(
|
|
source="# Demo\n\nBody.",
|
|
operation="export-source",
|
|
profile="docs",
|
|
source_path="docs/demo.md",
|
|
)
|
|
|
|
result = render_with_adapter(request)
|
|
|
|
assert result.valid
|
|
assert result.schema_version == RENDER_EXPORT_SCHEMA_VERSION
|
|
assert result.exported_source.startswith("<!-- render.fake profile=docs")
|
|
assert result.artifacts[0].role == "renderer-source"
|
|
assert result.artifacts[0].media_type == "text/markdown"
|
|
assert result.provenance[0].source_path == "docs/demo.md"
|
|
assert result.provenance[0].artifact_id == result.artifacts[0].artifact_id
|
|
|
|
|
|
def test_fake_render_export_adapter_renders_artifact_without_external_renderer():
|
|
request = RenderExportRequest(source="# Demo", operation="render-artifact", profile="pdf")
|
|
|
|
result = render_with_adapter(request)
|
|
|
|
assert result.valid
|
|
assert result.artifacts[0].role == "rendered-artifact"
|
|
assert result.artifacts[0].digest.startswith("sha256:")
|
|
assert result.metadata["external_renderer_invoked"] is False
|
|
|
|
|
|
def test_render_export_request_validation_reports_unsupported_profile():
|
|
request = RenderExportRequest(source="# Demo", operation="render-artifact", profile="epub")
|
|
|
|
result = render_with_adapter(request)
|
|
|
|
assert not result.valid
|
|
assert result.diagnostics[0].code == "render.profile_unsupported"
|
|
|
|
|
|
def test_render_capability_policy_blocks_declared_safety_flags():
|
|
descriptor = RenderExportAdapterDescriptor(
|
|
id="render.external",
|
|
version="1",
|
|
name="External Renderer",
|
|
operations=["render-artifact"],
|
|
input_contracts=["Markdown"],
|
|
output_profiles=["pdf"],
|
|
artifact_media_types=["application/pdf"],
|
|
factory=lambda: object(),
|
|
safety={"external_process": True, "filesystem_write": True},
|
|
)
|
|
request = RenderExportRequest(
|
|
source="# Demo",
|
|
operation="render-artifact",
|
|
profile="pdf",
|
|
policy={"external_process": False, "filesystem_write": False},
|
|
)
|
|
|
|
diagnostics = render_capability_diagnostics(descriptor, request)
|
|
|
|
assert len(diagnostics) == 1
|
|
assert diagnostics[0].code == "render.capability_blocked"
|
|
assert diagnostics[0].details["capabilities"] == ["external_process", "filesystem_write"]
|
|
|
|
|
|
def test_render_export_registry_descriptor_points_to_entry_point_group():
|
|
descriptor = render_export_registry_descriptor()
|
|
|
|
assert descriptor.id == "render.export-registry"
|
|
assert descriptor.kind == "render-export-registry"
|
|
assert descriptor.metadata["entry_point_group"] == RENDER_EXPORT_ADAPTER_ENTRY_POINT_GROUP
|
|
assert descriptor.metadata["concrete_renderer_execution_required"] is False
|
|
|
|
|
|
def test_render_result_validity_tracks_error_diagnostics():
|
|
request = RenderExportRequest(source="", operation="render-artifact", profile="plain")
|
|
|
|
result = render_with_adapter(request)
|
|
|
|
assert has_error(result.diagnostics)
|
|
assert not result.valid
|