"""插件运行时浏览器渲染能力测试。""" from typing import Optional import pytest from src.plugin_runtime.integration import PluginRuntimeManager from src.plugin_runtime.host.supervisor import PluginSupervisor from src.services.html_render_service import HtmlRenderRequest, HtmlRenderResult class _FakeRenderService: """用于替代真实浏览器渲染服务的测试桩。""" def __init__(self) -> None: """初始化测试桩。""" self.last_request: Optional[HtmlRenderRequest] = None async def render_html_to_png(self, request: HtmlRenderRequest) -> HtmlRenderResult: """记录请求并返回固定的渲染结果。 Args: request: 当前渲染请求。 Returns: HtmlRenderResult: 固定的测试渲染结果。 """ self.last_request = request return HtmlRenderResult( image_base64="ZmFrZS1pbWFnZQ==", mime_type="image/png", width=640, height=480, render_ms=12, ) def test_render_capability_is_registered() -> None: """Host 注册能力时应包含 render.html2png。""" manager = PluginRuntimeManager() supervisor = PluginSupervisor(plugin_dirs=[]) manager._register_capability_impls(supervisor) assert "render.html2png" in supervisor.capability_service.list_capabilities() @pytest.mark.asyncio async def test_render_capability_forwards_request(monkeypatch: pytest.MonkeyPatch) -> None: """render.html2png 应将请求透传给浏览器渲染服务。""" from src.plugin_runtime.capabilities import render as render_capability_module fake_service = _FakeRenderService() monkeypatch.setattr(render_capability_module, "get_html_render_service", lambda: fake_service) manager = PluginRuntimeManager() result = await manager._cap_render_html2png( "demo.plugin", "render.html2png", { "html": "