- Migrate OpenClaw from HTTP (port 8004) to WebSocket (port 18789) - Add workspace file list and content preview handlers - Add OpenClawStatus component with agent/skills view - Add OpenClawView panel in trader interface - Add Zustand store for OpenClaw state management - Fix gateway logging noise (yfinance, websockets) - Fix RunWorkspaceManager.get_agent_asset_dir attribute error - Handle missing workspace files gracefully in preview Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
# -*- 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"
|