Files
OpenJarvis/tests/deployment/test_packaging.py
T

69 lines
2.5 KiB
Python

"""Guards for the openjarvis-rust packaging split (#584 / #615).
``openjarvis_rust`` is the native PyO3 extension. It is NOT published to PyPI,
so it must not appear in the published ``desktop`` extra — listing it there
breaks ``pip install openjarvis[desktop]`` at install time. It lives in the uv
``desktop-native`` dependency group instead (excluded from wheel metadata),
which the desktop app installs from source via
``uv sync --group desktop-native``.
"""
from __future__ import annotations
from pathlib import Path
import tomllib
ROOT = Path(__file__).resolve().parent.parent.parent
PYPROJECT = ROOT / "pyproject.toml"
DESKTOP_LIB_RS = ROOT / "frontend" / "src-tauri" / "src" / "lib.rs"
WINDOWS_INSTALL_PS1 = ROOT / "deploy" / "windows" / "install.ps1"
QUICKSTART_SH = ROOT / "scripts" / "quickstart.sh"
def _pyproject() -> dict:
return tomllib.loads(PYPROJECT.read_text())
def test_openjarvis_rust_not_in_published_desktop_extra() -> None:
desktop = _pyproject()["project"]["optional-dependencies"]["desktop"]
assert not any("openjarvis-rust" in dep for dep in desktop), (
"openjarvis-rust must not be in the published `desktop` extra — it is "
"not on PyPI, so it breaks `pip install openjarvis[desktop]`."
)
def test_openjarvis_rust_lives_in_uv_dependency_group() -> None:
group = _pyproject()["dependency-groups"]["desktop-native"]
assert any("openjarvis-rust" in dep for dep in group)
def test_openjarvis_rust_has_local_uv_path_source() -> None:
src = _pyproject()["tool"]["uv"]["sources"]["openjarvis-rust"]
assert src["path"] == "rust/crates/openjarvis-python"
def test_desktop_app_syncs_the_native_group() -> None:
# Otherwise the group's openjarvis_rust is never installed for the app.
assert '"desktop-native"' in DESKTOP_LIB_RS.read_text(), (
"the desktop app must `uv sync --group desktop-native` so the native "
"extension is built at launch."
)
def test_windows_installer_syncs_the_native_group() -> None:
# The Windows source installer does not run maturin separately.
assert (
"& $uvExe sync --extra desktop --group desktop-native"
in WINDOWS_INSTALL_PS1.read_text()
), (
"the Windows installer must include `--group desktop-native` so "
"openjarvis_rust is built during source install."
)
def test_quickstart_installs_web_search_dependencies() -> None:
quickstart = QUICKSTART_SH.read_text()
assert "--extra tools-search" in quickstart
assert "already running on port 8000" in quickstart