mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 05:12:26 +00:00
* fix(channels): wire channel→agent handler and fix Telegram send pipeline * format code * add supported tests
67 lines
2.5 KiB
Python
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"]
|