toContain('class="mx-auto mt-6 flex w-full max-w-3xl flex-col items-center gap-3"'); }); test('server validation opens in the centered process dialog', function () { $view = file_get_contents(resource_path('views/livewire/boarding/index.blade.php')); expect($view) ->toContain('') ->toContain('@click="processDialogOpen = true"') ->not->toContain(''); }); test('DigitalOcean is available as an onboarding server provider', function () { $view = file_get_contents(resource_path('views/livewire/boarding/index.blade.php')); expect($view) ->toContain('') ->toContain('') ->toContain('Deploy servers directly from your DigitalOcean account.') ->toContain(''); }); test('server type details are shown on the relevant cards instead of a technical details panel', function () { $view = file_get_contents(resource_path('views/livewire/boarding/index.blade.php')); expect($view) ->toContain('aria-label="About this machine"') ->toContain('aria-label="About remote servers"') ->toContain('Not recommended for production workloads due to resource contention.') ->toContain('Any SSH-accessible server, including cloud VPS, bare metal, and self-hosted infrastructure.') ->not->toContain('') ->not->toContain('') ->not->toContain(''); }); test('server type cards use the standard card hover treatment', function () { $view = file_get_contents(resource_path('views/livewire/boarding/index.blade.php')); $hoverClasses = 'shadow-sm transition-all hover:-translate-y-px hover:border-neutral-300 hover:shadow-md'; preg_match_all('/min-h-36[^\"]*'.preg_quote($hoverClasses, '/').'/', $view, $matches); expect($matches[0])->toHaveCount(5) ->and(substr_count($view, 'group relative cursor-pointer'))->toBe(5) ->and($view)->not->toContain('hover:border-coollabs/35 hover:bg-coollabs/[0.03]') ->and($view)->not->toContain('dark:hover:border-warning/25 dark:hover:bg-warning/[0.04]'); }); test('existing SSH key selection does not show a redundant value tooltip', function () { $view = file_get_contents(resource_path('views/livewire/boarding/index.blade.php')); expect($view)->toContain('label="Existing SSH key" :options="$privateKeyOptions" :tooltip="false"'); }); test('server connection step does not render a technical details panel', function () { $view = file_get_contents(resource_path('views/livewire/boarding/index.blade.php')); expect($view) ->not->toContain('') ->not->toContain('') ->not->toContain(''); }); test('project step does not render a technical details panel', function () { $view = file_get_contents(resource_path('views/livewire/boarding/index.blade.php')); expect($view) ->not->toContain('') ->not->toContain('') ->not->toContain(''); });