# Автотестирование Sova Ветка внедрения: **`issues/27-test`** в репозиториях `k8s/sova-*`. ## Правило по контурам | Контур (тег) | Тесты в CI | E2E | |--------------|------------|-----| | **`*-test`** | Unit + integration (backend), Jest (adminpanel), PHPUnit (cabinet) | Smoke + full (Playwright, mocks) | | **`*-stage`** | То же pre-deploy | Только smoke read-only | | **`*-prod`** | **Нет** автотестов | **Нет** | Тесты **никогда** не гоняются на production-окружении. Запуск привязан к git-тегам `backend-v*`, `adminpanel-v*`, … в Gitea Actions. ## Пирамида ### 1. Backend (`sova-backend`) - **Инструменты:** PHPUnit 12, Zenstruck Foundry (далее). - **Unit:** `tests/Unit`, `tests/Service` — без БД. - **Integration:** `tests/Controller`, `tests/Integration` — с PostgreSQL в CI (только тег `*-test`, `continue-on-error` на старте). - **Логи E2E:** `App\Log\TestTraceProcessor` — заголовки `X-Is-Auto-Test`, `X-Test-Trace-Id` → `extra.is_test`, `extra.test_trace_id` в Loki. ```bash composer phpunit:unit composer phpunit:coverage # var/coverage/clover.xml ``` **CI:** `.gitea/workflows/build.yml` — job `test` на `test|stage`, артефакт `backend-coverage-*` (14 дней). ### 2. adminPanel (`sova-adminpanel`) - **Инструменты:** Jest + React Testing Library (миграция на Vitest — в roadmap). - **CI:** `npm run test:ci` (coverage lcov), lint, build до образа. ### 3. E2E (`sova-e2e`) - **Инструменты:** Playwright. - **Проекты:** `smoke-readonly` (stage), `full-e2e` (test, сценарии в `tests/e2e/`). - **CI:** `.gitea/workflows/e2e-tests.yml` — `workflow_dispatch` или тег `e2e-v*-*`. Локально: ```bash cd k8s/sova-e2e npm install && npx playwright install chromium export API_BASE_URL=http://192.168.252.6 API_HOST=api.test.sova.local npm run test:smoke ``` ## Loki (Grafana Explore) После деплоя с прогоном E2E: ```logql {namespace="sova-test"} | json | extra_is_test="true" | extra_test_trace_id="" ``` ## CI/CD: две фазы ```mermaid flowchart LR tag[Git tag *-test] --> pre[Pre-deploy: unit/coverage] pre --> build[Build image] build --> deploy[sova-deploy GitOps] deploy --> e2e[Post-deploy: sova-e2e] ``` 1. **Pre-deploy** — в workflow каждого приложения (`build.yml`). 2. **Post-deploy** — репозиторий `sova-e2e`, ожидание Argo CD (`scripts/wait-for-argocd.sh`), отчёт Playwright HTML в artifacts. ## Проверка деплоя на test (локальная ферма) После `./scripts/release-tag.sh backend backend-v1.0.6-test test` (и аналоги для adminpanel, cabinet, docs): | Проверка | Команда / URL | |----------|----------------| | Образы в кластере | `kubectl get deploy -n sova-test` → теги `*-v1.0.x-test` | | API smoke | `curl -H "Host: api.test.sova.local" http://192.168.252.6/news/list` | | admin login | `curl -H "Host: admin.test.sova.local" http://192.168.252.6/login` | | Docs | `curl -H "Host: docs.sova.local" http://192.168.252.6/` (или `docs.test.sova.local` после sync ingress) | | Playwright | `cd sova-e2e && npm run test:smoke` | Gitea Actions: артефакты `backend-coverage-*`, `adminpanel-coverage-*` (14 дней). ## Покрытие (test contour) При теге `backend-v1.0.x-test` / `adminpanel-v1.0.x-test` в Gitea Actions → **Artifacts**: - `backend-coverage-/` — Clover + HTML - `adminpanel-coverage-/` — lcov Просмотр: скачать артефакт job `test` или открыть summary в логе (`coverage` text-summary). ## Дорожная карта | Месяц | Задачи | |-------|--------| | **1** (текущая ветка) | PHPUnit unit + coverage, Jest CI, TestTraceProcessor, sova-e2e smoke, документация | | **2** | PG в runner, миграции, SpecialistRepository integration; 3 smoke в пайплайне | | **3** | Full E2E JWT/CRUD/запись; nightly test; Telegram alerts | ## Связанные страницы - [CI/CD и Loki (local-k8s)](./local-k8s/ci-and-logs) - [Gitea CI (test-contour)](./test-contour/guides/gitea-ci) - [Backend content CRUD](../apps/backend-content-crud)