# -*- coding: utf-8 -*- import os import sys import dj_database_url from .settings import * print("🧪 Test settings loaded") # ВАЖНО: Переопределяем CSRF_TRUSTED_ORIGINS сразу после импорта # так как settings.py устанавливает пустое значение CSRF_TRUSTED_ORIGINS = [ 'http://localhost', 'http://127.0.0.1', 'http://postgres', 'https://smartsoltech.kr' ] print("🔒 CSRF_TRUSTED_ORIGINS переопределен:", CSRF_TRUSTED_ORIGINS) # База данных для тестирования DATABASES = { 'default': dj_database_url.config( default=os.environ.get( 'DATABASE_URL', 'postgresql://postgres:postgres@postgres:5432/smartsoltech_test' ) ) } print("📊 Database:", DATABASES['default']['NAME'], "at", DATABASES['default']['HOST']) # Секретный ключ для тестирования SECRET_KEY = os.environ.get( 'SECRET_KEY', 'test-secret-key-for-ci-very-long-and-secure-key-12345' ) print("🔐 Secret key length:", len(SECRET_KEY)) # Отладка отключена в тестах DEBUG = os.environ.get('DEBUG', 'False').lower() in ['true', '1', 'yes'] # Разрешенные хосты для CI ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', 'localhost,127.0.0.1,postgres,*').split(',') print("🌐 Allowed hosts:", ALLOWED_HOSTS) print("🔒 CSRF trusted origins:", CSRF_TRUSTED_ORIGINS) # Упрощенный хеширователь паролей для быстрых тестов PASSWORD_HASHERS = [ 'django.contrib.auth.hashers.MD5PasswordHasher', ] # Отключаем миграции для ускорения тестов class DisableMigrations: def __contains__(self, item): return True def __getitem__(self, item): return None # В CI НЕ отключаем миграции - нужны для Telegram бота # if os.environ.get('CI'): # MIGRATION_MODULES = DisableMigrations() # Вместо этого используем быстрые миграции в памяти if os.environ.get('CI'): # Ускоряем тесты, но оставляем миграции TEST_RUNNER = 'django.test.runner.DiscoverRunner' # Логирование для отладки в CI LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django': { 'handlers': ['console'], 'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'), }, 'web': { 'handlers': ['console'], 'level': 'DEBUG', }, }, } # Кеширование отключено для тестов CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', } } # Email для тестов (console backend) EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' # Медиа файлы для тестов MEDIA_ROOT = '/tmp/media_test/' # Статические файлы для тестов STATIC_ROOT = '/tmp/static_test/' # Telegram Bot настройки для тестирования TELEGRAM_BOT_TOKEN = os.environ.get('TELEGRAM_BOT_TOKEN', 'test-token') # Отключаем инициализацию Telegram бота в тестах TELEGRAM_BOT_ENABLED = False # Отключаем CSRF для API тестов if 'test' in sys.argv: CSRF_COOKIE_SECURE = False CSRF_COOKIE_HTTPONLY = False # Отключаем сигналы для ускорения тестов if 'test' in sys.argv: from django.core.signals import setting_changed setting_changed.disconnect() # КРИТИЧЕСКИ ВАЖНО: Финальное переопределение CSRF_TRUSTED_ORIGINS # Django 4.0+ требует схемы (http://, https://) # Игнорируем переменную окружения и задаем напрямую CSRF_TRUSTED_ORIGINS = [ 'http://localhost', 'http://127.0.0.1', 'http://postgres', 'https://smartsoltech.kr' ] # Принудительно очищаем любые пустые значения if '' in CSRF_TRUSTED_ORIGINS: CSRF_TRUSTED_ORIGINS.remove('') print("🔒 ФИНАЛЬНАЯ проверка CSRF_TRUSTED_ORIGINS:", CSRF_TRUSTED_ORIGINS) # Дополнительная проверка - если все еще пустой, принудительно устанавливаем if not CSRF_TRUSTED_ORIGINS or CSRF_TRUSTED_ORIGINS == ['']: CSRF_TRUSTED_ORIGINS = ['http://localhost', 'https://smartsoltech.kr'] print("🚨 ПРИНУДИТЕЛЬНАЯ установка CSRF_TRUSTED_ORIGINS:", CSRF_TRUSTED_ORIGINS) # Дополнительное переопределение на случай поздней загрузки из config() def override_csrf_config(): """Функция для принудительного переопределения CSRF настроек""" global CSRF_TRUSTED_ORIGINS CSRF_TRUSTED_ORIGINS = [ 'http://localhost', 'http://127.0.0.1', 'http://postgres', 'https://smartsoltech.kr' ] print("🔒 OVERRIDE CSRF_TRUSTED_ORIGINS:", CSRF_TRUSTED_ORIGINS) # Вызываем переопределение override_csrf_config() # АБСОЛЮТНО ФИНАЛЬНОЕ переопределение # Это должно быть ПОСЛЕДНИМ в файле import sys if __name__ != '__main__': # Принудительное переопределение CSRF_TRUSTED_ORIGINS CSRF_TRUSTED_ORIGINS = [ 'http://localhost', 'http://127.0.0.1', 'http://postgres', 'https://smartsoltech.kr' ] print("🔥 ABSOLUTE FINAL CSRF_TRUSTED_ORIGINS:", CSRF_TRUSTED_ORIGINS) # Проверяем результат if CSRF_TRUSTED_ORIGINS and CSRF_TRUSTED_ORIGINS != ['']: print("✅ CSRF_TRUSTED_ORIGINS configured correctly!") else: print("❌ CSRF_TRUSTED_ORIGINS STILL EMPTY!") # Аварийная установка CSRF_TRUSTED_ORIGINS = ['https://smartsoltech.kr']