Preserve extension names in module preflight
This commit is contained in:
@@ -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": "Модуль формы",
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user