Smoke: restricted delivery response
Preconditions
- применены десять миграций в лексикографическом порядке;
- публичный endpoint ещё не включён на рабочем сайте;
- тест выполняется только на отдельной тестовой заявке;
- известны точные
lead_idиrequest_id; - Telegram secrets могут быть настроены, чтобы проверить отсутствие отправки.
1. Обычная заявка
- Создать тестовую заявку со статусом уведомления
pending. - Вызвать
claim_broker_lead_notification. - Подтвердить:
claimed = true;current_status = sending;- счётчик попыток увеличился на один.
- Вернуть тестовую заявку в исходное состояние либо удалить тестовые данные по принятой процедуре.
2. Ограничение обработки
- Провести полный privacy workflow с действием
restrict_processing. - Подтвердить:
processing_restricted = true;retention_hold = true;- заявка не обезличена.
- Зафиксировать исходный
notification_attempt_count.
3. SQL claim restricted-заявки
Вызвать:
select *
from public.claim_broker_lead_notification(
'<lead_id>'::uuid,
'<request_id>'
);
Ожидание:
claimed = false;current_status = disabled;notification_attempt_countне изменился;notification_statusв строке не изменился;- новые notification events отсутствуют.
4. Повторный POST Edge Function
Отправить тот же валидный payload с исходным request_id.
Ожидание HTTP 200:
{
"ok": true,
"success": true,
"duplicate": true,
"request_id": "<request_id>",
"notification_status": "disabled"
}
Подтвердить точный набор ключей ответа. Restricted duplicate не должен содержать:
lead_id;crm_status;technical_priority;qualification;processing_restricted;retention_hold;anonymized_at;- blocker code;
- контактные или ипотечные поля.
Дополнительно подтвердить:
- Telegram-сообщение не отправлено;
- статус не заменён на
pending; - строка заявки не изменена;
notification_attempt_countне увеличился;- браузер продолжил считать ответ успешной идемпотентной обработкой.
5. Обезличенная заявка
- На отдельной тестовой строке выполнить подтверждённый privacy anonymize.
- Повторить SQL claim и duplicate POST.
- Ожидать тот же минимальный ответ с
request_idиdisabled, отсутствие новой попытки и отсутствие Telegram.
6. Retention hold без privacy restriction
- На отдельной тестовой строке установить допустимый
retention_hold = trueдо включения operational guard либо через утверждённую тестовую процедуру. - Вызвать claim и повторный POST.
- Ожидать
claimed = false,current_status = disabled, минимальный публичный ответ и неизменный счётчик.
7. Обычная duplicate-заявка
- Создать отдельную заявку без restriction, hold и anonymize.
- Повторить POST с тем же
request_id. - Подтвердить, что прежний обычный duplicate-контракт не изменён.
- Убедиться, что минимизация применяется только к restricted, hold и anonymized строкам.
8. Административный retry
Вызвать закрытый retry-handler для restricted-заявки.
Ожидание:
- HTTP
409; error = retry_not_allowed;- внутренний
notification_status = restricted; - browser-safe преобразование в
disabledне изменяет административную диагностику.
9. Проверка прав
Под ролями anon и authenticated вызов claim_broker_lead_notification должен завершиться отказом в доступе.
10. Проверка конфигурации сайта
Подтвердить:
lead_capture:
mode: "web3forms"
endpoint: ""
Критерий приёмки
Smoke считается пройденным, когда restricted, hold и anonymized заявки возвращают браузеру только ok, success, duplicate, request_id и notification_status: disabled; внутренние CRM-поля отсутствуют, административный путь сохраняет restricted, счётчики и события не меняются, Telegram не отправляется, а публичный Supabase endpoint остаётся выключенным.