# Тесты и линтеры ## Быстрый прогон ```bash tox -e deps,pytest # полный сценарий CI: проверка зависимостей + тесты с покрытием tox -e ruff # проверка форматирования tox -e ruff-format # применить форматирование tox -e docs # сборка документации с -W ``` Список окружений по умолчанию: `ruff`, `build`, `pytest`, `docs`. ## pytest Если зависимости уже установлены, можно запускать напрямую: ```bash pytest pytest network/base/tests.py::SomeTestCase::test_something ``` Настройки — в `setup.cfg`: ```ini [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`. ## Тесты фронтенда ```bash 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`. ## Линтеры фронтенда ```bash npm run lint # eslint + stylelint npm test # jest ``` Подробнее — [](frontend.md). ## Проверка зависимостей `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`). Подробнее — [](deploy.md).