### 🔧 Fixed - **🧾 Database Table Creation**: Унифицирован подход к созданию таблиц БД между продакшеном и тестами - Исправлена ошибка "no such table: author" в тестах - Обновлена функция `create_all_tables()` в `storage/schema.py` для использования стандартного SQLAlchemy подхода - Улучшены фикстуры тестов с принудительным импортом всех ORM моделей - Добавлена детальная диагностика создания таблиц в тестах - Добавлены fallback механизмы для создания таблиц в проблемных окружениях ### 🧪 Testing - Все RBAC тесты теперь проходят успешно - Исправлены фикстуры `test_engine`, `db_session` и `test_session_factory` - Добавлены функции `ensure_all_tables_exist()` и `ensure_all_models_imported()` для диагностики ### 📝 Technical Details - Заменен подход `create_table_if_not_exists()` на стандартный `Base.metadata.create_all()` - Улучшена обработка ошибок при создании таблиц - Добавлена проверка регистрации всех критических таблиц в metadata
This commit is contained in:
@@ -112,7 +112,8 @@ def ensure_all_models_imported():
|
||||
# Проверяем что все модели зарегистрированы
|
||||
from orm.base import BaseModel as Base
|
||||
registered_tables = list(Base.metadata.tables.keys())
|
||||
print(f"🔍 All models imported, registered tables: {registered_tables}")
|
||||
print(f"🔍 ensure_all_models_imported: {len(registered_tables)} tables registered")
|
||||
print(f"📋 Registered tables: {registered_tables}")
|
||||
|
||||
# Проверяем что все критические таблицы зарегистрированы
|
||||
required_tables = [
|
||||
@@ -124,12 +125,15 @@ def ensure_all_models_imported():
|
||||
]
|
||||
|
||||
missing_tables = [table for table in required_tables if table not in registered_tables]
|
||||
|
||||
if missing_tables:
|
||||
print(f"⚠️ Missing tables in metadata: {missing_tables}")
|
||||
print("🔄 Attempting to register missing models...")
|
||||
print(f"⚠️ ensure_all_models_imported: missing tables: {missing_tables}")
|
||||
print(f"Available tables: {registered_tables}")
|
||||
|
||||
# Пробуем импортировать модели явно
|
||||
# Пробуем принудительно импортировать модели
|
||||
try:
|
||||
print("🔄 ensure_all_models_imported: attempting explicit model imports...")
|
||||
# Явно импортируем все модели
|
||||
from orm.community import Community, CommunityAuthor, CommunityFollower
|
||||
from orm.author import Author, AuthorFollower, AuthorRating, AuthorBookmark
|
||||
from orm.draft import Draft, DraftAuthor, DraftTopic
|
||||
@@ -144,17 +148,17 @@ def ensure_all_models_imported():
|
||||
updated_tables = list(Base.metadata.tables.keys())
|
||||
still_missing = [table for table in required_tables if table not in updated_tables]
|
||||
if still_missing:
|
||||
print(f"⚠️ Still missing tables after explicit import: {still_missing}")
|
||||
print(f"⚠️ ensure_all_models_imported: still missing tables: {still_missing}")
|
||||
else:
|
||||
print("✅ All tables registered after explicit import")
|
||||
print("✅ ensure_all_models_imported: all tables registered after explicit import")
|
||||
|
||||
except Exception as e:
|
||||
print(f"⚠️ Failed to import models explicitly: {e}")
|
||||
print(f"⚠️ ensure_all_models_imported: failed to import models explicitly: {e}")
|
||||
else:
|
||||
print("✅ All required tables registered in metadata")
|
||||
print("✅ ensure_all_models_imported: all required tables registered in metadata")
|
||||
|
||||
except Exception as e:
|
||||
print(f"⚠️ Model import check failed: {e}")
|
||||
print(f"⚠️ ensure_all_models_imported: model import check failed: {e}")
|
||||
|
||||
# Проверяем импорт моделей
|
||||
ensure_all_models_imported()
|
||||
|
||||
Reference in New Issue
Block a user