Initial SQL-only 1C adapter baseline
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
|
||||
|
||||
def load_script(name: str):
|
||||
path = ROOT / "scripts" / name
|
||||
spec = importlib.util.spec_from_file_location(path.stem, path)
|
||||
assert spec and spec.loader
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
return module
|
||||
|
||||
|
||||
builder = load_script("build_1c_moxel_schema_registry.py")
|
||||
checker = load_script("check_1c_moxel_schema_registry.py")
|
||||
|
||||
|
||||
def test_build_registry_promotes_complete_high_confidence_rule_to_verified_read() -> None:
|
||||
registry = builder.build_registry(
|
||||
{
|
||||
"rules": [
|
||||
{
|
||||
"id": "inline_text_column_from_last_preceding_scalar_plus_one",
|
||||
"target": "moxel.inline_text_cell.column",
|
||||
"expression": "one_based_column = int(last_numeric(preceding_scalars)) + 1",
|
||||
"confidence": "high",
|
||||
"evidence": {"ok": 16, "total": 16},
|
||||
},
|
||||
{
|
||||
"target": "moxel.named_range.left",
|
||||
"confidence": "medium",
|
||||
"raw_scalar_indexes": [2, 4],
|
||||
},
|
||||
]
|
||||
},
|
||||
["discovery.json"],
|
||||
)
|
||||
|
||||
rules = {rule["target"]: rule for rule in registry["rules"]}
|
||||
assert rules["moxel.inline_text_cell.column"]["read_status"] == "verified_read"
|
||||
assert rules["moxel.inline_text_cell.column"]["write_status"] == "blocked_until_roundtrip"
|
||||
assert rules["moxel.named_range.left"]["read_status"] == "candidate_read"
|
||||
assert registry["counts"]["verified_read"] == 1
|
||||
assert registry["counts"]["write_enabled"] == 0
|
||||
|
||||
|
||||
def test_build_registry_promotes_named_range_analysis_over_discovery_candidate() -> None:
|
||||
registry = builder.build_registry(
|
||||
{
|
||||
"rules": [
|
||||
{
|
||||
"id": "inline_text_column_from_last_preceding_scalar_plus_one",
|
||||
"target": "moxel.inline_text_cell.column",
|
||||
"confidence": "high",
|
||||
"evidence": {"ok": 1, "total": 1},
|
||||
},
|
||||
{
|
||||
"target": "moxel.named_range.left",
|
||||
"confidence": "medium",
|
||||
"raw_scalar_indexes": [2, 4],
|
||||
},
|
||||
]
|
||||
},
|
||||
["discovery.json", "named.json"],
|
||||
{
|
||||
"rules": [
|
||||
{
|
||||
"target": "moxel.named_range.left",
|
||||
"confidence": "high",
|
||||
"raw_scalar_indexes": [2],
|
||||
"expression": "one_based = int(raw_scalar) + 1",
|
||||
"evidence": {"samples": 1, "distinct_rectangular_samples": 1},
|
||||
}
|
||||
]
|
||||
},
|
||||
)
|
||||
|
||||
rules = {rule["target"]: rule for rule in registry["rules"]}
|
||||
assert rules["moxel.named_range.left"]["raw_scalar_indexes"] == [2]
|
||||
assert rules["moxel.named_range.left"]["read_status"] == "verified_read"
|
||||
assert rules["moxel.named_range.left"]["write_status"] == "blocked_until_roundtrip"
|
||||
|
||||
|
||||
def test_check_registry_rejects_write_enabled_rules() -> None:
|
||||
registry = builder.build_registry(
|
||||
{
|
||||
"rules": [
|
||||
{
|
||||
"id": "inline_text_column_from_last_preceding_scalar_plus_one",
|
||||
"target": "moxel.inline_text_cell.column",
|
||||
"confidence": "high",
|
||||
"evidence": {"ok": 1, "total": 1},
|
||||
}
|
||||
]
|
||||
},
|
||||
["discovery.json"],
|
||||
)
|
||||
registry["rules"][0]["write_status"] = "verified_roundtrip"
|
||||
|
||||
report = checker.check_registry(registry)
|
||||
|
||||
assert report["status"] == "failed"
|
||||
assert any("write rules must stay disabled" in failure for failure in report["failures"])
|
||||
|
||||
|
||||
def test_check_registry_rejects_inconsistent_counts() -> None:
|
||||
registry = builder.build_registry(
|
||||
{
|
||||
"rules": [
|
||||
{
|
||||
"id": "inline_text_column_from_last_preceding_scalar_plus_one",
|
||||
"target": "moxel.inline_text_cell.column",
|
||||
"confidence": "high",
|
||||
"evidence": {"ok": 1, "total": 1},
|
||||
}
|
||||
]
|
||||
},
|
||||
["discovery.json"],
|
||||
)
|
||||
registry["counts"]["rules"] = 99
|
||||
|
||||
report = checker.check_registry(registry)
|
||||
|
||||
assert report["status"] == "failed"
|
||||
assert "counts.rules must be 1, got 99" in report["failures"]
|
||||
Reference in New Issue
Block a user