Files
ACORE/acore/test_runner.py
lokses 719d0b737b infra: надёжное обнаружение тестов, Redis-кэш и хардненинг прода
- AcoreDiscoverRunner собирает tests/tests_* всех локальных приложений
  (manage.py test находил 38 тестов из ~466 — теперь все).
- CACHES на Redis (отдельная DB от Celery) + обязательный requirepass
  в production, SECURE_HSTS_PRELOAD.
- Фикс stored-XSS в админке: format_html вместо mark_safe + f-string.
- Утилиты безопасности/тестов, шифрование полей.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:11 +03:00

41 lines
1.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import pkgutil
from importlib import import_module
from django.apps import apps as django_apps
from django.test.runner import DiscoverRunner
def _local_test_labels():
"""core.tests, core.tests_* и apps.<name>.tests — без discover('.')."""
labels = []
for config in django_apps.get_app_configs():
if not (config.name == 'core' or config.name.startswith('apps.')):
continue
try:
package = import_module(config.name)
except ImportError:
continue
paths = getattr(package, '__path__', None)
if not paths:
continue
for _finder, name, _ispkg in pkgutil.iter_modules(list(paths)):
if name == 'tests' or name.startswith('tests_'):
labels.append(f'{config.name}.{name}')
return labels
class AcoreDiscoverRunner(DiscoverRunner):
"""Без аргументов прогоняет тесты всех локальных приложений.
`manage.py test` ходит в discover('.'), а unittest видит только пакеты с
`__init__.py` в корне. Приложения лежат в `apps.<name>` без корневого
пакета `apps` — их tests.py не попадают в suite. Явные dotted-имена
`apps.feed.tests` это обходят и не конфликтуют друг с другом как
top-level модуль `tests`.
"""
def build_suite(self, test_labels=None, **kwargs):
if not test_labels:
test_labels = _local_test_labels()
return super().build_suite(test_labels, **kwargs)