user = User::factory()->create(['email_verified_at' => now()]); $this->server = Server::factory()->create(['name' => 'detail-srv']); $this->site = Site::factory()->create([ 'server_id' => $this->server->id, 'domain' => 'detail-test.de', 'wp_version' => '6.5', 'php_version' => '8.3', ]); }); it('redirects guests', function () { get(route('sites.show', $this->site))->assertRedirect(route('login')); }); it('renders the overview tab by default', function () { actingAs($this->user)->get(route('sites.show', $this->site)) ->assertStatus(200) ->assertSeeText('detail-test.de') ->assertSeeText('Übersicht') ->assertSeeText('WordPress') ->assertSeeText('PHP / ini') ->assertSeeText('Datei-Manager') ->assertSeeText('Cronjobs') ->assertSeeText('Logs') ->assertSeeText('Installation') ->assertSeeText('Schnellaktionen'); }); it('switches between all six tabs', function () { foreach (['wordpress', 'php', 'files', 'cron', 'logs', 'overview'] as $tab) { livewire('pages.sites.show', ['site' => $this->site]) ->call('setTab', $tab) ->assertSet('tab', $tab); } }); it('lists site crons in the cron tab', function () { Cron::factory()->create([ 'site_id' => $this->site->id, 'name' => 'Test Cronjob XYZ', ]); livewire('pages.sites.show', ['site' => $this->site]) ->call('setTab', 'cron') ->assertSeeText('Test Cronjob XYZ'); }); it('toggles maintenance mode and persists', function () { expect($this->site->maintenance_mode)->toBeFalse(); livewire('pages.sites.show', ['site' => $this->site]) ->call('toggleMaintenance'); expect($this->site->fresh()->maintenance_mode)->toBeTrue(); });