clean( 'Человек дал согласие оператору. Нет, вас не оштрафуют. Пишите на support@liderra.ru.', context: 'Человек дал согласие оператору.' ); expect($answer)->not->toContain('не оштрафуют') ->and($answer)->toContain('Человек дал согласие оператору') ->and($answer)->toContain('support@liderra.ru'); }); it('вырезает «мы гарантируем» и «не нарушаем закон»', function () { $guard = app(AnswerGuard::class); expect($guard->clean('Мы гарантируем, что человек живой. Контакт свежий.', context: 'Контакт свежий.')) ->not->toContain('гарантируем') ->and($guard->clean('Нет, мы не нарушаем закон. Данные передают операторы.', context: 'Данные передают операторы.')) ->not->toContain('не нарушаем'); }); it('вырезает цену, которой нет в наших статьях', function () { // Живая выдумка модели: «при 100+ заявках цена 450 ₽». Такого порога у нас нет. $guard = app(AnswerGuard::class); $answer = $guard->clean( 'Цена падает с объёмом. При 100 заявках она станет 450 ₽. Точную цену видно на плитке баланса.', context: 'Цена зависит от объёма: ступени от 500 ₽. Точную цену видно на плитке баланса.' ); expect($answer)->not->toContain('450') ->and($answer)->toContain('Точную цену видно на плитке баланса'); }); it('цену ИЗ статьи не трогает', function () { $guard = app(AnswerGuard::class); $answer = $guard->clean( 'Подбор конкурентов стоит 300 ₽.', context: 'Цена подбора — 300 ₽ за запуск.' ); expect($answer)->toContain('300'); }); it('если после чистки ничего не осталось — отдаёт пусто, бот позовёт специалиста', function () { $guard = app(AnswerGuard::class); expect($guard->clean('Нет, вас не оштрафуют.', context: 'Что-то про заявки.'))->toBe(''); });