diff --git a/tests/test_dialog_full_flow.py b/tests/test_dialog_full_flow.py new file mode 100644 index 0000000..4b0d163 --- /dev/null +++ b/tests/test_dialog_full_flow.py @@ -0,0 +1,105 @@ +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() \ No newline at end of file