Тесты и линтеры

Быстрый прогон

tox -e deps,pytest     # полный сценарий CI: проверка зависимостей + тесты с покрытием
tox -e ruff            # проверка форматирования
tox -e ruff-format     # применить форматирование
tox -e docs            # сборка документации с -W

Список окружений по умолчанию: ruff, build, pytest, docs.

pytest

Если зависимости уже установлены, можно запускать напрямую:

pytest
pytest network/base/tests.py::SomeTestCase::test_something

Настройки — в setup.cfg:

[tool:pytest]
addopts = -v --cov --cov-report=term-missing
python_files = tests.py test_*.py
DJANGO_SETTINGS_MODULE = network.settings

Собираются оба шаблона имён: сюиты приложений живут в tests.py, всё более новое — в отдельных test_*.py рядом с ними.

Покрытие включено по умолчанию; конфигурация — .coveragerc: источник network, из отчёта исключены network/*/tests.py, network/settings.py и миграции. Итоговый процент джоба test отдаёт GitLab ключевым словом coverage:, оттуда его берёт плашка в README.md.

Где что лежит

Модулей больше шестидесяти, перечислять их поимённо смысла нет — раскладка такая:

Где

Что покрывает

network/base/tests.py

Ядро: модели, представления, бизнес-логика

network/api/tests.py

Эндпоинты API

network/analytics/tests.py

Аналитика

network/base/test_*.py

По одному модулю на тему: планирование, TLE, орбитальная механика, задачи Celery, статистика, локализация

network/api/test_*.py

По одному модулю на тему: права, контракт ответов, загрузка SiDS, фильтры

network/users/test_*.py

Аутентификация и профили

tests/js/

Фронтенд (jest + jsdom)

Фабрики объектов — factory-boy (все — в network/base/tests.py и network/users/tests.py), моки — unittest.mock.

Тесты фронтенда

npm ci
npm test          # jest + jsdom, тесты в tests/js/

В CI jest идёт в джобе js_css_linting вместе с линтерами, на образе node:24-bookworm.

Линтеры Python

Единственный инструмент — ruff (ruff.toml):

  • длина строки 88, отступ 4 пробела;

  • двойные кавычки;

  • сортировка импортов (правило I): стандартная библиотека → сторонние → локальные network.*;

  • соглашение о docstring’ах — Google.

Из проверки исключены миграции, network/_version.py, сгенерированный клиент soniks-network-api-client/, docs/ и versioneer.py.

Линтеры фронтенда

npm run lint    # eslint + stylelint
npm test        # jest

Подробнее — Фронтенд.

Проверка зависимостей

tox -e deps пересоздаёт окружение, ставит ровно то, что записано в requirements-dev.txt (с --no-deps, то есть пины считаются полным локом), и выполняет pip check. Расхождение пинов ловится именно здесь.

Что делает CI

Стадии .gitlab-ci.yml: schema → api → static → build → test → publish → deploy_stand → security → deploy_prod. Проверки качества — джобы js_css_linting, js_tests (npm test), python_linting (tox -e ruff), docs (tox -e docs) и test (tox -e deps,pytest). Подробнее — CI/CD и деплой.