#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys import sqlite3 # Add the parent directory to path so we can import the app parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, parent_dir) # Vermeidung zirkulärer Importe - importiere nur die Modelle und DB-Objekt from models import db, User, Thought, MindMapNode, Category def get_db_path(): """Ermittelt den Pfad zur Datenbankdatei""" db_dir = os.path.join(parent_dir, 'database') if not os.path.exists(db_dir): os.makedirs(db_dir) return os.path.join(db_dir, 'systades.db') # Datenbank-Pfad db_path = get_db_path() def test_database_connection(): """Test if the database exists and can be connected to.""" try: if not os.path.exists(db_path): print(f"Database file does not exist: {db_path}") return False conn = sqlite3.connect(db_path) cursor = conn.cursor() cursor.execute("PRAGMA integrity_check") result = cursor.fetchone() conn.close() if result and result[0] == "ok": print(f"Database integrity check passed: {db_path}") return True else: print(f"Database integrity check failed: {result}") return False except Exception as e: print(f"Error testing database connection: {e}") return False def test_models(): """Test if all models are properly defined and can be queried.""" # Import app here to avoid circular import from flask import current_app try: print("\nTesting User model...") user_count = User.query.count() print(f" Found {user_count} users") print("\nTesting Category model...") category_count = Category.query.count() print(f" Found {category_count} categories") print("\nTesting MindMapNode model...") node_count = MindMapNode.query.count() print(f" Found {node_count} mindmap nodes") print("\nTesting Thought model...") thought_count = Thought.query.count() print(f" Found {thought_count} thoughts") if user_count == 0: print("\nWARNING: No users found in the database. You might need to create an admin user.") return True except Exception as e: print(f"Error testing models: {e}") return False def print_database_stats(): """Print database statistics.""" try: stats = [] stats.append(("Users", User.query.count())) stats.append(("Categories", Category.query.count())) stats.append(("Mindmap Nodes", MindMapNode.query.count())) stats.append(("Thoughts", Thought.query.count())) print("\nDatabase Statistics:") print("-" * 40) for name, count in stats: print(f"{name:<20} : {count}") print("-" * 40) return True except Exception as e: print(f"Error generating database statistics: {e}") return False def run_all_tests(): """Run all database tests.""" success = True print("=" * 60) print("STARTING DATABASE TESTS") print("=" * 60) # Test database connection print("\n1. Testing database connection...") if not test_database_connection(): success = False # Import app here to avoid circular import from app import app with app.app_context(): # Test models print("\n2. Testing database models...") if not test_models(): success = False # Print statistics print("\n3. Database statistics:") if not print_database_stats(): success = False print("\n" + "=" * 60) if success: print("All database tests completed successfully!") else: print("Some database tests failed. Check the output above for details.") print("=" * 60) return success if __name__ == "__main__": # Import app here to avoid circular import from app import app with app.app_context(): run_all_tests()