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.
This commit is contained in:
68
tests/Unit/SupportReplyServiceTest.php
Normal file
68
tests/Unit/SupportReplyServiceTest.php
Normal file
@@ -0,0 +1,68 @@
|
||||
<?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';
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user