afv-library/skills/agentforce-architecture-analyze/scripts/tests/test_runtime_override.py

101 lines
3.9 KiB
Python

"""Tests for the --data-dir / --cache-dir override mechanism.
Three things must be true after ``--data-dir <path>`` is parsed:
1. ``paths.DATA_ROOT`` points at the override.
2. ``config.DATA_ROOT`` points at the override (re-export).
3. ``main.DATA_ROOT`` points at the override (the local ``from config import
DATA_ROOT`` snapshot at module top).
If any of the three is stale, callers reading ``DATA_ROOT`` from that module
see the default path. ``main.py:2221`` writes ``str(DATA_ROOT)`` into the
``.emit_ctx.json`` file consumed by ``emit_result.py`` — getting that wrong
means the RESULT block points users at the wrong directory.
"""
from __future__ import annotations
from pathlib import Path
from . import _bootstrap # noqa: F401 — sys.path setup
import config # type: ignore
import main # type: ignore
from _shared import paths, runtime # type: ignore
def _reset_overrides() -> None:
"""Clear runtime overrides so the test starts from a known state."""
runtime.set_data_root_override(None)
runtime.set_cache_root_override(None)
# Re-resolve all three namespace levels back to defaults.
default_data = runtime.resolve_data_root("investigating-agentforce-architecture")
default_cache = runtime.resolve_cache_root("investigating-agentforce-architecture")
paths.DATA_ROOT = default_data
paths.CACHE_ROOT = default_cache
config.DATA_ROOT = default_data
config.CACHE_ROOT = default_cache
config.PROBE_CACHE_ROOT = default_cache / "_channel_probe"
main.DATA_ROOT = default_data
def test_default_paths_under_vibe() -> None:
"""No overrides → all 3 namespaces point at ~/.vibe/."""
_reset_overrides()
expected_data = Path.home() / ".vibe" / "data" / "investigating-agentforce-architecture"
expected_cache = Path.home() / ".vibe" / "cache" / "investigating-agentforce-architecture"
assert paths.DATA_ROOT == expected_data
assert config.DATA_ROOT == expected_data
assert main.DATA_ROOT == expected_data
assert paths.CACHE_ROOT == expected_cache
assert config.CACHE_ROOT == expected_cache
def test_data_dir_override_rebinds_three_namespaces(tmp_path: Path) -> None:
"""--data-dir /tmp/x → all 3 namespaces (paths, config, main) update."""
_reset_overrides()
override = tmp_path / "custom-data"
args = main.parse_args([
"--org-alias", "myorg",
"--agent", "MyAgent",
"--work-dir", str(tmp_path / "work"),
"--data-dir", str(override),
])
main._apply_path_overrides(args)
# All three namespace levels must equal the override path.
assert paths.DATA_ROOT == override, "paths.DATA_ROOT not rebound"
assert config.DATA_ROOT == override, "config.DATA_ROOT not rebound"
assert main.DATA_ROOT == override, "main.DATA_ROOT not rebound"
_reset_overrides()
def test_cache_dir_override_rebinds_paths_and_config(tmp_path: Path) -> None:
"""--cache-dir /tmp/y → paths.CACHE_ROOT, config.CACHE_ROOT, and PROBE_CACHE_ROOT update."""
_reset_overrides()
override = tmp_path / "custom-cache"
args = main.parse_args([
"--org-alias", "myorg",
"--agent", "MyAgent",
"--work-dir", str(tmp_path / "work"),
"--cache-dir", str(override),
])
main._apply_path_overrides(args)
assert paths.CACHE_ROOT == override
assert config.CACHE_ROOT == override
assert config.PROBE_CACHE_ROOT == override / "_channel_probe"
_reset_overrides()
def test_no_override_leaves_defaults_intact(tmp_path: Path) -> None:
"""Running with no override flags must not mutate anything."""
_reset_overrides()
expected_data = Path.home() / ".vibe" / "data" / "investigating-agentforce-architecture"
args = main.parse_args([
"--org-alias", "myorg",
"--agent", "MyAgent",
"--work-dir", str(tmp_path / "work"),
])
main._apply_path_overrides(args)
assert paths.DATA_ROOT == expected_data
assert config.DATA_ROOT == expected_data
assert main.DATA_ROOT == expected_data