import unittest import asyncio import os import shutil from pathlib import Path from app.routers.ingest import save_note, SaveRequest from app.core.ingestion import IngestionService # Wir simulieren den API-Aufruf direkt class TestDialogFullFlow(unittest.IsolatedAsyncioTestCase): def setUp(self): # Test Vault definieren self.test_vault = os.path.abspath("./vault_test_dialog") os.environ["MINDNET_VAULT_ROOT"] = self.test_vault # Sicherstellen, dass das Verzeichnis existiert if not os.path.exists(self.test_vault): os.makedirs(self.test_vault) def tearDown(self): # Cleanup nach dem Test (optional, zum Debuggen auskommentieren) if os.path.exists(self.test_vault): shutil.rmtree(self.test_vault) async def test_a_save_journal_entry(self): """ Testet den 'Fast Path' (Journal) -> sliding_short. Erwartung: Sehr schnell, keine LLM-Warnungen im Log. """ print("\n--- TEST A: Journal Save (Fast Path) ---") content = """--- type: journal status: active title: Test Journal Entry --- # Daily Log Heute haben wir das Chunking-System getestet. Es lief alles sehr schnell durch. """ req = SaveRequest( markdown_content=content, filename="2025-12-12-test-journal.md", folder="00_Inbox" ) # Rufe die API-Funktion auf (simuliert Frontend "Save") response = await save_note(req) # Checks self.assertEqual(response.status, "success") self.assertTrue(response.stats['chunks'] > 0, "Keine Chunks erstellt!") # File Check file_path = Path(response.file_path) self.assertTrue(file_path.exists(), "Datei wurde nicht geschrieben!") print(f"✅ Journal gespeichert: {response.note_id}") async def test_b_save_project_entry(self): """ Testet den 'Smart Path' (Project) -> sliding_smart_edges. Erwartung: Smart Edge Allocation läuft (LLM Aufruf), dauert etwas länger. """ print("\n--- TEST B: Project Save (Smart Path) ---") # Ein Text mit expliziten Kanten, um den Smart Chunker zu triggern content = """--- type: project status: active title: Test Projekt Smart Chunking --- # Mission Wir wollen [[leitbild-werte#Integrität]] sicherstellen. Das System muss stabil sein. # Status Wir nutzen [[rel:uses|Ollama]] für die Intelligenz. """ req = SaveRequest( markdown_content=content, filename="Test_Projekt_Smart.md", folder="Projects" ) # API Call response = await save_note(req) # Checks self.assertEqual(response.status, "success") self.assertTrue(response.stats['chunks'] > 0) self.assertTrue(response.stats['edges'] > 0, "Kanten sollten gefunden werden (mind. structure edges)") print(f"✅ Projekt gespeichert: {response.note_id}") # Optional: Prüfen ob Qdrant Daten hat (via IngestionService Helper) service = IngestionService() chunks_missing, edges_missing = service._artifacts_missing(response.note_id) self.assertFalse(chunks_missing, "Chunks fehlen in Qdrant!") self.assertFalse(edges_missing, "Edges fehlen in Qdrant!") print("✅ Qdrant Persistenz verifiziert.") if __name__ == '__main__': unittest.main()