54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
|
|
def _load_case_module():
|
|
scripts_dir = Path(__file__).resolve().parents[2] / "scripts"
|
|
if str(scripts_dir) not in sys.path:
|
|
sys.path.insert(0, str(scripts_dir))
|
|
file_path = scripts_dir / "auto_test_domains" / "project_case.py"
|
|
spec = importlib.util.spec_from_file_location("project_case_for_test", file_path)
|
|
if spec is None or spec.loader is None:
|
|
raise RuntimeError(f"Unable to load module from {file_path}")
|
|
module = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(module)
|
|
return module
|
|
|
|
|
|
def test_project_case_round_3_focuses_on_stable_readback_fields(monkeypatch, tmp_path: Path) -> None:
|
|
module = _load_case_module()
|
|
captured_rounds: dict[str, dict] = {}
|
|
|
|
def _fake_run_pipeline_round(**kwargs):
|
|
captured_rounds[kwargs["round_name"]] = kwargs
|
|
return {"name": kwargs["round_name"], "passed": True, "issues": []}
|
|
|
|
def _fake_build_domain_report(**kwargs):
|
|
return kwargs
|
|
|
|
monkeypatch.setattr(module, "run_pipeline_round", _fake_run_pipeline_round)
|
|
monkeypatch.setattr(module, "build_domain_report", _fake_build_domain_report)
|
|
|
|
module.run_case(config={"project_root": str(tmp_path)}, report_root=tmp_path)
|
|
|
|
round_3 = captured_rounds["round_3_investment_update"]
|
|
expected_fields = round_3["expected_bound_fields"]["remote"]["project"][module.LOCAL_PROJECT_ID]
|
|
changed_fields = round_3["expected_changes"]["project"][module.LOCAL_PROJECT_ID]
|
|
|
|
assert set(changed_fields) == {
|
|
"investment_decision_capacity",
|
|
"investment_decision_date",
|
|
"complete_investment",
|
|
"dynamic_investment",
|
|
}
|
|
assert set(expected_fields.keys()) == {
|
|
"investment_decision_capacity",
|
|
"investment_decision_date",
|
|
"complete_investment",
|
|
"dynamic_investment",
|
|
}
|
|
assert "PUT /project/settlement_investment" in round_3["coverage"]["api"]
|