blade( '' ); $html->assertSee('No tags yet') ->assertSee('Add a tag to group deployments.') ->assertSee('empty-state', false) ->assertSee('border-dashed', false) ->assertSee('min-h-80', false); }); it('renders empty states flush with no outer inset inside settings sections', function () { $html = $this->blade( <<<'BLADE' BLADE ); $html->assertSee('is-flush', false) ->assertSee('empty-state', false) ->assertSee('No scheduled tasks'); $css = file_get_contents(resource_path('css/app.css')); expect($css) ->toContain('.application-settings-section-body.is-flush .empty-state') ->toContain('.application-settings-section-body:has(> .empty-state:only-child)') ->toContain('.application-settings-section > .empty-state') ->toMatch('/\.application-settings-section-body\.is-flush \.empty-state[\s\S]*?margin:\s*0/'); }); it('insets empty states nested inside a flush settings section wrapper', function () { $css = file_get_contents(resource_path('css/app.css')); expect($css)->toContain('.application-settings-section-body.is-flush > div:has(> .empty-state:only-child)'); }); it('insets the backup executions empty state from the table header', function () { $view = file_get_contents(resource_path('views/livewire/project/database/backup-executions.blade.php')); expect($view)->toMatch('/@empty\s*
\s*toContain('grid-template-columns: 6.5rem minmax(7rem, 1fr) 7rem 5rem 4rem minmax(8rem, 1fr) 5rem;') ->and($view) ->toContain('title="Download backup" aria-label="Download backup"') ->toContain('') ->toContain('title="Delete backup" aria-label="Delete backup"') ->toContain(''); }); it('uses the compact resource table styling for backup executions', function () { $view = file_get_contents(resource_path('views/livewire/project/database/backup-executions.blade.php')); $css = file_get_contents(resource_path('css/app.css')); expect($view) ->toContain('class="data-table deployment-table-scroll"') ->toContain('data-table-header backup-executions-table-grid h-auto rounded-none px-4 py-2.5 text-[11px]') ->toContain('data-table-row backup-executions-table-grid min-h-14 px-4 py-2.5') ->toContain('flex min-h-11 items-center justify-between border-t') ->and($css) ->toMatch('/\.backup-executions-table-grid\s*\{[^}]*gap:\s*0\.75rem;[^}]*min-width:\s*49rem;/'); }); it('renders compact size without the full-page min height class', function () { $html = $this->blade( '' ); $html->assertSee('No cloud tokens') ->assertSee('min-h-44', false) ->assertDontSee('min-h-80', false); }); it('renders action content from both contents and actions slots', function () { $contents = $this->blade( '' ); $contents->assertSee('From contents'); $actions = $this->blade( '' ); $actions->assertSee('From actions'); });