← Главная

DS-798 — Перетестирование антифрода для триала

DS-798 в Jira · Разработчик: Marat Komarov · Статус: Back ожидает Front

Полный URL (фронт + бэк): https://deploy-preview-927--chatplace-front.netlify.app/?preview-api-core=https://api-2020.review.chatplace.io/

📋 Контекст перетеста

Комментарий Марата (26.03): «Добавлен fingerprint на фронт (deploy-preview-927). Нужно подключить бэк api-2020 и перетестить. Поправил prodamus → CP в card_fingerprints.»

Slack (Марат): «Prodamus с самым низким приоритетом. Можно вообще не проверять — он не подключается для новых юзеров. Для рублей используется только CloudPayments. Если CP работает и Stripe работает — Prodamus игнорируем.»

Что изменилось:

Что было найдено (26.03):

Провайдеры для тестирования:

1. Stripe — базовый антифрод

1.1
Новый юзер, чистая карта Visa 4242 через Stripe (USD) → триал активируется
✅ trial_ends_at в будущем, subscription_logs type=1, card_fingerprints заполнен, user_fingerprint ≠ NULL
Предыдущий результат: ✅ PASS (798b@mail.com). Но user_fingerprint был NULL.
1.2
Второй юзер, та же карта Visa 4242 через Stripe → триал заблокирован
✅ type=4 (CARD_ALREADY_USED), trial_ends_at=NULL, сразу платный план
Предыдущий результат: ✅ PASS (798c@mail.com)

2. CloudPayments — блокировка повторных карт (был BUG с Prodamus)

2.1
Новый юзер, карта через CloudPayments (RUB) → триал активируется
✅ trial_ends_at в будущем, card_fingerprints: provider=cloudpayments (НЕ prodamus), user_fingerprint ≠ NULL
Предыдущий результат: Тестировали через Prodamus — provider был «prodamus», теперь исправлено на CP
2.2
Второй юзер, та же карта через CloudPayments → триал заблокирован
✅ type=4 (CARD_ALREADY_USED), trial_ends_at=NULL. Ранее через Prodamus — не блокировался!
Предыдущий результат: BUG через Prodamus триал разрешался

3. Fingerprint (был WARN — не записывался)

3.1
После оформления триала проверить таблицу user_fingerprints — запись должна появиться
✅ user_fingerprint ≠ NULL в card_fingerprints, запись есть в user_fingerprints
Предыдущий результат: WARN user_fingerprint=NULL у всех, таблица пустая
3.2
GET /user → поле hasFingerprint
✅ hasFingerprint = true для юзера с записанным fingerprint
Предыдущий результат: WARN hasFingerprint=false у всех

4. Карта + устройство — CloudPayments (были SKIP)

4.1
Юзер A: триал через CloudPayments картой X с устройства D1. Юзер B: та же карта X, другое устройство D2
✅ Триал РАЗРЕШЁН — для CloudPayments проверяется связка карта + устройство (по плану Марата шаг 5)
Предыдущий результат: ⏭ SKIP (fingerprint не записывался)
4.2
Юзер C: та же карта X, то же устройство D1
✅ Триал ЗАБЛОКИРОВАН (CARD_ALREADY_USED) — карта + устройство совпали (шаг 6)
Предыдущий результат: ⏭ SKIP (fingerprint не записывался)

5. Передача бота → блокировка

5.1
Юзер A (с триалом) передаёт бота юзеру B. Юзер B пытается оформить триал
✅ Триал заблокирован (BOT_HAD_TRIAL_OWNER), type=4, trial_ends_at=NULL
Предыдущий результат: ✅ PASS

6. Фронтенд при блокировке (был BUG)

6.1
При заблокированном триале (type=4) — что показывает фронтенд?
✅ Ошибка / сообщение о блокировке, а НЕ «You've activated the Pro plan» с зелёной галочкой
Предыдущий результат: BUG фронт показывал страницу успеха при заблокированном триале

7. Stripe $20 при блокировке (был WARN)

7.1
При блокировке триала через Stripe — проверить: $20 это hold (отменяется) или реальное списание?
Задокументировать поведение
Предыдущий результат: WARN видна авторизация $20, не проверено

8. Доп. проверки

8.1
Юзер без ботов + чистая карта → триал разрешён
✅ Триал OK, bot_ownership_history пуст
Предыдущий результат: ✅ PASS
8.2
Unlimited/Club → переход на Pro, триал доступен (шаг 2 плана Марата)
✅ trial_ends_at выставлен, subscription_logs type≠1, антифрод не блокирует
Предыдущий результат: ⏭ SKIP (UI не позволял переключиться)

9. Virale / Unlimited-Club (новое, не удаляя старое)

9.1
Новый юзер покупает Unlimited/Club (сценарий Virale) — антифрод не должен срабатывать как trial
✅ Оплата проходит; в БД нет ложного срабатывания trial: в subscription_logs нет type=1 из-за Unlimited/Club
Источник: шаг 2 из плана Марата по DS-798 (фикс ложного антифрода для Unlimited/Club)
9.2
После Unlimited/Club попытка перейти на Pro — trial должен быть доступен
✅ Пользователь не заблокирован антифродом; trial на Pro доступен (нет CARD_ALREADY_USED/BOT_HAD_TRIAL_OWNER только из-за Unlimited/Club)
Ключевая проверка регрессии Virale-сценария
9.3
DB-верификация Virale кейса (после шагов 9.1–9.2)
✅ Проверить в БД: корректные записи в subscription_logs, trial_ends_at/next_payment_at, отсутствие ложной причины антифрода
Проверка на уровне данных (PgWeb/DB), чтобы подтвердить отсутствие ложного антифрода