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:
SitiWeb
2026-04-30 02:10:15 +02:00
parent 39bdba2dfb
commit c94d3f85e8
36 changed files with 7445 additions and 467 deletions

View File

@@ -38,7 +38,8 @@
<div class="font-medium">3. De betekenis wordt omgezet naar een zoekcode</div>
<p class="text-sm text-slate-600">
De app maakt van de nette vraag een soort getallen-code. Die code beschrijft niet de exacte
woorden, maar waar de vraag over gaat. Daardoor kan "mail doet het niet" ook artikelen vinden
woorden, maar waar de vraag over gaat. Daardoor kan "mail doet het niet" ook artikelen
vinden
waarin "e-mail storing" staat.
</p>
</div>
@@ -67,7 +68,8 @@
<div class="font-medium">7. Er komt een advies of een melding</div>
<p class="text-sm text-slate-600">
Als het artikel een snelantwoord heeft, gebruikt de app dat direct. Anders maakt de AI een
korte conceptreactie. Als er geen passend artikel is, schrijft de app geen klantantwoord maar
korte conceptreactie. Als er geen passend artikel is, schrijft de app geen klantantwoord
maar
meldt hij dat de kennisbank iets mist.
</p>
</div>
@@ -147,13 +149,15 @@
<h3 class="font-semibold">Hulpmiddelen en allowed actions</h3>
<p class="mt-2 text-sm text-slate-600">
Sommige antwoorden worden beter als de app iets kan nakijken. Daarom kan een artikel aangeven welke
hulpmiddelen toegestaan zijn. De AI mag zo'n hulpmiddel alleen voorstellen; de applicatie controleert
hulpmiddelen toegestaan zijn. De AI mag zo'n hulpmiddel alleen voorstellen; de applicatie
controleert
daarna zelf of het echt mag.
</p>
<div class="mt-4 rounded border p-3">
<div class="font-medium">Nu beschikbaar: domain_inf</div>
<p class="mt-1 text-sm text-slate-600">
Hiermee kan de app domeininformatie ophalen. Dat kan alleen als het artikel `domain_inf` toestaat,
Hiermee kan de app domeininformatie ophalen. Dat kan alleen als het artikel `domain_inf`
toestaat,
als de vraag een domeinnaam bevat, en als er API-gegevens op het ticket zijn opgeslagen.
</p>
</div>
@@ -164,9 +168,12 @@
<div class="mt-4 space-y-3 text-sm text-slate-600">
<div><span class="font-medium text-slate-900">Embedding:</span> een betekenis-code van tekst.</div>
<div><span class="font-medium text-slate-900">Chunk:</span> een klein stukje van een artikel.</div>
<div><span class="font-medium text-slate-900">Confidence:</span> hoe zeker de AI is van zijn keuze.</div>
<div><span class="font-medium text-slate-900">Knowledge gap:</span> de kennisbank heeft waarschijnlijk nog geen goed artikel voor deze vraag.</div>
<div><span class="font-medium text-slate-900">Toolcall:</span> een gecontroleerde actie waarmee de app extra informatie kan ophalen.</div>
<div><span class="font-medium text-slate-900">Confidence:</span> hoe zeker de AI is van zijn keuze.
</div>
<div><span class="font-medium text-slate-900">Knowledge gap:</span> de kennisbank heeft
waarschijnlijk nog geen goed artikel voor deze vraag.</div>
<div><span class="font-medium text-slate-900">Toolcall:</span> een gecontroleerde actie waarmee de
app extra informatie kan ophalen.</div>
</div>
</div>
</section>
@@ -180,7 +187,8 @@
</div>
<div class="rounded border p-3">
<div class="font-medium">App zoekt</div>
<p class="mt-1 text-sm text-slate-600">De app zoekt kaartjes over mail, domeinen en instellingen.</p>
<p class="mt-1 text-sm text-slate-600">De app zoekt kaartjes over mail, domeinen en instellingen.
</p>
</div>
<div class="rounded border p-3">
<div class="font-medium">AI kiest</div>
@@ -188,7 +196,8 @@
</div>
<div class="rounded border p-3">
<div class="font-medium">Support controleert</div>
<p class="mt-1 text-sm text-slate-600">Support ziet het advies, de reden en de gebruikte stappen.</p>
<p class="mt-1 text-sm text-slate-600">Support ziet het advies, de reden en de gebruikte stappen.
</p>
</div>
</div>
</section>