not->toContain('not->toContain("'border-amber-500/70' => \$serverStatusType === 'warning'") ->toContain('@if ($serverStatusType !== \'success\')') ->toContain('data-tooltip="{{ $serverStatus }}"') ->toContain('toBe(1) ->and($serverIndex) ->toContain("&& (\$server->proxy->status !== 'running' || \$server->hasCurrentTraefikOutdatedInfo())") ->toContain('$sentinelNeedsAttention = $isReady && $server->isSentinelEnabled() && ! $server->isSentinelLive()') ->toContain("\$proxyNeedsAttention || \$sentinelNeedsAttention => 'warning'") ->toContain("\$isReady => 'success'") ->toContain("\$isTransferredAway || \$server->settings->force_disabled => 'error'") ->toContain("default => 'error'") ->not->toContain("server.statusType === 'warning' ? 'border-amber-500/70'") ->toContain('x-show="server.statusType !== \'success\'"') ->toContain(':data-tooltip="server.status"') ->toContain(':aria-label="`Server status: ${server.status}`"'); }); test('dashboard server cards warn when proxy or sentinel needs attention', function () { $dashboard = file_get_contents(resource_path('views/livewire/dashboard.blade.php')); expect($dashboard) ->toContain("\$proxyNeedsAttention = \$server->proxySet() && (\$server->proxy->status !== 'running' || \$server->hasCurrentTraefikOutdatedInfo())") ->toContain('$sentinelNeedsAttention = $server->isSentinelEnabled() && ! $server->isSentinelLive()') ->toContain("\$proxyNeedsAttention || \$sentinelNeedsAttention => ['Attention required', 'warning']"); }); test('server status summary uses warning indicators for proxy updates and sentinel outages', function () { $summary = file_get_contents(resource_path('views/components/server/status-summary.blade.php')); expect($summary) ->toContain('$server->hasCurrentTraefikOutdatedInfo()') ->toContain('$proxyStatusLabel = match (true)') ->toContain("\$proxyConfigurationPending => 'Restart required'") ->toContain("\$traefikUpdateAvailable => 'Update available'") ->toContain('{{ $proxyStatusLabel }}') ->toContain("'bg-warning' => \$proxyNeedsAttention && (\$proxyUpdateAvailable") ->toContain("'bg-warning' => \$sentinelNeedsAttention") ->not->toContain("\$server->isSentinelLive() ? 'bg-success' : 'bg-error'"); }); test('server table keeps status text without a badge', function () { $serverIndex = file_get_contents(resource_path('views/livewire/server/index.blade.php')); expect($serverIndex) ->toContain('') ->toContain('text-[11px] font-medium') ->not->toContain(''); });