QA · Аудит покрытия продукта тестами Letteros 2.0 LT2-353 09.07.2026

Что из продукта покрыто
автотестами — и где дыры

Ответ на задачу LT2-353: инвентаризация покрытия Letteros 2.0. Две линзы: покрытие кода (юнит/golden по репам) и покрытие продукта через E2E. Ниже — карта покрытия по областям, зоны без тестов и план по риск-приоритету.

~0%
Покрытие кода юнит/golden по репам 2.0
327
E2E-кейсов по покрытым областям
5 / 12
Областей продукта с глубоким E2E
5
Областей без единого функц. теста
5 глубоко 2 поверхностно 5 без тестов из 12 выделенных областей продукта
Как измеряли покрытие

Две линзы, потому что тесты пишут две команды

Линза 1 · Покрытие кода
≈ 0%

Юнит/Vitest/golden по репам Letteros 2.0 (be-*/fe-*). По инвентаризации — не писались командой, покрытие near-zero. Это ответственность разработки, не QA. Coverage-отчёт по коду собирать не из чего — так и фиксируем.

Линза 2 · Покрытие продукта
327 кейсов

E2E-набор QA (Playwright), по разделам продукта. Именно он сегодня несёт защиту. Бьёт в реальный бэкенд, единый прогон на prod/CI. Ниже — карта: какая область покрыта и насколько глубоко.

Почему по разделам продукта, а не по репам: одна пользовательская функция размазана по нескольким репозиториям (fe + be), поэтому «покрытие фичи» честнее мерить сквозным E2E, чем построчным coverage отдельного репо.

Карта покрытия · E2E по областям продукта

Что покрыто и на какой глубине

Область продуктаE2E-кейсовГлубинаЧто покрыто / чего нет
Редактор писем108 Глубоко Элементы, структуры, контент, история, инспектор, модули, текст, экспорт-UI, превью. Не проверяется итоговый HTML письма.
Файл-менеджер (Письма / Шаблоны / Медиа)100 Глубоко Создание/загрузка, папки, копия/переим./перемещение, архив↔корзина, поиск, сортировка, фильтр, пагинация, экспорт.
Авторизация / Регистрация41 Глубоко Вход/выход, валидация, негативы, безопасность (XSS/SQLi), восстановление пароля, сессия.
Настройки (проект / пользователь)26 Глубоко Поля, аватар, дропдауны, чекбоксы, валидация, проверка сохранения через reload.
Онбординг21 Глубоко Туры, шаги, флаги, автозапуск по условиям, изоляция флагов.
Рендер / Превью / Тест-письмо12 +12 off Поверхностно Превью/веб-версия — по факту открытия, не по содержимому. Генерация рендеров на устройствах выключена, реальная отправка — opt-in.
Смоук навигации (Аналитика, Биллинг, История, Архив, Корзина)5 Смоук Только «страница открывается» + элемент раздела. Сценарии внутри — не покрыты.
Презентации0 Нет тестов Функциональность не покрыта.
Формы0 Нет тестов Функциональность не покрыта.
Биллинг — оплата / смена тарифа0 Нет тестов Есть только смоук, что страница тарифов открывается. Сценарии оплаты — нет.
Рассылки / Sender0 Нет тестов Интеграции отправителей, кампании — не покрыты.
История (раздел ФМ) / дашборд Аналитики0 Нет тестов Только смоук открытия. Содержимое и сценарии — нет.
Итого E2E313 +14 off5 глубоко · 2 поверхн. · 5 нет327 кейсов всего (313 активных + 14 отключено)
Дыры покрытия

Где продукт сегодня без автотестов

Сквозная дыра № 1

Содержимое итогового письма / рендера не проверяется нигде. Тесты подтверждают, что редактор реагирует, но не что письмо на выходе собралось правильно. Весь раздел генерации рендеров на устройствах — выключен. Класс багов «в редакторе всё кликается, а письмо приходит кривое/пустое» не ловится ни одним тестом. Это ядро продукта — и главный кандидат в план.

Качество имеющихся тестов · кратко

Покрытие есть — и оно не «зелёное для галочки»

Отдельно проверили, что покрытые тесты действительно падают при поломке функции (разбор ассертов + fault-injection на prod). Это про работоспособность, не про покрытие, поэтому — кратко:

309надёжны
4слабые
0беспол.
Аудит нашёл 24 слабых из 316. После аудита: усилили 14 (сортировка по дате, смоук «История»/«Аналитика», read-only email, цвет фона + применение стиля колонки/структуры), 3 дубля убрали, 3 признали приемлемыми presence-тестами. Осталось 4 слабых — осознанно: 2 мока (смена пароля / тест-отправка — нельзя без отдельного безопасного аккаунта), веб-версия письма (часть render-дыры), JWT-в-cookie (архитектурно всегда-истина). Бесполезных — 0.
Инфраструктура прогона

Запускает 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 по репам отсутствуют. Появится, когда разработка начнёт писать юниты.
Telegram · пример ежедневного отчёта
Автотесты Letteros (prod)
Всего: 313
✅ Прошло: 309
❌ Упало: 0
⚠️ Flaky: 4
⏭ Пропущено: 14
⏱ Время: 48м 30с
⚠️ Flaky (прошли на ретрае):
• letters.spec.ts › Экспорт двух писем в ZIP
↳ Test timeout of 120000ms exceeded.
• templates.spec.ts › Поиск шаблона по имени
↳ waitForResponse: Timeout 35000ms exceeded
План покрытия · по риск-приоритету

Что покрывать дальше: редактор → рендер → деньги → остальное

Редактор
Редактор писем — ядро продукта, углубить покрытие Тесты есть (108) — нужно отревьюить существующие и закрыть, что осталось: форматирование текста (TinyMCE), drag-n-drop добавления элементов; сверка по всей поверхности фич (условия показа/адаптивность, AI-в-редакторе, контролы инспектора).
Рендер
Генерация рендеров на устройствах и превью Вернуть контроль над генерацией рендеров на устройствах (заменить отключённый Email-on-Acid проверкой содержимого превью) и проверять содержимое веб-версии письма. Сейчас без стража.
Деньги
Биллинг-сценарии и рассылки Сценарии оплаты/смены тарифа (сейчас только смоук страницы) и отправка через Sender/интеграции — прямое влияние на деньги, покрытие 0.
Остальное
Презентации, формы + углубление смоука Довести смоук навигации до проверки сценариев внутри разделов; покрыть презентации/формы по мере входа в скоуп QA.