Files
website/utils/db_test.py

136 lines
4.1 KiB
Python

#!/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()