Files
portal/app/tests/Feature/Bot/ChatToursTest.php
T

55 lines
2.9 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
use App\Models\KnowledgeChunk;
use App\Services\Bot\BotAnswerService;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Http;
uses(RefreshDatabase::class);
/**
* Экскурсии «Показать на портале» 13.07.2026 были ВЫКЛЮЧЕНЫ: ссылки уходили не по теме
* вопроса (совпадало одно случайное слово — бот приписывал экскурсию по уведомлениям
* к реплике «первое сообщение подряд»). Правило переписано, экскурсии включены обратно.
*
* Теперь их держат два условия, и оба обязательны:
* 1. Вопрос по теме статьи (KnowledgeSearch::isOnTopic — тесты в ToursRelevanceTest).
* 2. Клиент пишет ИЗ КАБИНЕТА. Гостю с лендинга ссылка внутрь кабинета бесполезна:
* он там ещё не зарегистрирован, и показывать ему нечего.
*
* Этот сторож не даёт незаметно вернуть ссылки гостям.
*/
beforeEach(function () {
config()->set('services.bot.tours_enabled', true);
config()->set('app.url', 'https://lk.liderra.ru');
config()->set('services.yandexgpt', [
'api_key' => 'k', 'folder_id' => 'f', 'model' => 'yandexgpt-lite/latest',
'endpoint' => 'https://llm.api.cloud.yandex.net/foundationModels/v1/completion',
'timeout_seconds' => 8,
]);
Http::fake([
'llm.api.cloud.yandex.net/*' => Http::response([
'result' => ['alternatives' => [['message' => ['role' => 'assistant', 'text' => 'Проект создаётся в разделе «Проекты».']]]],
]),
]);
KnowledgeChunk::create([
'source_path' => 'help/create.md', 'title' => 'Как создать проект', 'tour' => 'create-project',
'topics' => 'создать проект, новый проект', 'chunk_index' => 0,
'content' => 'Проект создаётся в разделе «Проекты», кнопка «Создать».',
]);
});
it('клиенту из кабинета экскурсия по теме предлагается', function () {
$answer = app(BotAnswerService::class)->answer('как создать проект?', [], fromPortal: true);
expect($answer->text)->toContain('https://lk.liderra.ru/?tour=create-project');
});
it('гостю с лендинга экскурсию не предлагаем — ему нечего показывать в кабинете', function () {
$answer = app(BotAnswerService::class)->answer('как создать проект?', [], fromPortal: false);
expect($answer->text)->not->toContain('?tour=');
});