feat: initial commit – Frankenbot Multi-Agent Orchestration System
- 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
This commit is contained in:
commit
56d9bc2c76
71 changed files with 5953 additions and 0 deletions
146
test_features.py
Normal file
146
test_features.py
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
#!/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())
|
||||
Loading…
Add table
Add a link
Reference in a new issue