Preserve extension names in form write selectors
This commit is contained in:
@@ -40949,7 +40949,7 @@ def saved_state_form_search_row(
|
||||
if descriptor_identity.get("guid") and not form.get("guid"):
|
||||
form["guid"] = descriptor_identity.get("guid")
|
||||
owner = decoded.get("owner") if isinstance(decoded.get("owner"), dict) else {}
|
||||
if not owner.get("name") and not bool(payload.get("include_storage")):
|
||||
if not owner.get("name"):
|
||||
related_owner = saved_state_related_descriptor_identity(
|
||||
base_id=base_id,
|
||||
table=table,
|
||||
@@ -40986,6 +40986,7 @@ def public_saved_state_form_search_row(
|
||||
row: dict[str, Any],
|
||||
*,
|
||||
requested_owner_kind: str | None = None,
|
||||
requested_extension: str | None = None,
|
||||
) -> dict[str, Any]:
|
||||
owner = row.get("owner") if isinstance(row.get("owner"), dict) else {}
|
||||
form = row.get("form") if isinstance(row.get("form"), dict) else {}
|
||||
@@ -41011,6 +41012,7 @@ def public_saved_state_form_search_row(
|
||||
if part
|
||||
)
|
||||
form_selector = {
|
||||
**({"extension": requested_extension} if requested_extension else {}),
|
||||
**({"ref": owner_ref} if owner_ref else {}),
|
||||
**({"form": form_name} if form_name else {}),
|
||||
**({"qualified_name": qualified_name} if qualified_name else {}),
|
||||
@@ -41168,7 +41170,11 @@ def metadata_saved_state_forms_search(payload: dict[str, Any]) -> dict[str, Any]
|
||||
if len(rows) >= int(limit or 50):
|
||||
break
|
||||
public_rows = rows if include_storage else [
|
||||
public_saved_state_form_search_row(row, requested_owner_kind=owner_kind)
|
||||
public_saved_state_form_search_row(
|
||||
row,
|
||||
requested_owner_kind=owner_kind,
|
||||
requested_extension=extension_filter or None,
|
||||
)
|
||||
for row in rows
|
||||
]
|
||||
return {
|
||||
|
||||
@@ -3024,6 +3024,7 @@ def test_saved_state_forms_search_disambiguates_same_form_name_by_owner(monkeypa
|
||||
|
||||
def test_saved_state_forms_search_default_is_name_first(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
file_name = "extension-guid__form-guid.0"
|
||||
monkeypatch.setattr(adapter_server, "extension_filter_to_guid", lambda *args, **kwargs: ("extension-guid", None))
|
||||
monkeypatch.setattr(
|
||||
adapter_server,
|
||||
"storage_files_list",
|
||||
@@ -3080,6 +3081,7 @@ def test_saved_state_forms_search_default_is_name_first(monkeypatch: pytest.Monk
|
||||
{
|
||||
"base_id": "upo_test",
|
||||
"tables": ["ConfigCASSave"],
|
||||
"extension": "test2",
|
||||
"ref": "Catalog.test2",
|
||||
"form": "t_Форма",
|
||||
"command": "ЗаменаДомена",
|
||||
@@ -3092,11 +3094,13 @@ def test_saved_state_forms_search_default_is_name_first(monkeypatch: pytest.Monk
|
||||
form = result["forms"][0]
|
||||
assert form["qualified_name"] == "test2.t_Форма"
|
||||
assert form["selector"] == {
|
||||
"extension": "test2",
|
||||
"ref": "Catalog.test2",
|
||||
"form": "t_Форма",
|
||||
"qualified_name": "test2.t_Форма",
|
||||
}
|
||||
assert form["matches"][0]["selector"] == {
|
||||
"extension": "test2",
|
||||
"ref": "Catalog.test2",
|
||||
"form": "t_Форма",
|
||||
"qualified_name": "test2.t_Форма",
|
||||
@@ -3125,6 +3129,47 @@ def test_saved_state_forms_search_default_is_name_first(monkeypatch: pytest.Monk
|
||||
assert storage_marker not in str(result)
|
||||
|
||||
|
||||
def test_saved_state_form_search_resolves_owner_for_internal_name_first_write(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
monkeypatch.setattr(
|
||||
adapter_server,
|
||||
"metadata_form_decode",
|
||||
lambda payload: {
|
||||
"status": "ok",
|
||||
"source": {"kind": "live_sql", "table": payload["table"], "file_name": payload["file_name"]},
|
||||
"form": {"file_name": payload["file_name"]},
|
||||
"profile": {"items": [], "commands": []},
|
||||
"counts": {"items": 0, "commands": 0},
|
||||
},
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
adapter_server,
|
||||
"saved_state_form_descriptor_identity",
|
||||
lambda **kwargs: {"name": "t_Форма", "synonym": "T форма", "guid": "form-guid"},
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
adapter_server,
|
||||
"saved_state_related_descriptor_identity",
|
||||
lambda **kwargs: {
|
||||
"kind": "Catalog",
|
||||
"name": "test2",
|
||||
"synonym": "Test2",
|
||||
"guid": "owner-guid",
|
||||
},
|
||||
)
|
||||
|
||||
row = adapter_server.saved_state_form_search_row(
|
||||
base_id="upo_test",
|
||||
table="ConfigCASSave",
|
||||
file_name="extension-guid__form-guid.0",
|
||||
payload={"include_storage": True, "form": "t_Форма"},
|
||||
timeout_seconds=30,
|
||||
)
|
||||
|
||||
assert row is not None
|
||||
assert row["owner"]["kind"] == "Catalog"
|
||||
assert row["owner"]["name"] == "test2"
|
||||
|
||||
|
||||
def test_saved_state_forms_search_help_exposes_owner_and_form_selectors() -> None:
|
||||
method = {
|
||||
row["name"]: row
|
||||
|
||||
Reference in New Issue
Block a user