@@ -0,0 +1,107 @@
# Автотестирование 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="<GITHUB_RUN_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-<tag>/` — Clover + HTML
- `adminpanel-coverage-<tag>/` — 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 )