Сценарии проверки
После базовой проверки выполните сценарии для используемых в проекте механизмов.
Подготовка
Проверки с изменением прав, ограничений, карт роутов и данных выполняйте на тестовой копии сайта. Подготовьте отдельного пользователя, двух API-клиентов и тестовый роут с контролируемым результатом. Административные права проверяйте под пользователем без прав администратора.
Используйте адреса API и документации из настроек своего сайта. Каждое ограничение проверяйте отдельно: остальные условия должны разрешать запрос. Если механизм не используется в проекте, отметьте пункт как неприменимый.
Установка и удаление
Этот сценарий выполняйте на отдельной тестовой копии сайта, которую можно восстановить. Обычная проверка после обновления не требует удаления модуля.
| Проверить | Как проверить | Ожидаемый результат |
|---|---|---|
| Установка | Пройдите мастер установки и откройте дашборд | Все шаги завершены; административные страницы и настроенные точки входа доступны согласно правам |
| Удаление с сохранением данных | Создайте тестовые данные, при удалении оставьте соответствующие категории невыбранными, затем установите модуль повторно | Сохранённые данные доступны после повторной установки; при сохранении действующих токенов они продолжают работать |
| Удаление с очисткой | На восстановленной копии повторите удаление, выбрав категории для очистки, затем установите модуль снова | Данные выбранных категорий удалены. Несвязанные данные сайта и файлы других модулей сохранены |
После установки
Выполните эти проверки после первоначального запуска. После обновления повторите их перед проверкой собственных доработок.
Точки входа
| Проверить | Как проверить | Ожидаемый результат |
|---|---|---|
| Точки входа | Откройте настроенные адреса API и документации. Выполните запрос к существующему и отсутствующему роуту | Существующий роут возвращает ответ модуля, отсутствующий — HTTP 404. Документация открывается при наличии права чтения |
| Документация | Откройте её под пользователями с разными правами на страницу и группы роутов, затем повторите проверку после заполнения кеша | Пользователь видит только доступные ему роуты. Без права чтения доступ к документации запрещён |
| Сервисные роуты | Включите сервисные роуты и выполните запросы из документации, затем отключите их | Включённые роуты отвечают согласно своим описаниям и правам доступа; отключённые недоступны |
Авторизация и токены
| Проверить | Как проверить | Ожидаемый результат |
|---|---|---|
| Защищённый роут | Выполните запрос с верными данными авторизации, без них и с неверными данными | Верные данные дают доступ; отсутствие или ошибка обязательной авторизации возвращает HTTP 401 |
| Выпуск и список токенов | Выпустите пары токенов для двух клиентов одного пользователя и запросите список сессий | У клиентов отдельные пары; список содержит их сессии без исходных значений токенов |
| Обновление токенов | Обновите пару первого клиента через refresh-токен, затем повторите запрос со старым refresh-токеном | Новая пара работает; повторное использование старого refresh-токена отклоняется. Второй клиент продолжает работать |
| Срок действия и отзыв | Проверьте доступ с истёкшим токеном. Отзовите сессию первого клиента и повторите запросы обоих клиентов | Истёкший и отозванный токены не дают доступ; сессия второго клиента остаётся действующей |
Для токенов, выпущенных через API, проверьте работу с теми же заголовками клиента и отказ после их изменения. При отказе обновления из-за смены заголовков исходная пара должна оставаться действующей для прежнего клиента.
Права в админке
| Проверить | Как проверить | Ожидаемый результат |
|---|---|---|
| Чтение страниц модуля | Разрешите пользователю чтение дашборда, токенов, входящих запросов или настроек, затем отзовите право. Проверьте меню и прямой переход на страницу | Раздел доступен только при наличии права; отсутствие пункта меню нельзя обойти прямой ссылкой |
| Изменение данных | С правом только чтения попробуйте сохранить настройки или изменить токены, в том числе прямым запросом. Повторите с правом изменения | Изменяющие операции требуют соответствующего права. Очистка кеша модуля отдельно разрешена пользователю с правом чтения настроек |
Для журналов отдельно проверьте видимость ссылок в меню модуля и доступ к системному журналу событий. Просмотр самого журнала регулируется правами платформы: скрытая ссылка в меню модуля не запрещает прямой переход пользователю с таким доступом.
После обновления
Дополнительно проверьте используемые в проекте настройки, свои карты роутов, контроллеры и обработчики событий. Сравнивайте ответы с ожидаемым поведением вашей интеграции до обновления.
На дашборде проверьте гаджет «Логирование»: его флаги должны совпадать с настройками одноимённой вкладки, включая разные состояния записи в базу и файлы. Если гаджета нет в сохранённой раскладке, добавьте его через «Добавить гаджет». Успешность самой записи проверяйте по журналам после нового запроса.
Роуты и расширения
| Проверить | Как проверить | Ожидаемый результат |
|---|---|---|
| Пользовательская карта | Вызовите собственный роут и роут, переопределённый локальной картой, с указанными в карте HTTP-методами | Вызываются нужные контроллеры и действия; параметры, права и формат ответа соответствуют вашей карте |
| Роут провайдера | Вызовите разрешённый метод, затем метод вне разрешённого списка и явно запрещённый метод | Разрешённый вызов выполняется; остальные отклоняются до выполнения метода. Явный запрет имеет приоритет |
| Рекурсивная валидация | Передайте корректные параметры, затем по одному нарушайте обязательность, типы и допустимые значения, включая вложенные объекты и элементы списков | Корректные данные доходят до контроллера; ошибочные отклоняются на проверке параметров, действие контроллера не выполняется |
| Событийная модель | Подключите свои обработчики событий и проверьте их вызов и влияние на результат. Повторите запрос с кешированием ответа | Обработчики работают на соответствующих этапах. При попадании в кеш ответа контроллер и события до и после него повторно не вызываются |
Кеширование
| Проверить | Как проверить | Ожидаемый результат |
|---|---|---|
| Кеш карты и роутов | Выполните запрос после очистки кеша и повторно. Измените тестовую карту, очистите кеш модуля и снова вызовите роут | Первичное и повторное обращения используют одинаковые правила; после изменения и очистки применяется новая карта |
| Кеш настроек | Сохраните изменение настройки, влияющей на запрос, и сразу повторите запрос | Новое значение применяется без ожидания истечения прежнего кеша |
| Общее кеширование ответов | Для тестового GET-роута без собственного срока кеша задайте общий срок. По счётчику вызовов контроллера проверьте первый запрос, повторный и запрос после истечения срока | Повторный запрос получает сохранённый результат без вызова контроллера; после истечения срока контроллер выполняется снова |
| Кеш отдельного роута | Задайте собственный срок кеша роута при отключённом общем кеше. Затем отключите кеш роута при включённом общем | Настройка роута имеет приоритет: в первом случае результат кешируется, во втором контроллер вызывается при каждом запросе |
| Разделение ответов и права | Проверьте один роут с разными параметрами, пользователями и клиентами. После заполнения кеша запретите доступ одному из них и повторите запрос | Результаты разных пользователей и клиентов не смешиваются; изменённые параметры учитываются. Запрет доступа действует и при заполненном кеше |
Ограничения доступа
| Проверить | Как проверить | Ожидаемый результат |
|---|---|---|
| Режим работы | Настройте разрешённый интервал и проверьте запрос внутри и вне него, учитывая день недели и время сервера PHP | Внутри разрешённого интервала запрос проходит; вне него отклоняется |
| Количество запросов | Настройте небольшой лимит на тестовом стенде. Последовательно выполните запросы до его достижения, сверх него и после освобождения лимита | В пределах лимита запросы проходят; превышение возвращает HTTP 429. После освобождения лимита доступ восстанавливается |
| CORS | Выполните запросы из браузера с разрешённого и запрещённого источника. Проверьте предварительный OPTIONS-запрос с разрешёнными и запрещёнными заголовками | Разрешённый источник получает нужные CORS-заголовки; запрещённый источник или заголовки отклоняются. Разрешённый OPTIONS завершается без вызова контроллера |
| IP-адреса | Проверьте запросы с разрешённого адреса, адреса вне белого списка и адреса из чёрного списка | Доступ соответствует спискам; чёрный список имеет приоритет при совпадении |
| Группы пользователей | Выполните запрос под пользователями из разрешённых, неразрешённых и явно запрещённых групп | Роут доступен только разрешённым группам; явный запрет имеет приоритет |
Для групповых ограничений используйте авторизацию, предусмотренную роутом: вход в административную часть сайта сам по себе не авторизует API-запрос.
Проверка собственных обработчиков
Если интеграция использует события, проверьте её результат при успешном запросе и отказе в доступе. Повторите запрос с включённым кешированием: обязательные действия не должны зависеть от событий контроллера, которые при попадании в кеш не вызываются.
Для обработчика, возвращающего ответ досрочно, проверьте HTTP-статус, заголовки и данные клиента. Последующие обработчики и контроллер выполняться не должны.
История и данные запросов
Проверьте сбор запросов и четыре независимых направления записи. Используйте тестовые значения секретов.
| Условие | Ожидаемый результат |
|---|---|
| Сбор включён, лимит выключен | Одна запись на запрос, включая отказ, OPTIONS и досрочный ответ события |
| Сбор выключен, лимит действует | Только основная запись; флаги данных не создают записи в базе или файлы |
| Сбор и лимит выключены | История и журналы данных не создаются |
| Сбор включён, флаги данных включаются по одному | Записывается только выбранное направление: входящие или исходящие данные, база или файл |
| Данные записываются только в файлы | Карточка сообщает об отсутствии данных в базе; файлы доступны по REQUEST_ID |
| JSON, XML, HEAD и нестандартный ответ | Формат и отсутствие тела соответствуют ответу; непустое неподдерживаемое тело заменено маской |
| Вложенные пароли, токены, Authorization и Cookie | Распознаваемые секреты замаскированы в базе и файлах |
| Запрос с включённым лимитом | В подсчёт входит только статус PROCESSED; ошибка контроллера после проверки лимита не меняет его |
| Удаление запроса | Основная запись и связанные данные удалены из базы; файлы сохранены |
После запроса обновите список истории и откройте его карточку.
Завершение проверки
Зафиксируйте версию модуля, окружение, проверенные сценарии и результат каждого пункта. Для ошибки сохраните шаги воспроизведения, HTTP-статус и ответ без паролей и токенов.
Удалите тестовые данные и обработчики, восстановите временно изменённые настройки, права и карты роутов либо восстановите тестовый стенд из снимка.