# -*- coding: utf-8 -*- """Tests for the OpenClaw CLI service wrapper.""" from pathlib import Path import pytest from backend.services.openclaw_cli import OpenClawCliError, OpenClawCliService class _Completed: def __init__(self, *, returncode=0, stdout="", stderr=""): self.returncode = returncode self.stdout = stdout self.stderr = stderr def test_openclaw_cli_service_runs_json_command(monkeypatch, tmp_path): captured = {} def _fake_run(command, **kwargs): captured["command"] = command captured["cwd"] = kwargs["cwd"] return _Completed(stdout='{"sessions":[{"key":"main/session-1"}]}') monkeypatch.setattr("backend.services.openclaw_cli.subprocess.run", _fake_run) service = OpenClawCliService(base_command=["openclaw"], cwd=tmp_path, timeout_seconds=3) payload = service.list_sessions() assert payload["sessions"][0]["key"] == "main/session-1" assert captured["command"] == ["openclaw", "sessions", "--json"] assert captured["cwd"] == tmp_path def test_openclaw_cli_service_raises_on_failure(monkeypatch, tmp_path): def _fake_run(command, **kwargs): return _Completed(returncode=7, stdout="", stderr="boom") monkeypatch.setattr("backend.services.openclaw_cli.subprocess.run", _fake_run) service = OpenClawCliService(base_command=["openclaw"], cwd=tmp_path, timeout_seconds=3) with pytest.raises(OpenClawCliError) as exc_info: service.list_cron_jobs() assert exc_info.value.exit_code == 7 assert exc_info.value.stderr == "boom" def test_openclaw_cli_service_can_extract_single_session(monkeypatch, tmp_path): def _fake_run(command, **kwargs): return _Completed(stdout='{"sessions":[{"key":"main/session-1","agentId":"main"}]}') monkeypatch.setattr("backend.services.openclaw_cli.subprocess.run", _fake_run) service = OpenClawCliService(base_command=["openclaw"], cwd=tmp_path, timeout_seconds=3) session = service.get_session("main/session-1") assert session["agentId"] == "main"