maris-ai-master / core-python /tests /test_autonomous_runtime.py
MarisUK's picture
Maris AI model sync
f440f03 verified
"""Tests for autonomous persistence and real executor adapters."""
from __future__ import annotations
from pathlib import Path
from types import SimpleNamespace
from unittest.mock import patch
import pytest
from maris_core.autonomous.agent import (
StartRequest,
StatusRequest,
_sessions,
get_status,
start_session,
)
from maris_core.autonomous.executor import AutonomousTaskExecutor
from maris_core.autonomous.session_store import AutonomousSessionStore
@pytest.mark.asyncio
async def test_autonomous_session_recovers_from_persistent_store(tmp_path: Path) -> None:
store = AutonomousSessionStore(db_path=str(tmp_path / "autonomous-state.db"))
with (
patch("maris_core.autonomous.agent.session_store", store),
patch("maris_core.autonomous.agent.get_pipeline", return_value=None),
):
started = await start_session(
StartRequest(session_id="persisted-session", goal="Uztaisīt plānu")
)
_sessions.clear()
recovered = await get_status(StatusRequest(session_id="persisted-session"))
assert started.session_id == "persisted-session"
assert recovered.tasks
assert recovered.tasks[0].status == "completed"
assert recovered.resume_token == "resume:persisted-session"
audit_records = await store.load_audit_records("persisted-session")
assert audit_records
assert audit_records[0]["record_type"] == "session.started"
@pytest.mark.asyncio
async def test_executor_runs_reasoning_with_runtime_generate() -> None:
executor = AutonomousTaskExecutor()
task = {
"id": "task-1",
"description": "Nosaki prioritātes",
"tool": "reasoning",
"depends_on": [],
}
fake_response = SimpleNamespace(
response="Konkrēts darba rezultāts",
model="test-model",
tokens_used=42,
latency_ms=17,
prompt_messages=2,
memory_matches=1,
)
with patch("maris_core.autonomous.executor.generate", return_value=fake_response):
result = await executor.execute(task, "Uztaisīt roadmap", [task], persona_id="strategist")
assert "Konkrēts darba rezultāts" in result.summary
assert "Systems Strategist" in result.summary
assert result.artifacts["model"] == "test-model"
assert result.metrics["latency_ms"] == 17
@pytest.mark.asyncio
async def test_executor_runs_browser_automation_workflow() -> None:
executor = AutonomousTaskExecutor()
task = {
"id": "task-browser",
"description": "Atver https://example.com un nolasīt saturu",
"tool": "browser_automation",
"depends_on": [],
}
with (
patch(
"maris_core.autonomous.executor.start_browser_session",
return_value=SimpleNamespace(session_id="browser-session"),
),
patch(
"maris_core.autonomous.executor.navigate_browser",
return_value=SimpleNamespace(url="https://example.com", title="Example"),
),
patch(
"maris_core.autonomous.executor.extract_browser_text",
return_value=SimpleNamespace(text="Sveiks no browser"),
),
patch(
"maris_core.autonomous.executor.screenshot_browser",
return_value=SimpleNamespace(image_base64="aW1hZ2U="),
),
patch("maris_core.autonomous.executor.close_browser_session"),
):
result = await executor.execute(task, "Iegūt lapas saturu", [task])
assert "https://example.com" in result.summary
assert result.artifacts["text"] == "Sveiks no browser"
assert result.metrics["extracted_text_length"] == len("Sveiks no browser")