105 lines
3.4 KiB
Python
105 lines
3.4 KiB
Python
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() |