Демо-репозиторий воркшопа «ИИ как QA-инженер для фронтенд-тестирования».
KinoKit - небольшое детерминированное приложение для бронирования мест в кино. Это учебный артефакт воркшопа, а не продакшен-продукт: репозиторий показывает, как контролируемые MSW-данные, семантический UI, тесты Playwright, инструкции для AI и fallback-артефакты делают QA с агентами менее расплывчатым.
pnpm install
pnpm devОткройте:
http://127.0.0.1:3000/sessions/evening
pnpm workshop:reset
pnpm test:msw
pnpm test:e2eБазовый E2E-набор нужен для лайвкодинга: он должен проходить без падений. Он проверяет русский интерфейс бронирования, включая подписи кнопок мест Место A2, стандарт, 120 ₽, доступно и Место B1, VIP, 240 ₽, доступно.
Именованные QA-сценарии отдаются через MSW и моковый API бронирования. Тестовые хелперы вызывают useScenario(page, scenarioName): он выставляет cookie qa-scenario и открывает /sessions/evening. После него не добавляйте второй page.goto('/sessions/evening').
Доступные сценарии воркшопа:
evening: основной сценарий/sessions/evening; при выборе VIP-мест он тоже воспроизводит текущую ошибку расчёта суммы.vip-pricing: стандартное место A2 за120 ₽, VIP-место B1 за240 ₽, ожидаемая сумма360 ₽.mobile-overlap: те же данные бронирования, но с включённым посеянным визуальным перекрытием на мобильной ширине.hydration-mismatch: реальное расхождение SSR и клиента: серверный рендер выбираетA2, гидратированный клиент выбираетB1.
Страница бронирования получает данные сеанса через GET https://kinokit.local/api/sessions/:sessionId. MSW перехватывает этот запрос в Node runtime Next.js через instrumentation.ts.
pnpm test:mswCookie qa-scenario выбирает контролируемые моковые данные для E2E- и визуальных тестов.
В продукт намеренно добавлен баг в расчёте VIP-цены для сценария vip-pricing. A2 стоит 120 ₽, B1 стоит 240 ₽, поэтому ожидаемая сумма равна 360 ₽. Сейчас приложение показывает 240 ₽, потому что calculateTotal использует стандартную цену для каждого выбранного места.
Чтобы включить fallback-тест на регрессию:
pnpm workshop:add-vip-test
pnpm test:e2e --grep "VIP"До ручного исправления этот VIP-тест должен падать. Это ожидаемое состояние воркшопа. После ручного изменения features/booking/calculateTotal.ts, где сумма считается по реальным ценам мест, тот же VIP-тест должен проходить.
В репозитории также есть контролируемый сценарий расхождения SSR и клиента.
pnpm workshop:add-hydration-test
pnpm test:e2e --grep "hydration"До ручного исправления этот тест должен падать. Для демо в браузере без dev overlay от Next.js запустите приложение в production-режиме:
pnpm build
pnpm startВ development-режиме Next.js намеренно показывает большой overlay с ошибкой гидратации для этого бага.
pnpm test:visualВизуальный тест покрывает мобильный сценарий бронирования и защищает от перекрытия схемы зала и блока с итогом. В текущем состоянии воркшопа он ожидаемо падает, потому что кейс 02-mobile-overlap содержит посеянный баг мобильной раскладки.
Ожидаемый diff и CSS-правило, которое нужно удалить, описаны в cases/02-mobile-overlap/diff-notes.md.
pnpm codex-usageОтчёт читает локальные JSONL-файлы сессий Codex из ~/.codex/sessions и агрегирует события расхода токенов для этого проекта. Это локальная операционная оценка, а не биллинг провайдера.