Files
jabali-panel/tests/Feature/Filament/AdminServerStatusRefreshTest.php
2026-02-02 03:11:45 +02:00

96 lines
2.7 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Feature\Filament;
use App\Filament\Admin\Pages\ServerStatus;
use App\Models\ServerProcess;
use App\Services\Agent\AgentClient;
use Illuminate\Foundation\Testing\RefreshDatabase;
use ReflectionProperty;
use Tests\TestCase;
class AdminServerStatusRefreshTest extends TestCase
{
use RefreshDatabase;
public function test_load_metrics_flushes_cached_table_records(): void
{
$page = app(ServerStatus::class);
$agent = new class extends AgentClient
{
private int $calls = 0;
public function metricsOverview(): array
{
return [];
}
public function metricsDisk(): array
{
return ['data' => []];
}
public function metricsNetwork(): array
{
return ['data' => []];
}
public function metricsProcesses(int $limit = 15, string $sortBy = 'cpu'): array
{
$this->calls++;
$command = $this->calls === 1 ? 'first-cmd' : 'second-cmd';
return [
'data' => [
'total' => 1,
'running' => 1,
'top' => [
[
'pid' => $this->calls,
'user' => 'root',
'command' => $command,
'cpu' => 1.2,
'memory' => 0.3,
],
],
],
];
}
};
$this->setProtectedProperty($page, 'agent', $agent);
$page->loadMetrics();
$this->assertDatabaseHas('server_processes', [
'command' => 'first-cmd',
]);
$this->setProtectedProperty($page, 'cachedTableRecords', ServerProcess::latestBatch()->get());
$page->loadMetrics();
$this->assertDatabaseHas('server_processes', [
'command' => 'second-cmd',
]);
$this->assertNull($this->getProtectedProperty($page, 'cachedTableRecords'));
}
private function setProtectedProperty(object $object, string $property, mixed $value): void
{
$reflection = new ReflectionProperty($object, $property);
$reflection->setAccessible(true);
$reflection->setValue($object, $value);
}
private function getProtectedProperty(object $object, string $property): mixed
{
$reflection = new ReflectionProperty($object, $property);
$reflection->setAccessible(true);
return $reflection->getValue($object);
}
}