Files
WMS/Modules/Helpdesk/Tests/Feature/TicketFirstResponseSlaFilesTest.php
T
2026-06-23 13:39:02 +01:00

61 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Modules\Helpdesk\Tests\Feature;
use PHPUnit\Framework\TestCase;
final class TicketFirstResponseSlaFilesTest extends TestCase
{
/**
* Public replies must satisfy the first-response SLA instead of only incrementing the counter.
*/
public function test_public_response_updates_first_response_sla_state(): void
{
$servicePath = dirname(__DIR__, 2) . '/Services/SlaService.php';
self::assertFileExists($servicePath);
$service = file_get_contents($servicePath);
self::assertIsString($service);
self::assertStringContainsString('public function recordPublicResponse(Ticket $ticket, User $actor): void', $service);
self::assertStringContainsString('markFirstResponse($ticket, $respondedAt, $actor)', $service);
self::assertStringNotContainsString('(int) $ticket->user_id !== (int) $actor->id', $service);
}
/**
* Existing tickets with public comments but a missing first_response_at are repaired on display.
*/
public function test_ticket_show_synchronises_first_response_from_existing_public_comments(): void
{
$componentPath = dirname(__DIR__, 2) . '/Livewire/TicketShow.php';
$servicePath = dirname(__DIR__, 2) . '/Services/SlaService.php';
$component = file_get_contents($componentPath);
$service = file_get_contents($servicePath);
self::assertIsString($component);
self::assertIsString($service);
self::assertStringContainsString('syncFirstResponseFromComments($ticket)', $component);
self::assertStringContainsString("where('is_internal', false)", $service);
self::assertStringContainsString("whereNull('tombstoned_at')", $service);
}
/**
* The SLA card should show an accurate response state instead of Awaiting response after public replies exist.
*/
public function test_sla_card_has_clear_responded_and_awaiting_public_reply_states(): void
{
$viewPath = dirname(__DIR__, 2) . '/Resources/views/livewire/ticket-show.blade.php';
$view = file_get_contents($viewPath);
self::assertIsString($view);
self::assertStringContainsString('Responded', $view);
self::assertStringContainsString('Awaiting public reply', $view);
self::assertStringNotContainsString("?? 'Awaiting response'", $view);
}
}