"""MemoryIngestService 将 lineage_json 传入 create_source。""" from __future__ import annotations from types import SimpleNamespace import pytest from app.features.memory.ingest_service import MemoryIngestService @pytest.mark.asyncio async def test_memory_ingest_passes_lineage(monkeypatch) -> None: captured: dict = {} class FakeSession: commit_calls = 0 async def commit(self) -> None: self.commit_calls += 1 async def flush(self) -> None: pass class FakeScheduler: def schedule(self, request): captured["scheduled"] = request return "task-1" async def fake_create_source(session, **kwargs): captured.update(kwargs) return SimpleNamespace(id="src-1") async def fake_create_chunk(*_args, **kwargs): return SimpleNamespace(id=f"ch-{kwargs.get('chunk_index')}") monkeypatch.setattr( "app.features.memory.ingest_service.create_source", fake_create_source, ) monkeypatch.setattr( "app.features.memory.ingest_service.create_chunk", fake_create_chunk, ) monkeypatch.setattr("app.core.config.settings.memory_enrichment_enabled", False) lineage = { "schema_version": 1, "conversation_id": "c9", "turns": [ {"user_message_id": "um-1", "assistant_message_id": "as-1"}, ], "primary_user_message_id": "um-1", } fake_session = FakeSession() service = MemoryIngestService( fake_session, # type: ignore[arg-type] embedding_provider=None, enrichment_scheduler=FakeScheduler(), # type: ignore[arg-type] ) sid = await service.ingest_transcript( "u1", "c9", "hello there", lineage_json=lineage, ) assert sid == "src-1" assert captured.get("lineage_json") == lineage assert captured.get("primary_user_message_id") == "um-1" assert captured["scheduled"].source_id == "src-1"