← Главная

🗓 DS-201 — Google Calendar Master Test Plan v2

Максимально полный план ретеста: OAuth, tools, UI-настройки, валидации, privacy, E2E

28 мая 2026 · Эпик: DS-201 · База: DS-255, DS-571, DS-650 + подзадачи DS-571

0 pass 0 fail / 0
Полный URL: https://deploy-preview-827--chatplace-front.netlify.app/?preview-api-core=https://api-1764.review.chatplace.io/
Тест-аккаунт: 571@mail.com / 571@mail.com (или новый по правилу задачи)
Язык интерфейса: русский (обязательно)
Важно: действия create/reschedule/cancel в тестовом чате меняют реальные события Google Calendar.

📌 Scope задач

Основные: DS-190, DS-255, DS-571, DS-650, DS-750. Подзадачи DS-571: DS-572/573/574/575/730/737/741/744/746/747/748/772/776.
P0OAuth + tools + критический E2E
P1Формы и валидация
P2Управление действиями + UI/локализация
P3Документация/стабильность/edge

🧠 Усиленные промпты для инструментов copy-paste

Правило для всех промптов: отвечай на языке клиента, без кода/markdown/HTML, только человеко-понятный текст и шаги.

1) check_available_slots — проверка свободного времени

Когда использовать:
- Клиент хочет записаться, узнать свободные окна или перенести встречу.

Что делать:
1) Если дата/период не указаны — уточни период (например: "на этой неделе", "завтра после 15:00").
2) Проверь свободные слоты в выбранных календарях.
3) Предложи 3 ближайших релевантных слота в часовом поясе клиента.
4) Если слотов нет — предложи ближайший альтернативный диапазон.

Ограничения:
- Не выдумывай время.
- Не предлагай слоты вне рабочих часов.
- Если интеграция отключена/недоступна — явно сообщи об этом и предложи альтернативу (ручная запись).

2) create_booking — создание записи

Когда использовать:
- Клиент подтверждает конкретную дату/время записи.

Перед созданием обязательно:
1) Уточни и подтвердить: дата, время, часовой пояс.
2) Уточни имя и контакт (если требуется бизнес-процессом).
3) Повтори клиенту итог: "Записываю на ..." и дождись подтверждения.

После создания:
- Подтверди факт записи.
- Если включён createMeetLink — отправь ссылку на встречу.
- Если сработало напоминание — сообщи, когда напоминание придёт.

Ограничения:
- Никогда не создавай запись без явного подтверждения клиента.
- Если слот занят — не создавай, предложи 2–3 альтернативы.

3) reschedule_booking — перенос записи

Когда использовать:
- Клиент просит перенести существующую запись.

Что делать:
1) Идентифицируй, какую запись переносим (если записей несколько — уточни).
2) Уточни новую дату/время и часовой пояс.
3) Проверить доступность нового слота.
4) Выполни перенос только после подтверждения клиента.
5) Подтверди новое время и что старая запись больше неактуальна.

Ограничения:
- Если новой доступности нет, перенос не выполнять.
- Предлагать альтернативы, а не "молчаливый" отказ.

4) cancel_booking — отмена записи

Когда использовать:
- Клиент явно просит отменить запись.

Что делать:
1) Если запись одна — отменяй после короткого подтверждения.
2) Если записей несколько — уточни, какую именно отменить.
3) После отмены сообщи, что запись отменена.
4) Предложи подобрать новое время.

Ограничения:
- Не отменяй по неявным фразам ("может не смогу").
- При отсутствии записи — сообщи, что активных записей не найдено.

5) get_meeting_link — выдача ссылки на созвон

Когда использовать:
- Клиент просит ссылку на предстоящую встречу.

Что делать:
1) Найти актуальную ближайшую запись клиента.
2) Вернуть ссылку Google Meet и время встречи.
3) Если ссылку найти нельзя — предложить пересоздать/перенести встречу.

Ограничения:
- Не выдумывать ссылку.
- Не отправлять "пустой" ответ, всегда давай следующий шаг.

P0. Подключение и критический smoke Blocker

Без подключённого GCal виден промо-экран и кнопка «Подключить»
OAuth проходит успешно, после возврата интеграция активна
После подключения виден список календарей и выбран default calendar
В тест-чате check_available_slots срабатывает как tool, не ответом из базы
create_booking создаёт реальное событие в GCal
reschedule_booking переносит существующую запись
cancel_booking отменяет/удаляет запись в GCal

P1. Формы и валидации High

Форма «Создавать события» (DS-573 / DS-772 / DS-776)

Валидация: время окончания не может быть ≤ времени начала
Ошибка валидации отображается понятно, не generic Error
Длительность события по умолчанию 30 минут (DS-998), изменение сохраняется
successMessage сохраняется до 10 000 символов (DS-978)
Настройки createMeetLink / reminder / askClientTimezone корректно сохраняются

Формы «Изменять» / «Отменять» (DS-574 / DS-575)

Форма reschedule открывается, сохраняется, применяется в тест-чате
Форма cancel открывается, сохраняется, применяется в тест-чате

Календари и разрешения (DS-572 / DS-737 / DS-744 / DS-748)

Refresh списка календарей подтягивает добавление/удаление без relogin
В create/change/cancel доступны только writable календари
Статус разрешений в карточке действия соответствует фактическому состоянию
При отключении единственного разрешения показывается корректный тост «Действие отключено»
Ретест DS-976: при переключении календарей A↔B не возникает 422 в Network
Ретест DS-999: списки календарей разделены (свободное время отдельно от разрешений)
Ретест DS-1133: ширина дропдауна календаря корректная, не выходит за контейнер

P2. Управление действиями и UI-регресс Medium

Экран выбора действий открывается корректно, GCal-действия доступны (DS-730)
Тогглер действия через виджет стабильно включает/выключает действие (DS-746)
Удаление действия работает с подтверждающей модалкой (DS-747)
Размер textarea удобен на create/change/cancel (DS-741)
В RU-локали нет критичных EN-строк на ключевых экранах GCal
Тексты тостов/ошибок соответствуют действию и понятны пользователю
Ретест DS-977: фильтр/дропдаун календарей соответствует макету Figma
Ретест DS-1105: тост показывает перевод, не ключ вида ALERT.CHANGES_SAVED

P3. Документация, privacy и стабильность Low

Ссылка «Как настроить Google Calendar» (DS-750) открывается корректно
Privacy-consent ON: агент запрашивает согласие и даёт ссылку на политику
Privacy-consent OFF: агент не запрашивает лишнее согласие
После logout/login + refresh настройки интеграции и действий не слетают
При отключенной интеграции агент корректно сообщает о недоступности действий
OAuth cancel-flow: при отмене на стороне Google возврат в ChatPlace без краша, статус неактивен
Повторное подключение с другим Google-аккаунтом: календари обновляются, старые данные не подтягиваются

🔁 Сквозной E2E сценарий critical flow

#Сообщение клиентаОжидаемое действие агентаTool
1«Хочу записаться на консультацию»Уточняет период/предпочтения
2«На этой неделе после обеда»Предлагает 3 релевантных свободных слотаcheck_available_slots
3«Давай в среду в 15:00»Подтверждает и создаёт записьcreate_booking
4«Пришли ссылку на созвон»Отдаёт ссылку на встречу и времяget_meeting_link
5«Перенеси на четверг 16:00»Проверяет и переносит записьreschedule_booking
6«Не смогу, отмени запись»Отменяет, предлагает перезаписьcancel_booking
Сквозной E2E пройден без блокеров
Агент во всех шагах отвечал на языке клиента и без кода/markdown

🔧 Быстрые API-проверки (опционально) DS-255

Если нужно подтвердить API без глубокого UI-прогона — проверяем минимум 4 эндпоинта: calendars, create-booking, reschedule, cancel-booking.
GET /google-calendar/calendars возвращает 200 и список календарей
POST /google-calendar/create-booking принимает валидный payload
POST /google-calendar/reschedule принимает валидный payload
POST /google-calendar/cancel-booking принимает валидный payload

🎯 Банк фраз для быстрого прогона tools (из лучших практик DS-255) chat scenarios

check_available_slots

«Хочу записаться на консультацию» → агент показывает ближайшие свободные слоты
«Какие у вас услуги?» → tool не вызывается, агент отвечает по базе знаний

create_booking

«Запиши меня на завтра в 15:00» → создаётся событие и даётся подтверждение
«Запиши на завтра в 06:00» (вне рабочих часов) → запись не создаётся, предлагается альтернатива
«Может, запишусь позже» → бронь не создаётся без явного намерения

reschedule_booking

«Перенеси встречу на завтра в 14:00» → запись переносится и подтверждается
«Перенеси» при отсутствии активных записей → понятный отказ без падения

cancel_booking

«Отмени мою запись» → встреча отменяется, агент предлагает перезапись
«Я, возможно, не смогу прийти» → агент не отменяет автоматически, уточняет намерение

get_meeting_link

«Пришли ссылку на созвон» → возвращается актуальная Google Meet ссылка

Стабильность ответов

Ответы агента без markdown/кода и на языке клиента во всех сценариях
После серии create→reschedule→cancel история не ломается, агент работает последовательно