Этап 5, Task 1. Кода, который что-то меняет в базе или в деньгах, здесь нет —
только новая способность канала и её читатель для МТС.
Что появилось:
- SmsDeliveryState — словарь судеб ПОРТАЛА (везу / доставлено / не доставлено /
оператор не отправил). Один дом на все каналы: у МТС свои слова, у следующего
оператора будут другие, а экран и деньги обязаны говорить одним языком.
- SmsDeliveryReport — что канал рассказал про одно сообщение.
- SmsDeliveryReporter — НЕОБЯЗАТЕЛЬНАЯ способность канала. Отдельно от SmsProvider
намеренно: канал, умеющий только отправлять, остаётся годным каналом. Когда у
Т2, Мегафона и Билайна появятся кабинеты, их файл реализует этот разъём — и
журнал, экран, деньги, итоги не тронутся ни строчкой (решение владельца 31.07).
- MtsSmsProvider::fetchDelivery — читатель, до 1000 номеров сообщений за запрос.
Форма ответа взята из ЖИВОЙ пробы 30.07 (журнал В-211), а НЕ из документации МТС:
там описан вход по логину-паролю (events_info), а мы ходим по токену и получаем
data[].statuses[]. Тест на выдуманной форме охранял бы выдумку (В-72).
Незнакомое слово оператора НЕ угадывается: судьба остаётся пустой, слово уходит в
журнал. Угадать значило бы соврать про деньги — за «не доставлено» клиенту
возвращаются рубли.
Цена МТС (cost) сохраняется как есть, в рубли не переводится: единицы поля
неизвестны, выдумывать ответ внешней стороны запрещено.
Проверено: 7 тестов зелёные, оба выреза покраснили ровно те тесты, что должны
(подмена NotSent на «не доставлено» и угадывание незнакомого слова). Соседи —
36/36. phpstan — ровно 2 чужие давние, pint чисто.