mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 14:07:55 +00:00
85 lines
2.9 KiB
Python
85 lines
2.9 KiB
Python
"""Tests for openjarvis.cli._bg_state."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from openjarvis.cli import _bg_state
|
|
|
|
|
|
def test_get_status_empty(tmp_openjarvis_home: Path) -> None:
|
|
"""No state files = everything 'pending'."""
|
|
s = _bg_state.get_status()
|
|
assert s.rust_extension == "pending"
|
|
assert s.models == {}
|
|
|
|
|
|
def test_get_status_rust_built(tmp_openjarvis_home: Path) -> None:
|
|
(tmp_openjarvis_home / ".state" / "extension-built").write_text("")
|
|
s = _bg_state.get_status()
|
|
assert s.rust_extension == "ready"
|
|
|
|
|
|
def test_get_status_rust_failed(tmp_openjarvis_home: Path) -> None:
|
|
(tmp_openjarvis_home / ".state" / "extension-failed").write_text("error tail here")
|
|
s = _bg_state.get_status()
|
|
assert s.rust_extension == "failed"
|
|
assert s.rust_error == "error tail here"
|
|
|
|
|
|
def test_get_status_model_downloading(tmp_openjarvis_home: Path) -> None:
|
|
(tmp_openjarvis_home / ".state" / "models" / "qwen3.5:9b.downloading").write_text(
|
|
""
|
|
)
|
|
s = _bg_state.get_status()
|
|
assert s.models == {"qwen3.5:9b": "downloading"}
|
|
|
|
|
|
def test_get_status_model_ready(tmp_openjarvis_home: Path) -> None:
|
|
(tmp_openjarvis_home / ".state" / "models" / "qwen3.5:9b.ready").write_text("")
|
|
s = _bg_state.get_status()
|
|
assert s.models == {"qwen3.5:9b": "ready"}
|
|
|
|
|
|
def test_get_status_model_failed(tmp_openjarvis_home: Path) -> None:
|
|
(tmp_openjarvis_home / ".state" / "models" / "qwen3.5:9b.failed").write_text(
|
|
"net error"
|
|
)
|
|
s = _bg_state.get_status()
|
|
assert s.models == {"qwen3.5:9b": "failed"}
|
|
|
|
|
|
def test_get_status_ready_supersedes_downloading(tmp_openjarvis_home: Path) -> None:
|
|
"""If both .downloading and .ready exist (race window), .ready wins."""
|
|
models_dir = tmp_openjarvis_home / ".state" / "models"
|
|
(models_dir / "qwen3.5:9b.downloading").write_text("")
|
|
(models_dir / "qwen3.5:9b.ready").write_text("")
|
|
s = _bg_state.get_status()
|
|
assert s.models["qwen3.5:9b"] == "ready"
|
|
|
|
|
|
def test_all_ready_true_when_all_ready(tmp_openjarvis_home: Path) -> None:
|
|
(tmp_openjarvis_home / ".state" / "extension-built").write_text("")
|
|
(tmp_openjarvis_home / ".state" / "models" / "qwen3.5:9b.ready").write_text("")
|
|
s = _bg_state.get_status()
|
|
assert s.all_ready() is True
|
|
|
|
|
|
def test_all_ready_false_when_anything_pending(tmp_openjarvis_home: Path) -> None:
|
|
(tmp_openjarvis_home / ".state" / "extension-built").write_text("")
|
|
(tmp_openjarvis_home / ".state" / "models" / "qwen3.5:9b.downloading").write_text(
|
|
""
|
|
)
|
|
s = _bg_state.get_status()
|
|
assert s.all_ready() is False
|
|
|
|
|
|
def test_get_status_handles_deleted_file_race(tmp_openjarvis_home: Path) -> None:
|
|
"""File present at glob-time, gone at read-time = treat as missing."""
|
|
f = tmp_openjarvis_home / ".state" / "extension-failed"
|
|
f.write_text("oops")
|
|
f.unlink() # simulate race
|
|
# No assertion error expected
|
|
s = _bg_state.get_status()
|
|
assert s.rust_extension == "pending"
|