Files
portal/app/tests/Feature/ClientTg/RobotResultTest.php
T
Дмитрий d07fec8c0b сырое слово кабинета доезжает до журнала портала
Портал писал «кабинет показал статус словом, которого разборщик не знает» — и самого
слова в записи не было: readCampaignStats отдавал наверх только разобранный статус, а
сырой текст ряда выбрасывал. 08.08.2026 из-за этого слово потерялось трижды подряд, и
узнать его удалось единственным способом — сходив в кабинет глазами.

Сборка ответа вынесена в чистую otvetPoRyadu: сам поход в кабинет тестом не поймать,
а сборку — можно. Текст ряда обрезается до 300 знаков, в журнал не должен уехать роман.

Заодно RobotResult читает признак stopped — он понадобится режиму остановки.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 20:35:29 +03:00

69 lines
2.3 KiB
PHP

<?php
use App\Services\ClientTg\RobotResult;
it('пробрасывает строковый actualCostRub из JSON робота', function () {
$r = RobotResult::fromRobotJson([
'ok' => true,
'matched' => 437,
'actualCostRub' => '201.60',
]);
expect($r->actualCostRub)->toBe('201.60');
expect($r->ok)->toBeTrue();
});
it('приводит числовой actualCostRub к строке', function () {
$r = RobotResult::fromRobotJson([
'ok' => true,
'actualCostRub' => 201.6,
]);
expect($r->actualCostRub)->toBe('201.6');
expect($r->actualCostRub)->not->toBeNull();
});
it('без поля actualCostRub оставляет null и не ломает остальные поля', function () {
$r = RobotResult::fromRobotJson([
'ok' => true,
'matched' => 12,
'campaignId' => '555',
]);
expect($r->actualCostRub)->toBeNull();
expect($r->ok)->toBeTrue();
expect($r->matched)->toBe(12);
expect($r->campaignId)->toBe('555');
});
it('failed() не выставляет actualCostRub', function () {
$r = RobotResult::failed('таймаут');
expect($r->actualCostRub)->toBeNull();
expect($r->ok)->toBeFalse();
expect($r->reason)->toBe('таймаут');
});
it('конструктор без actualCostRub даёт null по умолчанию', function () {
$r = new RobotResult(ok: true);
expect($r->actualCostRub)->toBeNull();
});
test('сырое слово кабинета доезжает до портала', function () {
// 🔴 Без него запись «кабинет показал незнакомое слово» приходит БЕЗ самого слова.
$r = RobotResult::fromRobotJson([
'ok' => true,
'campaignId' => '2237821',
'status' => null,
'rowText' => '06.08 Telegram по своей базе Посмотреть настройки Приостановлена',
]);
expect($r->rowText)->toContain('Приостановлена');
});
test('признак остановки читается', function () {
expect(RobotResult::fromRobotJson(['ok' => true, 'stopped' => true])->stopped)->toBeTrue();
expect(RobotResult::fromRobotJson(['ok' => true])->stopped)->toBeFalse();
});