Route extension preflight gates by public name
This commit is contained in:
@@ -21787,6 +21787,147 @@ def test_metadata_write_plan_reports_unresolved_public_form_selector(monkeypatch
|
||||
assert any(problem["code"] == "public_form_target_not_resolved" for problem in result["problems"])
|
||||
|
||||
|
||||
def test_write_gate_context_resolves_public_extension_name_to_guid(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
extension_guid = "fb26cf42-7609-11f1-828f-005056b0d483"
|
||||
monkeypatch.setattr(
|
||||
adapter_server,
|
||||
"extension_filter_to_guid",
|
||||
lambda base_id, extension, method: (
|
||||
extension_guid,
|
||||
None,
|
||||
)
|
||||
if (base_id, extension, method) == ("upo_test", "test2", "write.gate_context")
|
||||
else (None, {"status": "not_found"}),
|
||||
)
|
||||
|
||||
result = adapter_server.resolve_write_gate_context(
|
||||
{
|
||||
"base_id": "upo_test",
|
||||
"target": {
|
||||
"kind": "form",
|
||||
"extension": "test2",
|
||||
"ref": "Catalog.test2",
|
||||
"form": "t_Форма",
|
||||
"command": "ЗаменаДомена",
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
assert result["extension_guid"] == extension_guid
|
||||
assert result["target"]["extension"] == "test2"
|
||||
assert result["target"]["extension_guid"] == extension_guid
|
||||
assert result["target"]["origin"]["extension"] == {
|
||||
"guid": extension_guid,
|
||||
"name": "test2",
|
||||
}
|
||||
assert result["target"]["origin"]["source"] == "extension"
|
||||
assert result["target"]["origin"]["status"] == "ok"
|
||||
assert result["development_layer_resolution"]["source"] == "extension_name"
|
||||
assert adapter_server.repository_control.development_layer_id(result) == f"extension:{extension_guid}"
|
||||
|
||||
|
||||
def test_write_gate_context_does_not_fall_back_to_base_for_unknown_extension(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
monkeypatch.setattr(
|
||||
adapter_server,
|
||||
"extension_filter_to_guid",
|
||||
lambda *_args, **_kwargs: (
|
||||
None,
|
||||
{"status": "not_found", "error": "extension_not_found"},
|
||||
),
|
||||
)
|
||||
|
||||
result = adapter_server.resolve_write_gate_context(
|
||||
{
|
||||
"base_id": "upo_test",
|
||||
"target": {
|
||||
"kind": "form",
|
||||
"extension": "missing-extension",
|
||||
"ref": "Catalog.test2",
|
||||
"form": "t_Форма",
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
assert "extension_guid" not in result
|
||||
assert result["development_layer_resolution"]["status"] == "not_resolved"
|
||||
assert result["development_layer_resolution"]["diagnostics"]["error"] == "extension_not_found"
|
||||
assert adapter_server.repository_control.development_layer_id(result) == "extension:unresolved"
|
||||
|
||||
|
||||
def test_metadata_write_preflight_routes_public_extension_form_gates_to_extension_layer(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
extension_guid = "fb26cf42-7609-11f1-828f-005056b0d483"
|
||||
captured_layers: list[str] = []
|
||||
monkeypatch.setattr(
|
||||
adapter_server,
|
||||
"extension_filter_to_guid",
|
||||
lambda base_id, extension, method: (extension_guid, None),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
adapter_server,
|
||||
"metadata_form_write_target_resolve",
|
||||
lambda payload: {
|
||||
"schema": "onec_form_write_target_resolution.v1",
|
||||
"status": "ok",
|
||||
"source": {
|
||||
"kind": "live_sql",
|
||||
"table": "ConfigCASSave",
|
||||
"file_name": f"{extension_guid}__form-guid.0",
|
||||
},
|
||||
"counts": {"matches": 1},
|
||||
},
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
adapter_server,
|
||||
"metadata_saved_state_diff",
|
||||
lambda payload: {
|
||||
"status": "changed",
|
||||
"target": {
|
||||
"table": payload["table"],
|
||||
"file_name": payload["file_name"],
|
||||
},
|
||||
"freshness": {
|
||||
"source": "live_sql",
|
||||
"status": "live_sql_verified",
|
||||
"verified_against_sql": True,
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
def fake_gate(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
layer_id = adapter_server.repository_control.development_layer_id(payload)
|
||||
captured_layers.append(layer_id)
|
||||
return {"status": "ok", "allowed": True, "layer_id": layer_id}
|
||||
|
||||
monkeypatch.setattr(adapter_server.repository_control, "write_gate", fake_gate)
|
||||
monkeypatch.setattr(adapter_server, "live_sql_support_gate", fake_gate)
|
||||
|
||||
result = adapter_server.metadata_write_preflight(
|
||||
{
|
||||
"base_id": "upo_test",
|
||||
"target": {
|
||||
"kind": "form",
|
||||
"extension": "test2",
|
||||
"ref": "Catalog.test2",
|
||||
"form": "t_Форма",
|
||||
"command": "ЗаменаДомена",
|
||||
},
|
||||
"edits": [{"property": "Заголовок", "value": "Новое имя"}],
|
||||
"resolve_origin": False,
|
||||
}
|
||||
)
|
||||
|
||||
expected_layer = f"extension:{extension_guid}"
|
||||
assert result["status"] == "ready"
|
||||
assert result["allowed"] is True
|
||||
assert result["repository"]["layer_id"] == expected_layer
|
||||
assert result["support"]["layer_id"] == expected_layer
|
||||
assert captured_layers == [expected_layer, expected_layer]
|
||||
|
||||
|
||||
def test_metadata_write_plan_help_describes_name_first_form_and_module_targets() -> None:
|
||||
methods = {
|
||||
row["name"]: row
|
||||
|
||||
Reference in New Issue
Block a user