Files
life-echo/api/tests/test_memoir_ingest_scheduler.py

66 lines
1.7 KiB
Python
Raw Normal View History

from __future__ import annotations
import pytest
from app.features.memoir.ingest_scheduler import MemoirIngestScheduler
class _FakeRunner:
def __init__(self) -> None:
self.queued: list[tuple[str, str, int]] = []
self.flushed: list[tuple[str, list[str]]] = []
async def queue_message(
self,
user_id: str,
segment_id: str,
*,
text_char_count: int = 0,
) -> None:
self.queued.append((user_id, segment_id, text_char_count))
async def flush_pending(
self,
user_id: str,
*,
extra_segment_ids: list[str] | None = None,
) -> str:
self.flushed.append((user_id, list(extra_segment_ids or [])))
return "task-1"
@pytest.mark.asyncio
async def test_queue_segment_returns_visible_phase_plan() -> None:
runner = _FakeRunner()
scheduler = MemoirIngestScheduler(runner=runner)
plan = await scheduler.queue_segment(
"user-1",
"seg-1",
text_char_count=42,
trigger="evaluation_replay",
)
assert runner.queued == [("user-1", "seg-1", 42)]
assert plan.user_id == "user-1"
assert plan.segment_ids == ("seg-1",)
assert plan.trigger == "evaluation_replay"
@pytest.mark.asyncio
async def test_flush_pending_returns_plan_and_task_id() -> None:
runner = _FakeRunner()
scheduler = MemoirIngestScheduler(runner=runner)
plan, task_id = await scheduler.flush_pending(
"user-1",
extra_segment_ids=["seg-1", "seg-2"],
trigger="conversation_end",
)
assert runner.flushed == [("user-1", ["seg-1", "seg-2"])]
assert task_id == "task-1"
assert plan.user_id == "user-1"
assert plan.segment_ids == ("seg-1", "seg-2")
assert plan.trigger == "conversation_end"