← refacto-feature-scout
import os
import tempfile
from pathlib import Path
import pytest
# The tests must never read or write anything of the operator's: not the real idea store, not
# ~/.antilib/.env, not a registered project. Everything is redirected before scout is imported,
# because config.py resolves its paths at import time.
SANDBOX = Path(tempfile.gettempdir()) / "feature-scout-tests"
(SANDBOX / "home").mkdir(parents=True, exist_ok=True)
(SANDBOX / "data").mkdir(parents=True, exist_ok=True)
os.environ["HOME"] = str(SANDBOX / "home") # never the operator's dotfiles
os.environ["USERPROFILE"] = str(SANDBOX / "home") # the same, on Windows
os.environ["SCOUT_DATA_DIR"] = str(SANDBOX / "data") # never the real store
os.environ["SCOUT_PROJECTS_FILE"] = str(SANDBOX / "projects.json")
for leaked in ("SCOUT_CLOUD", "SCOUT_REPO_ROOT"):
os.environ.pop(leaked, None)
from scout.store import Store # noqa: E402
GOLDEN = Path(__file__).parent / "golden"
@pytest.fixture
def store():
return Store(":memory:")
@pytest.fixture
def registered(tmp_path, monkeypatch):
"""A project set up on this computer, the way `feature-scout init` leaves things."""
import json
from scout import cli
from scout.projects import PROJECT_FILE
folder = tmp_path / "app"
folder.mkdir()
(folder / PROJECT_FILE).write_text(json.dumps({
"version": 1, "key": "terminal", "name": "Test App", "what_it_is": "an app",
"test_command": "true",
}))
registry = tmp_path / "projects.json"
registry.write_text(json.dumps({"version": 1, "default": "terminal",
"projects": {"terminal": {"folder": str(folder)}}}))
monkeypatch.setenv("SCOUT_PROJECTS_FILE", str(registry))
monkeypatch.setattr(cli, "_project_cache", None)
return folder