Роудмап / План тестирования / Кейсы
Обновлено: 29 мая

План тестирования — Кейсы

11 активных кейсов в продакшене, 177 открытий уже сделано. Тестируем витрину, открытие, эконометрику фонда, инвентарь, бесплатные кейсы и админку.

Повторный прогон · 29.05.2026 · до шага «Вывод в Steam»

Прогон по бэку и реальному API под тест-юзерами (без новых скринов — проверялись списания, атомарность, порядок балансов, скидки, инварианты фонда). UI-замечания перенесены с прогона 28.05 без изменений: код фронта с тех пор не трогали.

Итог повторного прогона

✓ Подтверждено
№2 одиночное открытие атомарно (case 34: баланс 1580→1405, списано ровно 175, транзакция case_open связана с открытием #189). №4 бонус списывается раньше основного (бонус 200→25, основной 450 не тронут). №5 скидка премиума на бэке верна (650→492.50, списано 157.50 = 175 −10%). №6 при нуле на балансе API даёт чистый 422 «Недостаточно средств. Нужно 175 ₽, доступно 0 ₽».
✗ Баг открыт · №3
Мульти-открытие неатомарно — подтверждено по коду, не починено. CaseController::open при quantity>1 делает Collection::times($quantity, fn () => $action->execute(...)) — открытия идут в цикле без общей транзакции, без пред-проверки пулов и без отката. Если на N-м шаге кейс деактивируется (исчерпан уровень) — предыдущие списания и скины остаются, юзер получает «3 из 5» и сырую ошибку. Повторно деактивировать живой кейс ради демонстрации не стал. Ждём решение: Вариант 1 (частичный возврат) / Вариант 2 (полный откат «5 или 0»).
⚠ Долг прода · №8
Свежий cases:doctor: 16 нарушений в 10 кейсах — без изменений с 28.05, не чинили. 6 рабочих кейсов с пустым уровнем «Армейское» — «спящие мины» под тот же баг №3. Кейс CS:GO Weapon Case 2 (id 24) до сих пор деактивирован с прошлого прогона.
UI-замечания (перенос)
№5 скидка премиума на бэке есть, но в UI цена показана полная — юзер не видит, что применилась скидка. №9 «Продать всё» в один клик без подтверждения. №1 welcome-модалка перекрывает витрину, мобильная шапка съедает ~30% экрана. №7 опечатка «3 бесплатных открытий». Все — косметика/UX, требуют визуальной перепроверки при фиксе.
Не входило
№10 «Вывод скина в Steam» — стоп-точка по задаче «до вывода». №1/№7/№9 в части UI — без новых скринов (бэк-логика №7 ранее пройдена, код не менялся).
🛠 Фиксы готовы (ветка feat/cases-atomicity-safeguard, прод не тронут)
№3 мульти-открытие переведено на «5 или 0» (одна транзакция, полный откат) + страховка cases:guard-empty-levels каждые 10 мин. №5 скидка премиума показана на карточке (было→стало, бейдж −X%). №9 подтверждение перед «Продать всё». №7 склонение через pluralRu. №1 welcome-модалка не перекрывает витрину + меньше мобильный отступ шапки. Тесты: 288 зелёных (вкл. AtomicMultiOpenTest, GuardEmptyCaseLevelsTest). Деплой и скрины — на этапе верификации по «ок».

Ручной прогон админки · 29.05.2026 · создание кейсов

Прошёл путь админа в браузере на изолированной базе: вход → список кейсов → форма создания → редактирование кейса (фонд, уровни, скины) → доктор кейсов. Цель — убедиться, что все элементы интерфейса и создание кейсов живые.

Что проверил

✓ Вход и навигация
Логин админа работает, левое меню полное (Кейсы, Финансы, Маркетплейс, Поддержка, Пользователи, Премиум, Система), табы раздела кейсов на месте (Кейсы, Категории, Темы ИИ-обложек, Каталог скинов, Рулетка, Ивенты, Доктор).
✓ Список кейсов
Открывается, фильтры (категория, активность, на главной, цена, даты) и карточки кейсов рендерятся.
✓ Форма создания
Все поля на месте: название, цена, категория, порядок, описание, тип кейса (обычный/бесплатный/лимитированный), обложка, видимость. Создание всех трёх типов покрыто авто-тестом FilamentCreateCaseTypesTest (зелёный).
✓ Редактирование (фонд/уровни/скины)
Виджет фонда (текущий фонд, пополнено, выдано, доступные уровни) + relation-менеджеры «Уровни и предметы», журнал движений по фонду, корректировки — всё рендерится. Это место, где заводятся скины уровней.
✓ Доктор кейсов
Работает, по демо-кейсу справедливо показал «Фонд равен нулю» (у свежего кейса без пополнений фонд 0).
Ошибки
Ни одной 500-ошибки, ни одной JS-ошибки за весь проход (ловил оба типа). Вся админка дополнительно покрыта авто-тестом FilamentAdminSmokeTest.
Мелочь
Дашборд (Инфопанель) показывается пустым — виджетов нет. Не ошибка; уточнить, нужны ли там виджеты.
список кейсов
Список кейсов + фильтры
форма создания
Форма создания кейса
редактирование
Фонд + уровни/скины
доктор
Доктор кейсов

Сквозное создание кликами · уточнённый прогон

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

✓ Кейс — кликами
Заполнил форму (название, цена, порядок, тип = нативный select, категория = Filament-select) → «Создать» → редирект на /edit, в БД создан кейс с моими значениями.
✓ Уровень — кликами
В relation-менеджере «Уровни» → «Добавить уровень» → заполнил (номер, название «Армейское», шанс 100%, порог) → «Создать». Уровень в БД.
✓ Скины — кликами
«Добавить скины из каталога» → карточки каталога с «Добавить в уровень» → добавил 2 скина на уровень. Записи CaseItem в БД.
✓ Активация и открытие
После приведения к согласованным числам активировал кейс («Сохранено», is_active=1) и открыл его — выпал скин, списано по цене. Полный путь рабочий.
🛡 Находка — стражи экономики (это хорошо)
Активировать кривой кейс админ НЕ может, система ловит с понятным сообщением: (1) «Порог гарантированного уровня должен быть ровно 50% от цены кейса»; (2) «Цена скина должна совпадать с порогом уровня». То есть несбалансированный/эксплойтный кейс не создать вслепую — это плюс.
Ошибки интерфейса
За все клики — ни одной 500 и ни одной JS-ошибки.
Мелочь UX
На странице «Добавить скины из каталога» уже добавленный скин остаётся в списке (можно добавить тот же дважды) — стоит либо убирать добавленные, либо предупреждать о дубле.
форма заполнена
Форма создания, заполнена кликами
добавить скины
Добавление скинов из каталога
активный кейс
Кейс активирован и открывается

Тестовые юзеры, которых заведу для прогона

Сценарии для прогона

brat-test-midпрогнал ✓ с замечаниями

1. Витрина /cases — открывается, лента живая, фильтры работают

  1. Логинюсь под mid, открываю https://skins-arena.club/cases.
  2. Прокручиваю категории сверху, проверяю что они переключают сетку кейсов.
  3. Применяю фильтр по цене «до 500₽» → меняю на «до 2000₽».
  4. Навожу мышь на live-ленту вверху — она останавливается. Кликаю по выпавшему скину — переход к кейсу.
Что проверяю: сетка не ломается, цены актуальны, скидка премиума НЕ показывается (юзер не премиум), live-лента не лагает.

Результат прогона · 28.05.2026 08:24 МСК

Что работает
Витрина грузится, в строку 6 кейсов на 1440 px, LIVE-лента с выпавшими скинами активна, категории «Все / Демо / Официальные CS2» переключают сетку, есть фильтр «Доступные по моему балансу», поиск, цена от/до, сортировка.
Замечание 1
У свежесозданного юзера сразу поверх витрины висит welcome-модалка «Начните прямо сейчас → Пополните баланс» — закрывает экран. Обходится установкой welcome_modal_seen_at. Александр сказал: это пока не трогаем.
Замечание 2
Мобильная вёрстка (390 px) — шапка раздела «Кейсы — Открывайте кейсы и получайте скины CS2» съедает ~30% первого экрана до начала LIVE-ленты. Александр: «полный пиздец с мобилкой, но её пока не трогаем».
Замечание 3
Гость на /cases видит не список кейсов, а hero-блок главной с CS2-баннером и статистикой. Это намеренное поведение или роутинг? Зафиксировал.
desktop 1440 mid
1440 px · mid
mobile 390 mid
390 px · mid
desktop 1440 guest
1440 px · гость
brat-test-midпрогнал ✓ пройден

2. Открытие одного кейса с анимацией

  1. Открываю кейс среднего диапазона (~150-300₽).
  2. Нажимаю «Открыть 1». Смотрю анимацию рулетки.
  3. Дожидаюсь результата, проверяю что баланс списан ровно на цену кейса, в инвентарь добавлен скин.
Что проверяю: цена списания соответствует, скин действительно «Доступен» в инвентаре, выпавший предмет совпадает с тем что показала рулетка.

Результат прогона · 28.05.2026 08:30 МСК

Кейс
CS:GO Weapon Case 2 (id=24), цена 100,00 ₽
До открытия
Баланс 1 500,00 ₽
Действие
Клик «Открыть ×1 за 100,00 ₽» → анимация рулетки → результат
После открытия
Баланс 1 400,00 ₽ (списано ровно 100₽). Создан case_opening #178. Выпал предмет ценой 30,00 ₽, статус in_inventory.
Транзакция
Запись в журнале: тип «Кейс», ID 747, статус «Успешно», сумма −100,00 ₽, связано с case_opening #178, остаток баланса 1 400,00 ₽.
Вывод
Атомарность работает: ровное списание, корректная связь транзакции с открытием, скин действительно появился в инвентаре в нужном статусе.
страница кейса
Страница кейса до клика
анимация рулетки
Анимация рулетки (баланс уже 1400₽)
инвентарь
Инвентарь /profile/case-inventory
транзакции
/profile/transactions — связь с #178
brat-test-whaleпрогнал ✗ найден баг UX

3. Мульти-открытие (на кейсе доступны ×1/×2/×3/×5 — кнопки ×10 нет, проверял ×5)

  1. Выбрал ×5 → кнопка стала «Открыть ×5 за 500,00 ₽», итого 500₽.
  2. Нажал «Открыть ×5 за 500,00 ₽».
  3. Через ~2 секунды вылез красный поп-ап «Ошибка — Кейс деактивирован и недоступен для открытия».
  4. Проверил баланс и инвентарь.
Что проверял: атомарность мульти-открытия. По ТЗ должно быть «5 списаний или 0».

Результат прогона · 28.05.2026 08:52 МСК · ⚠ НЕАТОМАРНО

Кейс
CS:GO Weapon Case 2 (id=24), цена 100₽, режим ×5 → ожидалось списание 500₽
До открытия
Баланс 50 000 ₽, в инвентаре 1 предмет (от сценария 2).
После «ошибки»
Баланс 49 700 ₽ — то есть списали 300₽ (3 кейса из 5). В инвентаре 3 предмета вместо ожидаемых 5+1.
Корень в коде
app/Actions/Cases/OpenCaseAction.php:233 — при выпадении уровня редкости с пустым пулом призов вызывается deactivateCaseForEmptyLevel. Защита фонда. На 4-м открытии в серии ×5 этот уровень исчерпался → кейс автоматически деактивирован → 4-я и 5-я попытки получили 422. Юзеру показан общий поп-ап «Кейс деактивирован», без объяснения что 3 уже открылись.
Что плохо
1) Списание неатомарное — «5 или 0» нарушено. 2) Юзер не понимает что произошло: видит ошибку, баланс уменьшился, в инвентаре больше скинов чем «купил». 3) Возможно деньги за 4-ю и 5-ю операцию НЕ списались (надо проверить — счёт сошёлся: 50000−300=49700, всё-таки списали ровно за 3).
Хорошо
Защита фонда сработала корректно — кейс реально деактивировался, не дал выдать «несуществующий» предмет. Логика правильная, проблема в обёртке мульти-открытия.
Предложение
Завернуть multi-open в одну транзакцию с пред-проверкой: «есть ли в каждом уровне минимум N предметов под количество кликов». Если на каком-то этапе сорвалось — откатить целиком и сказать «Не можем открыть 5 кейсов: один из уровней исчерпан. Открыто частично — 3 шт, оставшиеся не списаны». Сейчас наоборот: пишет «деактивирован», деньги ушли частично, скины пришли частично, юзер в недоумении.
x5 выбран
Выбран ×5 за 500₽
ошибка
Ошибка «Кейс деактивирован»
инвентарь
Инвентарь: 3 предмета вместо 5+1
brat-test-bonusпрогнал ✓ пройден

4. Открытие за бонусный баланс (бонус списывается раньше основного)

  1. 4а. У юзера 0₽ основной, 2000₽ бонусный. Открываю кейс за 100₽ — должно списать с бонуса.
  2. 4б. Меняю состояние: 500₽ основной, 50₽ бонус. Открываю кейс за 100₽ — должно списать 50 с бонуса (полностью) + 50 с основного.
Что проверяю: порядок списания (бонус → основной), правильность сумм, отображение в кабинете.

Прогон 4а · 28.05.2026 09:22 МСК · ✓ ПРОЙДЕН

Кейс
Operation Phoenix Weapon Case (id=28), цена 100₽
До
Основной 0,00 ₽, Бонус 2000,00 ₽
Действие
Открыл кейс ×1
После
Основной 0,00 ₽ (НЕ изменился), Бонус 1900,00 ₽ (списано ровно 100 с бонуса). Создан case_opening #182, выпал предмет 50₽.
Транзакция
type=case_open, balance_type=bonus, amount=−100,00 ₽, balance_after=1900,00 ₽, source_balance=bonus.
Вывод
Бонус списывается первым. Идеально.
до
До открытия (0 + 2000)
после
После (0 + 1900)
транзакции
Транзакция с bonus

Прогон 4б · 28.05.2026 09:23 МСК · ✓ ПРОЙДЕН (split spend)

Кейс
Operation Phoenix Weapon Case (id=28), цена 100₽
До
Основной 500,00 ₽, Бонус 50,00 ₽ — бонуса меньше чем цена кейса
Действие
Открыл кейс ×1
После
Основной 450,00 ₽ (списано 50), Бонус 0,00 ₽ (бонус выпит полностью). Создан case_opening #183.
Транзакции
Две записи: −50,00 с bonus, −50,00 с main. Обе связаны с тем же case_opening #183. Идемпотент-ключ один на серию (case-open-uuid-bonus и case-open-uuid-main).
Вывод
Split-spend атомарный. Сначала бонус вычерпывается до нуля, остаток добирается с основного. Соответствует ТЗ §8.2 «бонусный списывается раньше основного».
до
До (500 + 50)
после
После (450 + 0)
транзакции
Две транзакции по 50₽
brat-test-premiumпрогнал ✓ с замечанием UI

5. Скидка премиума на цену кейса

  1. 5а. Открыл «Красный Кейс» за 100₽ под премиум-юзером. По ТЗ §13.3 — должно списать 90₽ (скидка 10% для кейсов ≤500₽).
  2. 5б. Временно поменял цену «Огненного Кейса» на 800₽, открыл. Должно списать 760₽ (скидка 5% для >500₽). После теста цену вернул.
Что проверяю: правильное вычисление скидки, отображение цены «было/стало», списание реальное по скидочной цене.

Прогон 5а · 28.05.2026 09:24 МСК · ✓ ПРОЙДЕН на бэке

Кейс
Красный Кейс (id=31), цена 100₽
До
Основной 1500,00 ₽
После
Основной 1410,00 ₽ — списано ровно 90,00 ₽ (100 − 10%). Создан case_opening #184, API вернул cost=90.00.
Замечание UI
На карточке кейса показано «Цена открытия: 100,00 ₽», «Открыть ×1 за 100,00 ₽», «Итого: 100,00 ₽» — скидка не упомянута. Юзер ждёт списания 100, а получает 90 — без объяснения. Должно быть «100₽ было → 90₽ премиум».
кейс 100 без указания скидки
UI: 100,00 ₽ (скидка не показана)
баланс
Баланс после: 1410₽ (списано 90)
транзакции
Транзакция −90₽

Прогон 5б · 28.05.2026 09:25 МСК · ✓ ПРОЙДЕН на бэке

Кейс
Огненный Кейс (id=35), цена временно поднята до 800₽, после теста возвращена в 200₽
До
Основной 1410,00 ₽
После
Основной 650,00 ₽ — списано ровно 760,00 ₽ (800 − 5%). Создан case_opening #185, API вернул cost=760.00.
Замечание UI
Та же история — UI показывает 800₽ без упоминания скидки. На карточке «Открыть ×1 за 800,00 ₽», по факту списали 760.
Общий вывод
Логика скидок премиума на бэке работает корректно: 10% до 500₽ включительно, 5% выше. Но UI не показывает что скидка применяется — это явный пробел в восприятии Премиума, надо чинить отдельно.
кейс 800 без указания скидки
UI: 800,00 ₽ (скидка не показана)
баланс
Баланс после: 650₽ (списано 760)
транзакции
Транзакция −760₽
brat-test-poorпрогнал ✓ пройден

6. Недостаточно средств — корректный отказ

  1. Юзер с 0₽, открываю «Красный Кейс» (100₽).
Что проверяю: понятное сообщение «недостаточно средств», ссылка на пополнение, нет 500-ошибки, баланс не уходит в минус.

Результат прогона · 28.05.2026 09:28 МСК · ✓ ПРОЙДЕН

Состояние
Основной 0₽, бонус 0₽, кейс 100₽
UI
«Доступно: 0,00 ₽». Внизу красная плашка: «100,00 ₽ — не хватает 100,00 ₽. Недостаточно средств для открытия кейса. Пополни баланс — и сразу сможешь открыть.» Кнопка «Открыть» неактивна (попытка кликнуть таймаутится).
Бэк
API /cases/31/open в логе не зафиксирован — то есть UI защита делает работу до запроса, бэк не дёргается. Баланс не меняется.
Вывод
Понятная подсказка, фронт сам блокирует, бэк не нагружается. Хорошо.
нет денег
Плашка «не хватает 100,00 ₽»
баланс
Баланс остался 0₽
brat-test-midпрогнал ✓ пройден

7. Бесплатный кейс по условию пополнения

  1. Выдал юзеру 3 бесплатных открытия eSports 2013 Case (id=22, тип «free», free_openings_per_grant=3, free_min_deposit_amount=10₽).
  2. Открыл кейс 3 раза подряд → проверил что баланс не меняется.
  3. 4-й заход → проверил что бесплатная квота исчерпана и режим переключился.
Что проверяю: условия доступности, баланс не списывается, переход в платный режим после исчерпания квоты.

Результат прогона · 28.05.2026 09:30 МСК · ✓ ПРОЙДЕН

До 3 открытий
Зелёная плашка «Бесплатный кейс. У тебя 3 открытия — баланс не спишется». Цена открытия: Бесплатно. Баланс 1400₽.
3 открытия
case_opening #186, #187, #188 — все с cost=0.00. Баланс остался 1400₽ (не изменился ни на рубль). В инвентарь добавилось 3 скина.
После исчерпания
Карточка перерисовалась: серая плашка «Бесплатный кейс. Пополни баланс от 10,00 ₽ — получишь 3 бесплатных открытий». Цена открытия: 100,00 ₽. Кнопка «Открыть» снова стала платной.
UX-нитпик
В подсказке мелкая опечатка: «получишь 3 бесплатных открытий» — правильно «3 бесплатных открытия» (родительный → винительный). Минор.
Вывод
Логика бесплатных кейсов и квот работает корректно — учёт remaining, переход на платный при исчерпании, понятная подсказка про пополнение.
3 открытия доступны
Зелёная плашка, «Бесплатно»
квота исчерпана
Серая плашка, цена снова 100₽
admin (через php artisan cases:doctor)прогнал ✓ с накопленным долгом

8. Призовой фонд — защитные инварианты и доктор кейсов

  1. Запустил php artisan cases:doctor на проде — диагностика инвариантов всех кейсов.
  2. Сверил с таблицей case_invariant_violations — логом нарушений (что и когда срабатывало).
Что проверяю: работает ли защита (deactivateCaseForEmptyLevel — уже видел в сценарии 3), и нет ли накопленного долга в проде.

Результат прогона · 28.05.2026 09:33 МСК · ✓ ЛОГИКА РАБОТАЕТ, но в проде накоплено 16 нарушений

Доктор кейсов
Команда cases:doctor отрабатывает корректно, проходит по всем 11 активным кейсам, печатает разметку «активен/неактивен», список нарушений по типам.
Лог нарушений
В таблице case_invariant_violations сейчас 16 записей. Самые старые с 7 мая, последние с 16 мая. Логика записи работает — каждое срабатывание защиты пишется с привязкой к кейсу, правилу, payload и времени.
Тип 1 — «уровень без свободных скинов»
6 активных кейсов в проде имеют исчерпанный уровень редкости (обычно «Армейское» — самый дешёвый, быстрее всех заканчивается). Кейс пока активен, но как только юзеру выпадет этот уровень — кейс автоматически деактивируется (мы видели это в сценарии 3 живьём).
Тип 2 — «Журнал ≠ фонд»
10 кейсов имеют расхождение: сумма по case_fund_ledger больше чем поле current_fund в cases в ~1.5-2 раза. Похоже на «ежедневное списание 5% дома» из ТЗ §9.4.4 — фонд списывается, но в журнал это списание не пишется. Доктор справедливо ругается, но это не критичная ошибка.
Что хорошо
Защита есть и работает, факт нарушения логируется. Доктор виден админу одной командой. cases:doctor + cases:simulate — два мощных инструмента для разбора инцидентов.
Что плохо
В проде уже 6 кейсов с пустыми уровнями — это «спящие мины». Юзер открывает, всё хорошо, ему рандомом выпадает этот уровень — и кейс гасится. Нужна процедура: либо доктор уведомляет админа (Telegram/email) когда появляется новое нарушение, либо команда «cases:rebalance» которая пополняет/перебалансирует пулы предметов.
Что не успел в этом прогоне
Не симулировал руками сценарий «фонд < 2× стоимости приза» — для чистого теста надо специально подрезать current_fund. Но логика этого уже в коде есть (CaseFundInvariantException), и доктор её сейчас не отлавливает в проде. Если важно — прогоню отдельно с искусственным сценарием.
▶ eSports 2013 Case (id=22) [активен]
  [ОШИБКА] Уровень без свободных скинов: «Армейское»: 0/3
  [ОШИБКА] Уровень без свободных скинов: «Запрещённое»: 0/3
  [ВНИМАНИЕ] Журнал ≠ фонд: Σ журнала = 655.00 ₽ (фонд = 412.19 ₽)

▶ Operation Phoenix Weapon Case (id=28) [активен]
  [ОШИБКА] Уровень без свободных скинов: «Армейское»: 0/4
  [ВНИМАНИЕ] Журнал ≠ фонд: Σ журнала = 640.00 ₽ (фонд = 377.25 ₽)

[…ещё 8 кейсов с похожими нарушениями…]

Итого: найдено нарушений: 16 в 10 кейсах.

Полный вывод: screens/cases/s8-doctor-output.txt

brat-test-midпрогнал ✓ с UX-замечанием

9. Инвентарь — статусы скина «Доступен / Использован / Продан»

  1. В инвентаре было 4 скина (3×50₽ от eSports 2013 + 1×30₽ от CS:GO Weapon Case 2 — всего 180₽).
  2. Кликнул «Продать все доступные» (кнопка справа сверху).
  3. Проверил баланс, фильтр «Проданные», транзакции.
  4. Использование в апгрейде — отложено в раздел 10 (там отдельный план тестов апгрейда).
Что проверяю: массовая продажа, корректность сумм, изменение статусов, видимость в фильтре «Проданные».

Результат прогона · 28.05.2026 09:33 МСК · ✓ ПРОЙДЕН с UX-замечанием

До
Баланс 1400₽. В инвентаре 4 скина (статус in_inventory): #186, #187, #188 (по 50₽), #178 (30₽). Стоимость инвентаря 180₽.
Действие
Один клик на «Продать все доступные» → модалка «Готово — Продано предметов: 4».
После
Баланс 1580₽ (1400 + 180, точно). В инвентаре 0 предметов со статусом in_inventory, 4 со статусом sold. Сводка: «Выиграно всего: 180₽».
Транзакции
4 записи типа case_sell: +50₽ (#188), +50₽ (#187), +50₽ (#186), +30₽ (#178). Каждая со ссылкой на свой case_opening.
Замечание UX
Кнопка «Продать все доступные» срабатывает в один клик без подтверждения. Никакого «Уверен? Будет продано 4 скина на сумму 180₽». На дешёвых тестовых это безболезненно, но юзер с инвентарём из дорогих ножей за 5000₽ может одним промахом всё спустить. Минимум — добавить модалку «Подтвердить продажу всех X предметов на Y ₽ за реальные деньги?».
Что не успел
Одиночная продажа конкретного скина (там может быть модалка с подтверждением — стоит отдельно проверить) и использование в апгрейде (это перейдёт в test-plan-upgrade).
инвентарь до
До: 4 скина в инвентаре
модалка продано
«Продано предметов: 4»
баланс
Баланс 1580₽ (+180)
фильтр проданные
Фильтр «Проданные»
транзакции
4 транзакции case_sell
brat-test-midне прогонял

10. Вывод скина в Steam (с подбором замены)

  1. В инвентаре выбираю скин, который точно сейчас отсутствует на нашем маркете.
  2. Жму «Вывести в Steam».
  3. Должно открыться окно подбора замены: показывает несколько лотов в диапазоне ±2-10% от цены.
  4. Выбираю один из вариантов, подтверждаю.
Что проверяю: окно подбора корректно показывает варианты, кнопка «Вывести» создаёт запись WithdrawalRequest, баланс на месте до подтверждения от модератора.
Скрины: окно подбора замены, состояние запроса в админке (модератор видит).

Что мне нужно от тебя по этому разделу

Назад к общему плану