Preserve extension names in module preflight

This commit is contained in:
2026-07-26 18:06:43 +03:00
parent ad4bd3ec72
commit 00040e5ce4
7 changed files with 440 additions and 17 deletions
+62 -1
View File
@@ -11668,6 +11668,64 @@ def test_saved_state_modules_search_scopes_extension_to_cassave_prefix(monkeypat
assert seen_rows == [f"{extension_guid}__object-guid.0"]
@pytest.mark.parametrize("requested_extension", [None, "test2"])
def test_saved_state_modules_search_preserves_public_extension_name(
monkeypatch: pytest.MonkeyPatch,
requested_extension: str | None,
) -> None:
extension_guid = "FB26CF42-7609-11F1-828F-005056B0D483"
file_name = f"{extension_guid.lower()}__form-guid.0"
monkeypatch.setattr(
adapter_server,
"extension_map_by_guid",
lambda base_id: {extension_guid: {"guid": extension_guid, "name": "test2"}},
)
monkeypatch.setattr(
adapter_server,
"storage_files_list",
lambda payload: {
"status": "ok",
"files": [{"FileName": file_name, "PartCount": 1, "Bytes": 1}],
},
)
monkeypatch.setattr(
adapter_server,
"saved_state_module_search_row",
lambda **kwargs: {
"table": "ConfigCASSave",
"file_name": file_name,
"owner": {"status": "resolved", "kind": "Catalog", "name": "test2"},
"form": {"name": "t_Форма"},
"module": {"kind": "form_module", "name": "Модуль формы"},
"qualified_name": "test2.t_Форма.Модуль формы",
"streams": [
{
"preview": "Процедура Команда()\nКонецПроцедуры",
"match": {"query": None, "in_text": False},
}
],
},
)
payload = {
"base_id": "upo_test",
"tables": ["ConfigCASSave"],
"limit": 5,
}
if requested_extension:
payload["extension"] = requested_extension
result = adapter_server.metadata_saved_state_modules_search(payload)
assert result["status"] == "ok"
assert result["counts"]["modules"] == 1
module = result["modules"][0]
assert module["selector"]["extension"] == "test2"
assert module["streams"][0]["write_plan_target"]["extension"] == "test2"
assert "extension_guid" not in str(module)
assert extension_guid.lower() not in str(module).lower()
def test_saved_state_forms_search_scopes_extension_to_cassave_prefix(monkeypatch: pytest.MonkeyPatch) -> None:
extension_guid = "fb26cf42-7609-11f1-828f-005056b0d483"
seen_file_list_payloads = []
@@ -25065,12 +25123,14 @@ def test_public_saved_state_module_search_row_is_name_first() -> None:
},
}
],
}
},
requested_extension="test2",
)
assert public is not None
assert public["qualified_name"] == "test2.t_Форма.Модуль формы"
assert public["selector"] == {
"extension": "test2",
"ref": "Catalog.test2",
"form": "t_Форма",
"module": "Модуль формы",
@@ -25079,6 +25139,7 @@ def test_public_saved_state_module_search_row_is_name_first() -> None:
assert public["streams"][0]["match"] == {"query": "Команда", "in_text": True, "in_name": False}
assert public["streams"][0]["write_plan_target"] == {
"kind": "module",
"extension": "test2",
"ref": "Catalog.test2",
"form": "t_Форма",
"module": "Модуль формы",
+66
View File
@@ -112,6 +112,72 @@ def test_public_extension_form_candidate_is_name_first_and_prefers_title() -> No
}
def test_public_extension_module_candidate_is_name_first() -> None:
result = smoke.first_public_extension_module_candidate(
{
"modules": [
{
"streams": [
{
"preview": "\n&НаКлиенте\nПроцедура Команда()\nКонецПроцедуры",
"write_plan_target": {
"kind": "module",
"extension": "test2",
"ref": "Catalog.test2",
"form": "t_Форма",
"module": "Модуль формы",
"qualified_name": "test2.t_Форма.Модуль формы",
"stream_ordinal": 1,
},
}
]
}
]
}
)
assert result == {
"target": {
"kind": "module",
"extension": "test2",
"ref": "Catalog.test2",
"form": "t_Форма",
"module": "Модуль формы",
"qualified_name": "test2.t_Форма.Модуль формы",
"stream_ordinal": 1,
},
"intent": {
"operation": "replace_with_control",
"control_fragment": "&НаКлиенте",
"new": "&НаКлиенте\nПроцедура Команда()\nКонецПроцедуры",
},
}
def test_public_extension_module_candidate_rejects_storage_handle() -> None:
result = smoke.first_public_extension_module_candidate(
{
"modules": [
{
"streams": [
{
"preview": "Процедура Команда()\nКонецПроцедуры",
"write_plan_target": {
"extension": "test2",
"ref": "Catalog.test2",
"module": "Модуль формы",
"module_ref": "ConfigCASSave:opaque.0",
},
}
]
}
]
}
)
assert result is None
def test_different_extension_guid_changes_only_last_hex_digit() -> None:
assert (
smoke.different_extension_guid(