Две линзы, потому что тесты пишут две команды
Юнит/Vitest/golden по репам Letteros 2.0 (be-*/fe-*). По инвентаризации — не писались командой, покрытие near-zero. Это ответственность разработки, не QA. Coverage-отчёт по коду собирать не из чего — так и фиксируем.
E2E-набор QA (Playwright), по разделам продукта. Именно он сегодня несёт защиту. Бьёт в реальный бэкенд, единый прогон на prod/CI. Ниже — карта: какая область покрыта и насколько глубоко.
Почему по разделам продукта, а не по репам: одна пользовательская функция размазана по нескольким репозиториям (fe + be), поэтому «покрытие фичи» честнее мерить сквозным E2E, чем построчным coverage отдельного репо.
Что покрыто и на какой глубине
| Область продукта | E2E-кейсов | Глубина | Что покрыто / чего нет |
|---|---|---|---|
| Редактор писем | 108 | Глубоко | Элементы, структуры, контент, история, инспектор, модули, текст, экспорт-UI, превью. Не проверяется итоговый HTML письма. |
| Файл-менеджер (Письма / Шаблоны / Медиа) | 100 | Глубоко | Создание/загрузка, папки, копия/переим./перемещение, архив↔корзина, поиск, сортировка, фильтр, пагинация, экспорт. |
| Авторизация / Регистрация | 41 | Глубоко | Вход/выход, валидация, негативы, безопасность (XSS/SQLi), восстановление пароля, сессия. |
| Настройки (проект / пользователь) | 26 | Глубоко | Поля, аватар, дропдауны, чекбоксы, валидация, проверка сохранения через reload. |
| Онбординг | 21 | Глубоко | Туры, шаги, флаги, автозапуск по условиям, изоляция флагов. |
| Рендер / Превью / Тест-письмо | 12 +12 off | Поверхностно | Превью/веб-версия — по факту открытия, не по содержимому. Генерация рендеров на устройствах выключена, реальная отправка — opt-in. |
| Смоук навигации (Аналитика, Биллинг, История, Архив, Корзина) | 5 | Смоук | Только «страница открывается» + элемент раздела. Сценарии внутри — не покрыты. |
| Презентации | 0 | Нет тестов | Функциональность не покрыта. |
| Формы | 0 | Нет тестов | Функциональность не покрыта. |
| Биллинг — оплата / смена тарифа | 0 | Нет тестов | Есть только смоук, что страница тарифов открывается. Сценарии оплаты — нет. |
| Рассылки / Sender | 0 | Нет тестов | Интеграции отправителей, кампании — не покрыты. |
| История (раздел ФМ) / дашборд Аналитики | 0 | Нет тестов | Только смоук открытия. Содержимое и сценарии — нет. |
| Итого E2E | 313 +14 off | 5 глубоко · 2 поверхн. · 5 нет | 327 кейсов всего (313 активных + 14 отключено) |
Где продукт сегодня без автотестов
Содержимое итогового письма / рендера не проверяется нигде. Тесты подтверждают, что редактор реагирует, но не что письмо на выходе собралось правильно. Весь раздел генерации рендеров на устройствах — выключен. Класс багов «в редакторе всё кликается, а письмо приходит кривое/пустое» не ловится ни одним тестом. Это ядро продукта — и главный кандидат в план.
- ◻5 областей — 0 функциональных тестов: презентации, формы, сценарии биллинга, рассылки (sender), история/аналитика-дашборд. Смоук «страница открывается» ≠ покрытие сценариев. Интеграции и AI — внутри редактора, отдельными областями не считаем.
- ◻14 отключённых кейсов (skip / fixme): генерация рендеров на устройствах (Email-on-Acid отключён инфраструктурой), реальная отправка письма, unauth-редирект. Честно помечены как «пропущено», но целые способности без стража.
- ◻Покрытие кода (юнит/golden) ≈ 0 по репам 2.0. Зона разработки; coverage-отчёт по коду не собирается за отсутствием тестов.
Покрытие есть — и оно не «зелёное для галочки»
Отдельно проверили, что покрытые тесты действительно падают при поломке функции (разбор ассертов + fault-injection на prod). Это про работоспособность, не про покрытие, поэтому — кратко:
Запускает QA вручную; плюс экспериментальный daily на GitHub с отчётом в Telegram
- ▸Ручной прогон — основной способ. QA запускает набор сам — локально и на prod (единый раннер Playwright), либо кнопкой «Run workflow» в GitHub Actions. Редактор-набор идёт локально; в daily включается флагом.
- ▸Ежедневный прогон — эксперимент. Внешний планировщик (cron-job.org) по расписанию дёргает workflow на GitHub Actions (нативный GitHub-schedule ненадёжен, поэтому вынесен наружу). Гоняет prod-проекты: авторизация + основной набор + рендеры, на чистом раннере. continue-on-error — чтобы отчёт ушёл даже при падениях.
- ▸Отчёт в Telegram-бот. После прогона бот присылает итог: всего / прошло / упало / flaky / пропущено / время, список упавших и flaky с краткой причиной и ссылку на логи прогона (макет справа).
- —Отчёт покрытия по коду не собирается — юнит/golden по репам отсутствуют. Появится, когда разработка начнёт писать юниты.