Files
portal/app/tests/Unit/Advertising/ModerationReasonTest.php
T

47 lines
2.8 KiB
PHP
Raw Normal View History

<?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вторая");
});