toContain('not->toContain('label="Proxy" status="Running"') ->not->toContain('label="Sentinel"') ->and($summaryView) ->toContain("['Attention required', 'warning']") ->toContain("['Ready', 'success']") ->toContain('System status') ->toContain('aria-label="Refresh status"') ->toContain('toContain(":class=\"open && 'rotate-180'\"") ->toContain('wire:click="checkProxyStatus"') ->toContain('wire:loading.class="animate-spin" wire:target="checkProxyStatus"') ->toContain('name="refresh" class="size-3"') ->not->toContain('Refreshing status') ->not->toContain('') ->toContain("href=\"{{ route('server.proxy', ['server_uuid' => \$server->uuid]) }}\"") ->toContain("href=\"{{ route('server.sentinel', ['server_uuid' => \$server->uuid]) }}\"") ->toContain('@click="open = false" role="menuitem"'); expect($badgeView) ->not->toContain('text-neutral-500') ->not->toContain('dark:text-neutral-400') ->toContain('toContain("merge(['type' => 'button'])"); }); it('uses the branded input focus state for the server filter', function () { $navbarView = file_get_contents(resource_path('views/livewire/server/navbar.blade.php')); expect($navbarView) ->toContain('placeholder="Filter servers…"') ->toContain('class="input h-7!') ->toContain('not->toContain('after("@teleport('#resource-action-hud-slot')")->before('@endteleport')->toString(); expect($desktopActions) ->toContain('Restart Proxy') ->toContain('Stop Proxy') ->toContain('Start Proxy') ->toContain('not->toContain('Traefik Dashboard') ->not->toContain('Refresh Proxy Status') ->not->toContain('resource-heading-overflow-separator') ->not->toContain('toBeLessThan(strpos($desktopActions, 'id="server-desktop-actions"')); expect($advanced) ->toContain('Advanced') ->toContain('name="grid"') ->toContain('Traefik Dashboard') ->toContain('name="external-link" class="size-3! opacity-70"') ->toContain('class="flex size-4 shrink-0 items-center justify-center"') ->toContain('Refresh Proxy Status'); expect($overflow) ->toContain('Actions') ->toContain('listbox-panel'); });