Files
TicketAssistent/tests/Unit/SupportReplyServiceTest.php
SitiWeb c94d3f85e8 Add unit and feature tests for ticket processing and article management
- Implement Fake repositories and services for testing purposes.
- Create tests for Article API including creation, validation, and listing.
- Develop ProcessTicketJobFlowTest to validate ticket processing logic.
- Add QuickReplyAdminTest for creating and updating quick replies.
- Implement TicketAndArticleModelTest to ensure proper cascading deletes and credential encryption.
- Create TicketIngestionTest for ticket creation and job dispatching.
- Add TicketShowPageTest to verify rendering of quick replies and tool calls.
- Implement unit tests for ClassifierPromptBuilder, EmbeddingService, LlmJsonDecoder, QuickReplyResolver, SupportReplyService, TicketResultPayloadBuilder, TicketToolCallService, and ToolCallRequestValidator.
2026-04-30 02:10:15 +02:00

69 lines
2.1 KiB
PHP

<?php
namespace Tests\Unit;
use App\Models\Article;
use App\Models\Ticket;
use App\Services\AppSettingsService;
use App\Services\Llm\LlmClientInterface;
use App\Services\SupportReplyService;
use App\Services\TicketProcessingLoggerService;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\Fakes\FakeLlmClient;
use Tests\Fakes\FakeTicketProcessingLoggerService;
use Tests\TestCase;
class SupportReplyServiceTest extends TestCase
{
use RefreshDatabase;
public function test_it_returns_llm_response_when_available(): void
{
$llm = new FakeLlmClient;
$llm->responses = ['1. Doe X'];
$service = new SupportReplyService(
$this->fakeSettings(),
$llm,
new FakeTicketProcessingLoggerService
);
$ticket = Ticket::query()->create(['message' => 'vraag', 'normalized_message' => 'vraag']);
$article = Article::query()->create(['title' => 'DNS', 'content' => 'steps']);
$reply = $service->build($ticket, $article, 'relevant');
$this->assertSame('1. Doe X', $reply);
$this->assertStringContainsString('Gebruikersvraag (genormaliseerd): vraag', $llm->generatedPrompts[0]['prompt']);
}
public function test_it_falls_back_when_llm_returns_empty(): void
{
$llm = new FakeLlmClient;
$llm->responses = [''];
$service = new SupportReplyService(
$this->fakeSettings(),
$llm,
new FakeTicketProcessingLoggerService
);
$ticket = Ticket::query()->create(['message' => 'vraag']);
$article = Article::query()->create(['title' => 'DNS', 'content' => 'steps']);
$reply = $service->build($ticket, $article, 'relevant');
$this->assertStringContainsString('Gebruik het kennisbankartikel', $reply);
}
private function fakeSettings(): AppSettingsService
{
return new class extends AppSettingsService {
public function getPrompt(string $key, ?string $default = null): ?string
{
return 'Prompt';
}
};
}
}