47 lines
2.8 KiB
PHP
47 lines
2.8 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
use App\Services\Advertising\ModerationReason;
|
||
|
|
use Tests\TestCase;
|
||
|
|
|
||
|
|
uses(TestCase::class);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Отписки Яндекса на ОБОИХ языках. Русские были известны с 28.07.2026, английские
|
||
|
|
* намерены 01.08.2026 на бою: без заголовка языка Яндекс отвечает по-английски, и эта
|
||
|
|
* строка уезжала клиенту в переписку как «пояснение модератора».
|
||
|
|
*
|
||
|
|
* Второй заслон нужен даже после того, как язык стали спрашивать: заголовок могут
|
||
|
|
* перестать слушать, и тогда клиент снова получит машинную строку вместо честного
|
||
|
|
* «выясняем». Один замок на дверь, второй на калитку.
|
||
|
|
*/
|
||
|
|
it('treats a brush-off as no reason at all, in either language', function (string $otpiska) {
|
||
|
|
expect(ModerationReason::forRejected($otpiska))->toBe(ModerationReason::PRICHINA_NEIZVESTNA);
|
||
|
|
})->with([
|
||
|
|
'русская с точкой' => "\nОтклонено на модерации.",
|
||
|
|
'русская без точки' => 'Отклонено на модерации',
|
||
|
|
'русская про ожидание' => 'Ожидает модерации.',
|
||
|
|
'английская с точкой' => "\nRejected at moderation.",
|
||
|
|
'английская без точки' => 'Rejected at moderation',
|
||
|
|
'английская про ожидание' => 'Pending moderation.',
|
||
|
|
'пусто' => '',
|
||
|
|
]);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 🔴 Настоящую причину не трогаем ни на каком языке. Ровно ради неё весь разбор
|
||
|
|
* и затевался: её приносит робот-разведчик с экрана кабинета, и она обязана доехать
|
||
|
|
* до клиента слово в слово, со всеми абзацами.
|
||
|
|
*/
|
||
|
|
it('passes a real moderator explanation through untouched', function () {
|
||
|
|
$nastoyashchaya = "Нет предупреждения: финансовые услуги\n\n"
|
||
|
|
.'Объявление о финансовых услугах должно содержать наименование юридического лица.';
|
||
|
|
|
||
|
|
expect(ModerationReason::forRejected($nastoyashchaya))->toBe($nastoyashchaya);
|
||
|
|
});
|
||
|
|
|
||
|
|
/** Края обрезаем, внутренние переносы нет — модератор перечисляет претензии абзацами. */
|
||
|
|
it('trims the edges but keeps the paragraphs', function () {
|
||
|
|
expect(ModerationReason::normalize("\n первая\n\nвторая \n"))->toBe("первая\n\nвторая");
|
||
|
|
});
|