Make render status receipt based
This commit is contained in:
parent
21c4992f9c
commit
0fe968c475
10 changed files with 913 additions and 27 deletions
|
|
@ -10,6 +10,7 @@ import time
|
|||
import unittest
|
||||
from contextlib import contextmanager
|
||||
from pathlib import Path
|
||||
from unittest import mock
|
||||
|
||||
from mcp import ClientSession, StdioServerParameters
|
||||
from mcp.client.stdio import stdio_client
|
||||
|
|
@ -79,6 +80,10 @@ class DocForgeMcpTests(unittest.IsolatedAsyncioTestCase):
|
|||
):
|
||||
self.assertIn("limit", tools[name].inputSchema["properties"])
|
||||
self.assertNotIn("limit", tools[name].inputSchema.get("required", []))
|
||||
self.assertIn(
|
||||
"deep",
|
||||
tools["docforge_render_status"].inputSchema["properties"],
|
||||
)
|
||||
self.assertFalse(
|
||||
any(
|
||||
token in name
|
||||
|
|
@ -188,6 +193,7 @@ class DocForgeMcpTests(unittest.IsolatedAsyncioTestCase):
|
|||
self.assertFalse(contract["proposal_access"]["enabled"])
|
||||
self.assertFalse(results[3].structuredContent["available"])
|
||||
self.assertTrue(results[11].structuredContent["configured"])
|
||||
self.assertEqual("receipt", results[11].structuredContent["verification"])
|
||||
self.assertEqual("stale", results[11].structuredContent["state"])
|
||||
visualization = results[12].structuredContent["visualization"]
|
||||
self.assertTrue(visualization["read_only"])
|
||||
|
|
@ -220,6 +226,31 @@ class DocForgeMcpTests(unittest.IsolatedAsyncioTestCase):
|
|||
result.structuredContent["error"]["code"],
|
||||
)
|
||||
|
||||
async def test_render_status_error_never_loads_or_synchronizes_project(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
root = self.copy_fixture("alpha", Path(directory))
|
||||
project = Project.open(root)
|
||||
service = DocForgeService(project)
|
||||
with (
|
||||
mock.patch.object(
|
||||
project,
|
||||
"load",
|
||||
side_effect=AssertionError("status error decoration must remain cheap"),
|
||||
),
|
||||
mock.patch.object(
|
||||
service.index,
|
||||
"synchronize",
|
||||
side_effect=AssertionError("status must not synchronize"),
|
||||
),
|
||||
):
|
||||
result = service.render_status("not-a-view")
|
||||
|
||||
self.assertEqual("error", result["status"])
|
||||
self.assertEqual("unknown_render_view", result["error"]["code"])
|
||||
self.assertEqual("unknown", result["revision"])
|
||||
self.assertIsNone(result["source_hash"])
|
||||
self.assertEqual("unknown", result["staleness"])
|
||||
|
||||
async def test_sync_register_rebase_apply_and_lifecycle_are_one_bound_workflow(
|
||||
self,
|
||||
) -> None:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue