headroom/tests/test_install/test_state.py
JerrettDavis bd242fc62d test: expand persistent install coverage
Add focused regression coverage for install, runtime, provider, state, health, supervisor, and persistent wrap flows so the new persistent deployment surfaces are exercised more thoroughly in CI.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-11 18:24:15 -05:00

63 lines
2 KiB
Python

from __future__ import annotations
from pathlib import Path
from headroom.install.models import ArtifactRecord, DeploymentManifest, ManagedMutation
from headroom.install.state import delete_manifest, list_manifests, load_manifest, save_manifest
def _manifest() -> DeploymentManifest:
return DeploymentManifest(
profile="default",
preset="persistent-service",
runtime_kind="python",
supervisor_kind="service",
scope="user",
provider_mode="manual",
targets=["claude"],
port=8787,
host="127.0.0.1",
backend="anthropic",
mutations=[ManagedMutation(target="env", kind="shell-block", path="x")],
artifacts=[ArtifactRecord(kind="script", path="run-headroom.sh")],
)
def test_save_and_load_manifest_round_trip(monkeypatch, tmp_path: Path) -> None:
monkeypatch.setattr(Path, "home", lambda: tmp_path)
manifest = _manifest()
save_manifest(manifest)
loaded = load_manifest("default")
assert loaded is not None
assert loaded.profile == "default"
assert loaded.mutations[0].kind == "shell-block"
assert loaded.artifacts[0].kind == "script"
def test_list_manifests_ignores_invalid_payloads(monkeypatch, tmp_path: Path) -> None:
monkeypatch.setattr(Path, "home", lambda: tmp_path)
valid = _manifest()
save_manifest(valid)
broken_dir = tmp_path / ".headroom" / "deploy" / "broken"
broken_dir.mkdir(parents=True)
(broken_dir / "manifest.json").write_text("{not json", encoding="utf-8")
manifests = list_manifests()
assert [manifest.profile for manifest in manifests] == ["default"]
def test_delete_manifest_removes_profile_root(monkeypatch, tmp_path: Path) -> None:
monkeypatch.setattr(Path, "home", lambda: tmp_path)
manifest = _manifest()
save_manifest(manifest)
extra_file = tmp_path / ".headroom" / "deploy" / "default" / "runner.log"
extra_file.write_text("log", encoding="utf-8")
delete_manifest("default")
assert load_manifest("default") is None
assert not extra_file.parent.exists()