# Спринт 2 — тестирование (AI-помощники) **Состояние продукта:** [../PROJECT_STATUS.md](../PROJECT_STATUS.md) · чек-лист импорта и API — ниже. **Предпосылка:** спринт 1 (версии) принят. **Секреты:** для стенда допускается отдельный ключ DeepSeek; в логах/скриншотах **не** светить полный ключ. **MVP 2026-04 (импорт + LLM, до полного спринта 2):** в `backend` задать `DEEPSEEK_API_KEY` *или* `OPENAI_API_KEY` → `POST /api/tests/import/document` при загрузке файла возвращает `generation.draft` → в карточке теста, блок «Импорт из файла», кнопка **«Применить сгенерированный черновик»** → затем **«Сохранить черновик»**. Юнит-тесты: `documentGenService.test.js`. --- ## 1. Автоматизировано и self-check (разработка) _Отмечайте [ ] → [x] по мере выполнения._ ### 1.1 Безопасность и API - [ ] Эндпоинты настроек не возвращают сырой ключ на клиент - [ ] Ошибка при отсутствии/невалидном ключе — структурированная, с кодом/текстом для UI - [ ] «Проверить подключение» при валидном ключе — успех; при фейле — сообщение об ошибке сети/401 и т.д. ### 1.2 Моки / контракты (по возможности) - [ ] Парсинг JSON-ответов LLM: при невалидном JSON — пользователю сообщение, не 500 без текста - [ ] Unit-тесты маппинга «ответ LLM → черновик теста/вопроса» (на фикстурах) ### 1.3 Смоук перед передачей - [ ] Сгенерировать тест: только с названием; превью; применить — вопросы в редакторе - [ ] Проверить тест: модалка с текстом - [ ] Улучшить вопрос: чекбоксы, применение частично - [ ] Дистракторы: к существующим ответам добавилось 3 варианта - [ ] После применения AI-изменений сохранение теста согласовано с правилами **версий** (если были попытки) --- ## 2. Ручная приёмка (я / заказчик) ### 2.1 Настройки - [ ] Сохранить ключ, обновить страницу — приложение не показывает ключ, но AI-функции работают - [ ] Очистить/испортить ключ — AI показывает ошибку и **есть** переход/ссылка на настройки - [ ] «Проверить подключение» отражает реальное состояние (успех/ошибка) ### 2.2 Уровень теста - [ ] **Сгенерировать тест** недоступен при пустом названии; при заполненном — выдаёт осмысленный черновик, применяется **целиком** по кнопке - [ ] **Проверить тест** — рекомендации читаемы, модалка закрывается, данные теста не портит без явного применения - [ ] **Предложить улучшение** — сравнение было/стало, выбор чекбоксами, применяется только отмеченное ### 2.3 Уровень вопроса - [ ] **Улучшить вопрос** — нет молчаливой перезаписи; подтверждение через чекбоксы/применить - [ ] **Дистракторы** — три новых **не** заменяют старые ответы - [ ] **Сгенерировать подсказку** — текст появляется в поле, можно отредактировать и сохранить ### 2.4 Версионирование + AI (регресс) - [ ] На тесте **без** попыток: массовое применение AI не создаёт лишних версий бессмысленно (ожидание как в спринте 1) - [ ] На тесте **с** попытками: осмысленные сохранения ведут себя по правилам 4.1 (новая версия при изменении) ### 2.5 Дизайн - [ ] Кнопки, модалки, превью, состояния загрузки/ошибок **визуально** в одном ряду с остальным модулем (как спринт 1) ### 2.6 Качество UX - [ ] Долгий ответ LLM: индикатор ожидания, нельзя «задвоить» запросы без контроля - [ ] Понятные сообщения при сбое сети или API DeepSeek --- **Итог приёмки спринта 2:** дата __________, комментарий _________________________