import importlib import os import shutil import tempfile import unittest import httpx class TestDocPreviewTruncation(unittest.IsolatedAsyncioTestCase): async def asyncSetUp(self): self._old_env = dict(os.environ) self.tmp = tempfile.mkdtemp(prefix="llm-council-docprev-") os.environ["DOCS_DIR"] = self.tmp os.environ["MAX_DOC_BYTES"] = "1000000" os.environ["MAX_DOC_PREVIEW_CHARS"] = "10" import backend.config as config import backend.documents as documents import backend.main as main importlib.reload(config) importlib.reload(documents) self.main = importlib.reload(main) self.client = httpx.AsyncClient( transport=httpx.ASGITransport(app=self.main.app), base_url="http://test", ) # Create a conversation resp = await self.client.post("/api/conversations", json={}) resp.raise_for_status() self.conversation_id = resp.json()["id"] # Upload a long doc files = {"file": ("long.md", b"0123456789ABCDEFGHIJ", "text/markdown")} up = await self.client.post( f"/api/conversations/{self.conversation_id}/documents", files=files, ) up.raise_for_status() self.doc_id = up.json()["id"] async def asyncTearDown(self): await self.client.aclose() os.environ.clear() os.environ.update(self._old_env) shutil.rmtree(self.tmp, ignore_errors=True) async def test_preview_truncates(self): resp = await self.client.get( f"/api/conversations/{self.conversation_id}/documents/{self.doc_id}" ) self.assertEqual(resp.status_code, 200) content = resp.json()["content"] self.assertEqual(len(content), 10) self.assertTrue(content.endswith("..."))