Require name-first extension preflight smoke

This commit is contained in:
2026-07-26 17:48:04 +03:00
parent ef2a94a3d0
commit d99d57eaf9
5 changed files with 333 additions and 5 deletions
+123
View File
@@ -61,3 +61,126 @@ def test_saved_module_target_prefers_bounded_stream(monkeypatch) -> None:
)
assert result == bounded_stream
def test_public_extension_form_candidate_is_name_first_and_prefers_title() -> None:
result = smoke.first_public_extension_form_candidate(
{
"forms": [
{
"matches": [
{
"selector": {
"extension": "test2",
"ref": "Catalog.test2",
"form": "t_Форма",
"command": "ЗаменаДомена",
},
"writable_properties": [
{
"property": "name",
"presentation": "Имя",
"value": "ЗаменаДомена",
"value_type": "string",
},
{
"property": "title",
"presentation": "Заголовок",
"value": "Замена домена",
"value_type": "string",
},
],
}
],
}
]
}
)
assert result == {
"target": {
"kind": "form",
"extension": "test2",
"ref": "Catalog.test2",
"form": "t_Форма",
"command": "ЗаменаДомена",
},
"edit": {
"property": "Заголовок",
"value": "Замена домена [NAME-FIRST PREFLIGHT]",
},
}
def test_name_first_extension_form_preflight_rejects_base_gate_layer(monkeypatch) -> None:
def fake_rpc_call(
_endpoint_url: str,
method: str,
payload: dict[str, Any],
_timeout: float,
*,
transport: str,
session_id: str | None,
) -> dict[str, Any]:
assert transport == "rest"
assert session_id is None
if method == "help.methods":
return {"methods": [{"name": "metadata.write.preflight"}]}
if method == "metadata.saved_state.modules.search":
return {"status": "ok", "modules": []}
if method == "metadata.saved_state.forms.search":
return {
"status": "ok",
"counts": {"forms": 1},
"forms": [
{
"matches": [
{
"selector": {
"extension": "test2",
"ref": "Catalog.test2",
"form": "t_Форма",
"command": "ЗаменаДомена",
},
"writable_properties": [
{
"property": "title",
"presentation": "Заголовок",
"value": "Замена домена",
"value_type": "string",
}
],
}
]
}
],
}
if method == "metadata.write.preflight" and (payload.get("target") or {}).get("extension"):
return {
"schema": "onec_metadata_write_preflight.v1",
"status": "ready",
"allowed": True,
"plan": {"status": "planned", "allowed": True},
"repository": {"layer_id": "base"},
"support": {"layer_id": "base"},
}
return {
"schema": "onec_metadata_write_preflight.v1",
"status": "blocked",
"allowed": False,
"plan": {"allowed": False},
}
monkeypatch.setattr(smoke, "rpc_call", fake_rpc_call)
report = smoke.run_smoke(
"http://adapter",
"upo_test",
30,
transport="rest",
require_name_first_extension_form=True,
)
assert report["status"] == "failed"
assert report["checks"]["name_first_extension_form_preflight"]["name_first"] is True
assert any("resolved extension GUID layer" in failure for failure in report["failures"])