mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 13:26:48 +00:00
80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
"""End-to-end integration test for the morning digest pipeline.
|
|
|
|
Uses mocked connectors and engine to verify the full flow:
|
|
digest_collect -> LLM synthesis -> TTS -> DigestStore -> CLI delivery.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from openjarvis.agents.digest_store import DigestStore
|
|
from openjarvis.core.types import ToolResult
|
|
|
|
|
|
def test_full_digest_pipeline(tmp_path):
|
|
"""Verify collect -> synthesize -> TTS -> store -> retrieve."""
|
|
from openjarvis.agents.morning_digest import MorningDigestAgent
|
|
|
|
# Mock engine returns a narrative
|
|
mock_engine = MagicMock()
|
|
mock_engine.generate.return_value = {
|
|
"content": (
|
|
"Good morning, sir. You slept 7.5 hours with a readiness score of 78. "
|
|
"You have 2 meetings today and 5 unread emails. "
|
|
"In the news, a new GPT-5 paper dropped on Arxiv."
|
|
),
|
|
"finish_reason": "stop",
|
|
"usage": {},
|
|
}
|
|
|
|
# Mock tool results
|
|
collect_result = ToolResult(
|
|
tool_name="digest_collect",
|
|
content=(
|
|
"=== HEALTH ===\n[oura] Sleep — April 1: score 78, avg HR 58 bpm\n\n"
|
|
'=== MESSAGES ===\n[gmail] From: alice@co.com — "Q3 Review" (2h ago)\n\n'
|
|
"=== CALENDAR ===\n[gcalendar] 10:30 AM — Team Standup (30 min)\n"
|
|
),
|
|
success=True,
|
|
metadata={"total_items": 6},
|
|
)
|
|
tts_result = ToolResult(
|
|
tool_name="text_to_speech",
|
|
content=str(tmp_path / "digest.mp3"),
|
|
success=True,
|
|
metadata={"audio_path": str(tmp_path / "digest.mp3")},
|
|
)
|
|
|
|
# Write fake audio
|
|
(tmp_path / "digest.mp3").write_bytes(b"fake-mp3-audio")
|
|
|
|
db_path = str(tmp_path / "digest.db")
|
|
|
|
agent = MorningDigestAgent(
|
|
mock_engine,
|
|
"claude-sonnet-4-6",
|
|
tools=[],
|
|
persona="neutral",
|
|
digest_store_path=db_path,
|
|
)
|
|
|
|
with patch.object(
|
|
agent._executor,
|
|
"execute",
|
|
side_effect=[collect_result, tts_result],
|
|
):
|
|
result = agent.run("Generate morning digest")
|
|
|
|
# Verify agent result
|
|
assert "Good morning" in result.content
|
|
assert result.metadata["audio_path"] == str(tmp_path / "digest.mp3")
|
|
|
|
# Verify stored in DigestStore
|
|
store = DigestStore(db_path=db_path)
|
|
artifact = store.get_latest()
|
|
assert artifact is not None
|
|
assert "Good morning" in artifact.text
|
|
assert artifact.model_used == "claude-sonnet-4-6"
|
|
store.close()
|