Initial SQL-only 1C adapter baseline
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
sys.path.insert(0, str(ROOT / "scripts"))
|
||||
|
||||
from resolve_1c_bsl_symbol import load_json, resolve_symbol # noqa: E402
|
||||
|
||||
|
||||
METADATA = ROOT / "plugins" / "1c" / "metadata" / "examples" / "metadata-v2.example.json"
|
||||
MODULES = ROOT / "plugins" / "1c" / "metadata" / "examples" / "bsl-modules.example.json"
|
||||
|
||||
|
||||
def resolve(expression: str, **kwargs: str) -> dict:
|
||||
return resolve_symbol(
|
||||
load_json(METADATA),
|
||||
load_json(MODULES),
|
||||
expression=expression,
|
||||
object_kind="catalog",
|
||||
object_name="Номенклатура",
|
||||
module_id="catalog.Номенклатура.object",
|
||||
routine_name="ПередЗаписью",
|
||||
**kwargs,
|
||||
)
|
||||
|
||||
|
||||
def test_full_metadata_path_resolves_as_metadata() -> None:
|
||||
result = resolve("Справочник.Номенклатура.Артикул")
|
||||
|
||||
assert result["status"] == "resolved"
|
||||
assert result["resolution_kind"] == "metadata_path"
|
||||
assert result["canonical_path"] == "Справочник.Номенклатура.Артикул"
|
||||
assert result["safe_as_metadata_path"] is True
|
||||
|
||||
|
||||
def test_object_module_attribute_resolves_from_context() -> None:
|
||||
result = resolve("Наименование")
|
||||
|
||||
assert result["status"] == "resolved"
|
||||
assert result["resolution_kind"] == "context_metadata_member"
|
||||
assert result["canonical_path"] == "Справочник.Номенклатура.Наименование"
|
||||
assert result["context_path"] == "Наименование"
|
||||
|
||||
|
||||
def test_routine_parameter_wins_over_metadata_guess() -> None:
|
||||
result = resolve("Отказ.Код")
|
||||
|
||||
assert result["status"] == "resolved"
|
||||
assert result["resolution_kind"] == "parameter"
|
||||
assert result["context_path"] == "Отказ.Код"
|
||||
assert result["safe_as_metadata_path"] is False
|
||||
|
||||
|
||||
def test_short_object_name_is_candidate_not_metadata_path() -> None:
|
||||
result = resolve("Номенклатура.ЕдИзмерение.Код")
|
||||
|
||||
assert result["status"] == "unresolved"
|
||||
assert result["safe_as_metadata_path"] is False
|
||||
assert result["candidates"][0]["canonical_path"] == "Справочник.Номенклатура"
|
||||
assert result["candidates"][0]["reason"] == "short_object_name_requires_kind"
|
||||
Reference in New Issue
Block a user