from session.archive_merger import ArchiveMerger
from session.models import ArchiveEntry
def _archive(
archive_id: str,
created_at: str,
overview: str,
abstract: str,
messages=None,
):
return ArchiveEntry(
archive_id=archive_id,
session_id="sess1",
overview=overview,
abstract=abstract,
messages=messages or [{"role": "user", "content": f"message {archive_id}"}],
created_at=created_at,
metadata={"archive_id": archive_id},
)
def test_merge_preserves_newest_archive_messages_in_full():
old = _archive("old", "2026-05-01T00:00:00+00:00", "old overview", "old abstract")
new = _archive("new", "2026-05-02T00:00:00+00:00", "new overview", "new abstract")
merged = ArchiveMerger(max_messages=10).merge([old, new])
assert "new overview" in merged.overview
assert "old overview" in merged.overview
assert merged.messages[-1]["content"] == "message new"
assert merged.metadata["source_archive_ids"] == ["old", "new"]
assert merged.metadata["latest_archive_id"] == "new"
def test_merge_limits_old_messages_but_keeps_latest_archive_complete():
old_messages = [{"role": "user", "content": f"old {i}"} for i in range(10)]
new_messages = [{"role": "user", "content": "new important"}]
old = _archive(
"old",
"2026-05-01T00:00:00+00:00",
"old overview",
"old abstract",
old_messages,
)
new = _archive(
"new",
"2026-05-02T00:00:00+00:00",
"new overview",
"new abstract",
new_messages,
)
merged = ArchiveMerger(max_messages=3).merge([old, new])
assert merged.messages[-1]["content"] == "new important"
assert len(merged.messages) == 3
assert any(msg["content"] == "old 9" for msg in merged.messages)
def test_merge_abstract_keeps_all_source_abstracts():
old = _archive(
"old",
"2026-05-01T00:00:00+00:00",
"old overview",
"old abstract " + ("x" * 80),
)
new = _archive(
"new",
"2026-05-02T00:00:00+00:00",
"new overview",
"new abstract " + ("y" * 80),
)
merged = ArchiveMerger().merge([old, new])
assert old.abstract in merged.abstract
assert new.abstract in merged.abstract
def test_merge_empty_archives_returns_empty_payload():
merged = ArchiveMerger().merge([])
assert merged.overview == ""
assert merged.abstract == ""
assert merged.messages == []
assert merged.metadata["source_archive_ids"] == []