Files
hermes-agent/tests/hermes_cli/test_desktop_source_build.py
ethernet 88fc94ee46 fix(update): the import-health probe never resolves external secret sources
Port of main's guard into update_cmd_validation: the probe child sets
sys.argv to the updater's contract before importing hermes_cli.main, so the
startup dotenv load does not run op/bws/command helpers. Tests follow the
validation module and the run_completion seam; the unused
isolated_update_runtime fixture referenced retired names and goes.
2026-09-19 04:39:53 -04:00

67 lines
2.7 KiB
Python

"""Desktop launch prepares once, then stages and publishes the local pack."""
from argparse import Namespace
import subprocess
import pytest
from hermes_cli import main, main_desktop
from tests.hermes_cli.test_source_build import source_checkout, source_products, _events # noqa: F401
@pytest.fixture
def desktop_source(source_products, monkeypatch):
root, acquired = source_products
monkeypatch.setattr(main, "PROJECT_ROOT", root)
monkeypatch.setattr(main_desktop, "_desktop_launch_env", lambda args: ({}, []))
monkeypatch.setattr(main_desktop, "_register_linux_desktop_entry", lambda **kwargs: None)
return root, acquired
@pytest.mark.platforms("linux")
def test_desktop_build_only_prepares_once_and_keeps_fresh_launch_fast(desktop_source):
root, acquired = desktop_source
main_desktop.cmd_gui(Namespace(build_only=True))
app = root / "apps/desktop/release/linux-unpacked/hermes"
assert app.read_text() == "desktop"
assert [event["step"] for event in _events(root)] == ["deps", "icons", "desktop"]
assert acquired == ["npm"]
assert (root / "node_modules/ui-tui").exists()
assert (root / "node_modules/web").exists()
assert (root / "node_modules/apps-desktop").exists()
assert not (root / "node_modules/unrelated").exists()
main_desktop.cmd_gui(Namespace(build_only=True))
assert acquired == ["npm"]
assert len(_events(root)) == 3
@pytest.mark.platforms("linux")
def test_failed_pack_exits_without_launching_or_replacing_the_app(desktop_source):
root, acquired = desktop_source
app = root / "apps/desktop/release/linux-unpacked/hermes"
app.parent.mkdir(parents=True)
app.write_text("previous app")
(root / "fail-desktop").touch()
with pytest.raises(SystemExit) as error:
main_desktop.cmd_gui(Namespace(build_only=True))
assert error.value.code != 0
assert app.read_text() == "previous app"
assert acquired == ["npm"]
assert [event["step"] for event in _events(root)] == ["deps", "icons", "desktop"]
assert not list((root / "apps/desktop").glob(".staging-*"))
@pytest.mark.platforms("linux")
def test_skip_build_source_checks_artifacts_without_provisioning(desktop_source):
root, acquired = desktop_source
with pytest.raises(SystemExit):
main_desktop.cmd_gui(Namespace(source=True, skip_build=True, build_only=True))
assert acquired == []
dist = root / "apps/desktop/dist"
dist.mkdir()
(dist / "index.html").write_text("prepared renderer")
electron = root / "node_modules/electron"
electron.mkdir(parents=True)
(electron / "package.json").write_text('{}')
main_desktop.cmd_gui(Namespace(source=True, skip_build=True, build_only=True))
assert acquired == []