Files
portal/app/tests/Feature/ClientSms
Дмитрий 6d52f390a0 feat(смс-клиент): кнопка «включить имя обратно» — списывает и включает сразу
Строка листа 4.5, Этап 4 Task 4.

Раньше имя, которое клиент выключил сам или которое отключили за долг, можно
было вернуть только одним способом: заказать заново, снова приложив документы и
снова дождавшись согласования у МТС. Теперь у клиента есть кнопка: она берёт
плату за месяц вперёд и включает имя сразу — решение владельца. Денег не хватает
— портал говорит, СКОЛЬКО именно не хватает, и не трогает ни имя, ни кошелёк.
Документы заново не запрашиваются: заявка уже согласована, сканы на месте.

Ключ списания у кнопки тот же, что у ночного работника, поэтому за один
календарный месяц имя оплачивается один раз — кто бы его ни включал. Сумма
нигде не зашита, берётся из карточки имени и вырастет сама, когда подключим
остальных операторов.

Плана оказалось мало ЧЕТЫРЕЖДЫ, и все четыре раза — про деньги.

В-143: план не смотрел, КТО отключил имя. Имя отключает и владелец руками, и оно
у МТС погашено; клиент нажал бы кнопку, портал взял бы с него плату, а имя не
работало бы. Это ровно то, что работнику запретили в прошлой задаче. Кнопка
теперь смотрит в ту же графу «почему отключено» и при включении её гасит.

В-144: слово «отменено» стоит и у имени, которое когда-то работало, и у заявки,
которую клиент отозвал ещё на согласовании. Вторую план включил бы как рабочее
имя и списал за неё деньги — за имя, которого у оператора нет. Отличаю по
отметке согласования: её ставит ровно одно место, кнопка одобрения у владельца.

В-145: имя, оплаченное вперёд, план списал бы второй раз — а при пустом кошельке
ещё и отказался бы включить имя, за которое уже заплачено. Смотрю на «оплачено
до»: срок в будущем — включаю без списания и срок не двигаю.

В-146: план отдавал экрану решение «показывать ли кнопку». После первых двух
правок правило перестало быть про один признак, и оно переехало на сервер: адрес
имени отдаёт готовые «можно ли включить» и «сколько спишется», экран не считает.

Отдельно В-148 — его поймал только браузер, мимо прошли 12 серверных и 66
фронтовых тестов. Экран писал «плата за текущий срок уже внесена» у имени,
отключённого за долг с апреля. Ноль в сумме приходил не от оплаты, а от
песочницы — одно значение с двумя разными причинами. Развёл: сумма считается
только по сроку оплаты, песочница гасит сам денежный шаг.

Проверено вырезанием, восемь вырезов, все вернуты, каждый покраснел там, где
вырезан: проверка денег, отбор по причине отключения, отметка согласования,
ветка «оплачено вперёд», ключ месяца, песочница в решении о сумме, кнопка на
экране, учёт «можно ли» на экране.

Живой прогон под боевой ролью crm_app_user, семь нажатий: 50 ₽ при плате 100 —
отказ «Не хватает 50.00 ₽», не тронуто ничего; пополнил до 550 — имя работает,
списано ровно 100 ₽, оплачено до 29.08; имя владельца при 5000 ₽ — отказ, деньги
целы; неодобренная заявка при 5000 ₽ — отказ, деньги целы; второе нажатие —
«имя уже работает», в движениях одно списание. Пара на пометку клиента: без неё
то же нажатие не делает ничего, с ней — списывает и включает.

Живой прогон в браузере: у имени с долгом видна кнопка и строка «Спишется
2500.00 ₽ — плата за имя за месяц»; нажал — карточка стала «Ваше имя: MYSHOP
(активно)». У имени, отключённого владельцем, кнопки нет вовсе.

Прогоны: клиентские СМС 275/275 (11 пачек, все с первой попытки), приём лидов
17/17, фронт 1683 + 3 пропущенных, phpstan ровно 2 чужие давние, pint чисто.
Проверка типов фронта: 5 ошибок в 5 файлах вместо прежних 8 в 6 — задал явный
тип ответа в спеке, который и так правил, и три давние ошибки ушли вместе с
моими. Схема базы не менялась, миграций нет.
2026-07-29 12:49:47 +03:00
..