honcho/tests/deriver/test_enqueue_dream.py

60 lines
2.3 KiB
Python

"""Regression tests for `enqueue_dream` metadata write shape.
Loop 4 (PR #573): `enqueue_dream` no longer touches collection.internal_metadata
at all. Both guard fields (last_dream_at and last_dream_document_count) are
written atomically in `process_dream` on successful completion — this preserves
the invariant that the baseline advances only when consolidation actually
happened, and prevents the in-flight stampede from false-advancing a guard.
"""
from unittest.mock import AsyncMock, patch
import pytest
from src import schemas
from src.deriver.enqueue import enqueue_dream
class TestEnqueueDreamMetadataShape:
@pytest.mark.asyncio
async def test_enqueue_does_not_touch_collection_metadata(self):
"""`enqueue_dream` must not call update_collection_internal_metadata."""
with (
patch(
"src.deriver.enqueue.crud.update_collection_internal_metadata",
new_callable=AsyncMock,
) as mock_update,
patch(
"src.deriver.enqueue.crud.get_collection",
new_callable=AsyncMock,
) as mock_get_collection,
patch(
"src.deriver.enqueue.tracked_db",
) as mock_db_ctx,
):
mock_session = AsyncMock()
mock_session.scalar = AsyncMock(return_value=False)
mock_session.execute = AsyncMock()
mock_session.commit = AsyncMock()
mock_db_ctx.return_value.__aenter__.return_value = mock_session
await enqueue_dream(
workspace_name="test_workspace",
observer="alice",
observed="bob",
dream_type=schemas.DreamType.OMNI,
session_name=None,
)
assert not mock_update.called, (
"enqueue_dream must not write to collection.internal_metadata; "
"guard fields advance atomically in process_dream on success."
)
assert not mock_get_collection.called, (
"enqueue_dream must not need to load the collection — it no "
"longer touches dream metadata."
)
assert (
mock_session.execute.called
), "enqueue_dream must still insert the QueueItem row."