Этап 3 «Время и цена», Task 1. Закрыты строки листа Н.3 и 3.7.
Поведение рассылки ещё НЕ меняется — этим займётся Task 2. Сейчас заведено то,
на чём оно будет стоять, и заведено так, чтобы правило нельзя было размножить.
1. Справочник часовых поясов (RegionTimezoneMap). 89 субъектов РФ в том же порядке,
что и справочник имён; сторож-тест сверяет составы, чтобы справочники не разъехались.
Отдельный тест на ловушку: код субъекта у нас НЕ автомобильный — 77 это Тюменская
область, а Москва 82. Неизвестный код и непонятная строка от ДаДаты дают «не знаю»,
а не ноль: ноль означал бы Гринвич, то есть тихую подмену Камчатки Лондоном.
2. Единственный дом правила 10–20 (SmsQuietHours): можно ли отдавать сейчас, когда
откроется окно, осмысленно ли такое окно. Границы читаются из настроек один раз
на объект — на 20 000 номеров иначе был бы 20 000-й запрос к базе.
3. Границы окна в общих настройках: миграция добавляет две колонки со значениями 10 и 20.
Защита от повторного запуска пошаговая — прерванная ручная подача SQL на бою не должна
оставить вторую колонку несозданной (урок В-80). Прав не требует: колонки наследуют
привилегии таблицы. Запись схемы v9.12.
4. Админка «СМС»: два поля «Отправляем с / по» и объяснение, что часы — по местному времени
получателя и клиент их не настраивает. Окно наизнанку «с 20 до 10» это отправка всю ночь,
поэтому сервер его не принимает и говорит человеку почему. Проверяется ПОЛУЧИВШЕЕСЯ окно,
а не присланные поля: правка одной границы тоже могла его вывернуть — журнал В-91.
Прогоны: СМС 186/186 (было 171, 15 новых тестов), приём лидов 17/17, фронт 1658 зелёных
и 3 намеренно пропущенных, phpstan по своим файлам 0, pint чисто, проверка типов без новых ошибок.
Вырезанием проверено дважды: убрал проверку окна — покраснели два теста; убрал чтение границ
с сервера на экране — покраснел фронтовый тест. Живьём: окно 11–19 сохранилось и пережило
перезагрузку, «с 20 до 10» отклонено с человеческим текстом, вернул 10–20.
Попутный урок В-92: два моих же новых теста сперва зеленели по неверной причине — ругань
приходила за пропущенные поля платы за имя, а не за окно. Теперь тесты шлют полное письмо
и проверяют, за какое поле ругаются.