Files
OpenJarvis/tests/cli/test_doctor_labels.py
T
Prathap PandGitHub c2756964a7 fix(channels): wire channel→agent handler and fix Telegram send pipeline (#94)
* fix(channels): wire channel→agent handler and fix Telegram send pipeline

* format code

* add supported tests
2026-03-20 18:35:18 -07:00

67 lines
2.5 KiB
Python

"""Tests for ``jarvis doctor`` optional dependency labels."""
from __future__ import annotations
import builtins
import json
from unittest import mock
from click.testing import CliRunner
from openjarvis.cli import cli
_real_import = builtins.__import__
def _selective_import_blocker(*blocked: str):
"""Return an __import__ replacement that blocks specific packages."""
def _import(name, *args, **kwargs):
if name in blocked:
raise ImportError(f"mocked: {name} not installed")
return _real_import(name, *args, **kwargs)
return _import
class TestDoctorOptionalLabels:
def test_labels_show_description(self) -> None:
"""Doctor output uses descriptive labels, not raw package names."""
runner = CliRunner()
result = runner.invoke(cli, ["doctor", "--json"])
data = json.loads(result.output)
names = [c["name"] for c in data]
# Should show descriptive labels
assert "Optional: REST API server" in names
assert "Optional: SFT/GRPO training" in names
assert "Optional: NVIDIA energy monitoring" in names
# Should NOT show old vague labels
assert "Optional: torch (for learning)" not in names
assert "Optional: pynvml (GPU monitoring)" not in names
def test_labels_show_install_hint_on_missing(self) -> None:
"""When a package is missing, show install hint in status."""
blocker = _selective_import_blocker("zeus")
with mock.patch("builtins.__import__", side_effect=blocker):
runner = CliRunner()
result = runner.invoke(cli, ["doctor", "--json"])
data = json.loads(result.output)
apple_checks = [
c for c in data if c["name"] == "Optional: Apple Silicon energy monitoring"
]
assert len(apple_checks) == 1
assert "Not installed (openjarvis[energy-apple])" == apple_checks[0]["message"]
def test_nvidia_label_uses_current_extra_name(self) -> None:
"""NVIDIA hint should reference the current project extra."""
blocker = _selective_import_blocker("pynvml")
with mock.patch("builtins.__import__", side_effect=blocker):
runner = CliRunner()
result = runner.invoke(cli, ["doctor", "--json"])
data = json.loads(result.output)
nvidia_checks = [
c for c in data if c["name"] == "Optional: NVIDIA energy monitoring"
]
assert len(nvidia_checks) == 1
assert "Not installed (openjarvis[gpu-metrics])" == nvidia_checks[0]["message"]