Complete name-first MCP write-plan composition

This commit is contained in:
2026-07-26 17:05:05 +03:00
parent 92a331f149
commit 1ca47dce13
9 changed files with 345 additions and 18 deletions
+48
View File
@@ -0,0 +1,48 @@
from __future__ import annotations
from typing import Any
import scripts.plan_1c_saved_state_copy as copy_plan
import scripts.smoke_1c_code_write_saved_state as code_write_smoke
def test_resolve_object_uses_name_first_object_get(monkeypatch) -> None:
calls: list[tuple[str, dict[str, Any]]] = []
def fake_rpc(base_url: str, method: str, payload: dict[str, Any], timeout: float) -> dict[str, Any]:
calls.append((method, payload))
assert method == "metadata.object.get"
return {
"status": "ok",
"object": {
"guid": "40045984-a54c-42bd-8ea8-1c10672f40ec",
"kind": "Catalog",
"name": "АвансовыйОтчетПрисоединенныеФайлы",
},
}
monkeypatch.setattr(copy_plan, "rpc", fake_rpc)
selector = {
"base_id": "upo_test",
"ref": "Catalog.АвансовыйОтчетПрисоединенныеФайлы",
"include_storage": True,
"table": "Config",
}
result = copy_plan.resolve_object("http://adapter.example", selector, "Config", 1)
assert result["kind"] == "Catalog"
assert result["name"] == "АвансовыйОтчетПрисоединенныеФайлы"
assert calls == [("metadata.object.get", selector)]
def test_optional_code_write_smoke_skips_only_policy_gate() -> None:
assert code_write_smoke.is_optional_write_gate_block(
{"status": "blocked", "error": "needs_repository_lock"}
)
assert not code_write_smoke.is_optional_write_gate_block(
{"status": "blocked", "error": "write_plan_blocked"}
)
assert not code_write_smoke.is_optional_write_gate_block(
{"status": "error", "error": "needs_repository_lock"}
)