- Flask Web-App mit Dashboard, Chat, Orchestrator, Tasks, Dateien, Emails, Agenten, Settings - Email-Poller (IMAP) mit SQLite-Journal als Failsafe (kein Emailverlust bei Absturz) - Failsafe-Fenster und Poll-Intervall zur Laufzeit via /settings konfigurierbar - TaskWorker: IMAP Seen-Flag erst nach erfolgreichem Task-Abschluss - Whitelist-Filter: eric.fischer, p.dyderski, georg.tschare (gmail + signtime.media), *@diversityball.at - 9 Agenten: researcher, tax_advisor, document_editor, location_manager, program_manager, catering_manager, musik_rechte_advisor, zusammenfasser, orchestration_ui - Diversity Ball Wien 2026 – Wissensdatenbank, Sponsoringverträge, Email-Vorlagen
146 lines
4.1 KiB
Python
146 lines
4.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test Script für neue Features
|
|
- Streaming UI (SSE)
|
|
- Email Integration (IMAP/SMTP)
|
|
"""
|
|
|
|
import json
|
|
import sys
|
|
|
|
def test_imports():
|
|
"""Teste dass alle notwendigen Importe funktionieren"""
|
|
print("✓ Testing Imports...")
|
|
try:
|
|
import imaplib
|
|
import smtplib
|
|
from email.mime.text import MIMEText
|
|
from email.mime.multipart import MIMEMultipart
|
|
from flask import Flask, Response
|
|
print(" ✓ All imports successful")
|
|
return True
|
|
except ImportError as e:
|
|
print(f" ✗ Import Error: {e}")
|
|
return False
|
|
|
|
def test_app_syntax():
|
|
"""Teste dass app.py syntaktisch korrekt ist"""
|
|
print("\n✓ Testing app.py syntax...")
|
|
try:
|
|
import app
|
|
print(" ✓ app.py loads successfully")
|
|
|
|
# Check if new routes exist
|
|
routes = [str(rule) for rule in app.app.url_map.iter_rules()]
|
|
|
|
if '/api/agent-stream' in routes:
|
|
print(" ✓ /api/agent-stream route exists")
|
|
else:
|
|
print(" ✗ /api/agent-stream route NOT found")
|
|
|
|
if '/emails' in routes:
|
|
print(" ✓ /emails route exists")
|
|
else:
|
|
print(" ✗ /emails route NOT found")
|
|
|
|
return True
|
|
except Exception as e:
|
|
print(f" ✗ Error: {e}")
|
|
return False
|
|
|
|
def test_email_config():
|
|
"""Teste Email-Konfiguration"""
|
|
print("\n✓ Testing Email Configuration...")
|
|
import os
|
|
|
|
config = {
|
|
'IMAP_SERVER': os.getenv('IMAP_SERVER', 'imap.gmail.com'),
|
|
'SMTP_SERVER': os.getenv('SMTP_SERVER', 'smtp.gmail.com'),
|
|
'EMAIL_ADDRESS': os.getenv('EMAIL_ADDRESS', ''),
|
|
'EMAIL_PASSWORD': os.getenv('EMAIL_PASSWORD', ''),
|
|
}
|
|
|
|
configured = bool(config['EMAIL_ADDRESS'] and config['EMAIL_PASSWORD'])
|
|
status = "✓ Configured" if configured else "⚠ Not Configured"
|
|
|
|
print(f" {status}")
|
|
print(f" - IMAP: {config['IMAP_SERVER']}")
|
|
print(f" - SMTP: {config['SMTP_SERVER']}")
|
|
print(f" - Email: {config['EMAIL_ADDRESS'][:20] if config['EMAIL_ADDRESS'] else 'Not set'}...")
|
|
|
|
if not configured:
|
|
print(" Note: Set environment variables to enable email features")
|
|
|
|
return True
|
|
|
|
def test_templates():
|
|
"""Teste dass neue Templates existieren"""
|
|
print("\n✓ Testing Templates...")
|
|
import os
|
|
|
|
templates = {
|
|
'emails.html': os.path.exists('templates/emails.html'),
|
|
'orchestrator.html': os.path.exists('templates/orchestrator.html'),
|
|
}
|
|
|
|
for template, exists in templates.items():
|
|
status = "✓" if exists else "✗"
|
|
print(f" {status} {template}")
|
|
|
|
return all(templates.values())
|
|
|
|
def test_sse_response():
|
|
"""Teste SSE Response Header"""
|
|
print("\n✓ Testing SSE Support...")
|
|
try:
|
|
from flask import Flask, Response
|
|
|
|
app = Flask(__name__)
|
|
|
|
@app.route('/test-sse')
|
|
def test_sse():
|
|
def generate():
|
|
yield f"data: {json.dumps({'type': 'test'})}\n\n"
|
|
return Response(generate(), mimetype='text/event-stream')
|
|
|
|
print(" ✓ SSE Response configured")
|
|
return True
|
|
except Exception as e:
|
|
print(f" ✗ Error: {e}")
|
|
return False
|
|
|
|
def main():
|
|
print("=" * 60)
|
|
print("🧪 Testing New Features")
|
|
print("=" * 60)
|
|
|
|
results = [
|
|
("Imports", test_imports()),
|
|
("App Syntax", test_app_syntax()),
|
|
("Email Config", test_email_config()),
|
|
("Templates", test_templates()),
|
|
("SSE Support", test_sse_response()),
|
|
]
|
|
|
|
print("\n" + "=" * 60)
|
|
print("📊 Test Summary")
|
|
print("=" * 60)
|
|
|
|
for name, result in results:
|
|
status = "✓ PASS" if result else "✗ FAIL"
|
|
print(f"{status}: {name}")
|
|
|
|
passed = sum(1 for _, r in results if r)
|
|
total = len(results)
|
|
|
|
print(f"\nTotal: {passed}/{total} passed")
|
|
|
|
if passed == total:
|
|
print("\n✨ All tests passed!")
|
|
return 0
|
|
else:
|
|
print("\n⚠️ Some tests failed")
|
|
return 1
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|