63 lines
2.9 KiB
Python
63 lines
2.9 KiB
Python
"""A successful PM preparation must still supply a runnable bridge binary."""
|
|
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
from fastapi import HTTPException
|
|
|
|
|
|
def _missing_package(monkeypatch):
|
|
import pm
|
|
import hermes_constants
|
|
|
|
monkeypatch.setattr(hermes_constants, "find_node_executable", lambda executable: None)
|
|
monkeypatch.setattr(hermes_constants, "with_hermes_node_path", lambda: {})
|
|
monkeypatch.setattr(pm, "ensure", lambda package, explicit: SimpleNamespace(env={}))
|
|
monkeypatch.setattr(pm, "installed_package", lambda package: None)
|
|
|
|
|
|
@pytest.mark.parametrize("executable", ["npm", "node"])
|
|
def test_dashboard_reports_prepared_bridge_binary_missing(tmp_path, monkeypatch, executable):
|
|
from hermes_cli.web_routers import messaging
|
|
from gateway.platforms import whatsapp_common
|
|
|
|
_missing_package(monkeypatch)
|
|
bridge_dir = tmp_path / "bridge"
|
|
bridge_dir.mkdir()
|
|
(bridge_dir / "bridge.js").write_text("", encoding="utf-8")
|
|
monkeypatch.setattr(whatsapp_common, "resolve_whatsapp_bridge_dir", lambda: bridge_dir)
|
|
if executable == "npm":
|
|
operation = lambda: messaging._ensure_whatsapp_bridge_dependencies(bridge_dir)
|
|
else:
|
|
monkeypatch.setattr(messaging, "_ensure_whatsapp_bridge_dependencies", lambda path: None)
|
|
operation = lambda: messaging._spawn_whatsapp_pairing_process(tmp_path / "session", "bot")
|
|
with pytest.raises(HTTPException) as caught:
|
|
operation()
|
|
if caught.value.status_code != 500 or executable not in caught.value.detail or "binary" not in caught.value.detail:
|
|
pytest.fail(f"Unexpected dashboard error: {caught.value!r}")
|
|
|
|
|
|
@pytest.mark.parametrize("executable", ["npm", "node"])
|
|
def test_cli_reports_prepared_bridge_binary_missing(tmp_path, monkeypatch, capsys, executable):
|
|
from hermes_cli import main, main_platform_setup as setup
|
|
from gateway.platforms import whatsapp_common
|
|
|
|
_missing_package(monkeypatch)
|
|
bridge_dir = tmp_path / "bridge"
|
|
bridge_dir.mkdir()
|
|
(bridge_dir / "bridge.js").write_text("", encoding="utf-8")
|
|
if executable == "npm":
|
|
if setup._whatsapp_install_bridge(bridge_dir) is not False:
|
|
pytest.fail("CLI continued despite missing npm binary")
|
|
else:
|
|
monkeypatch.setattr(main, "_require_tty", lambda command: None)
|
|
monkeypatch.setattr(setup, "_whatsapp_choose_mode", lambda *args: "bot")
|
|
monkeypatch.setattr(setup, "_whatsapp_allowed_users", lambda *args: None)
|
|
monkeypatch.setattr(setup, "_whatsapp_install_bridge", lambda path: True)
|
|
monkeypatch.setattr(whatsapp_common, "resolve_whatsapp_bridge_dir", lambda: bridge_dir)
|
|
monkeypatch.setattr(main, "get_hermes_home", lambda: tmp_path)
|
|
setup.cmd_whatsapp(SimpleNamespace())
|
|
output = capsys.readouterr().out
|
|
if executable not in output or "binary" not in output:
|
|
pytest.fail(f"CLI did not report the missing binary: {output!r}")
|