seed(RolesAndPermissionsSeeder::class); }); function makeAdminForShow(): User { $admin = User::factory()->create(['is_active' => true]); $admin->assignRole('admin'); return $admin; } test('admin show rendert Rejection-Banner mit letzter Begründung', function () { /** @var TestCase $this */ $admin = makeAdminForShow(); $this->actingAs($admin); $pr = PressRelease::factory()->create([ 'status' => PressReleaseStatus::Rejected->value, ]); PressReleaseStatusLog::query()->create([ 'press_release_id' => $pr->id, 'changed_by_user_id' => $admin->id, 'from_status' => PressReleaseStatus::Review->value, 'to_status' => PressReleaseStatus::Rejected->value, 'reason' => 'Werbliche Sprache, bitte überarbeiten.', 'source' => 'admin', 'created_at' => now(), ]); Livewire::test('admin.press-releases.show', ['id' => $pr->id]) ->assertSee('Diese Pressemitteilung wurde abgelehnt') ->assertSee('Werbliche Sprache, bitte überarbeiten.'); }); test('admin show zeigt zugeordnete Pressekontakte', function () { /** @var TestCase $this */ $admin = makeAdminForShow(); $this->actingAs($admin); $company = Company::factory()->presseecho()->create([ 'name' => 'Muster GmbH', 'email' => 'firma@example.test', 'phone' => '+49 30 1234567', 'website' => 'https://muster.example.test', ]); $contact = Contact::factory()->for($company)->create([ 'first_name' => 'Max', 'last_name' => 'Mustermann', 'responsibility' => 'Pressesprecher', 'email' => 'presse@example.test', 'portal' => $company->portal->value, ]); $pr = PressRelease::factory()->create(['company_id' => $company->id]); $pr->contacts()->sync([$contact->id]); Livewire::test('admin.press-releases.show', ['id' => $pr->id]) ->assertSee('Firma & Pressekontakte') ->assertSee('Muster GmbH') ->assertSee('firma@example.test') ->assertSee('+49 30 1234567') ->assertSee('https://muster.example.test') ->assertSee('Zugeordnete Pressekontakte') ->assertSee('Max Mustermann') ->assertSee('Pressesprecher') ->assertSee('presse@example.test'); }); test('admin show zeigt Hinweis bei fehlenden Kontakten', function () { /** @var TestCase $this */ $admin = makeAdminForShow(); $this->actingAs($admin); $pr = PressRelease::factory()->create(); Livewire::test('admin.press-releases.show', ['id' => $pr->id]) ->assertSee('Dieser Pressemitteilung ist kein Pressekontakt zugeordnet.'); }); test('admin show zeigt Scheduling-Termin im Review-Workflow', function () { /** @var TestCase $this */ $admin = makeAdminForShow(); $this->actingAs($admin); $pr = PressRelease::factory()->create([ 'status' => PressReleaseStatus::Review->value, 'scheduled_at' => '2026-06-15 10:00:00', ]); // Die App läuft in Europe/Berlin; 10:00 wird unverändert angezeigt. Livewire::test('admin.press-releases.show', ['id' => $pr->id]) ->assertSee('Geplante Veröffentlichung') ->assertSee('15.06.2026 10:00'); }); test('admin show zeigt Embargo-Info im Published-Workflow', function () { /** @var TestCase $this */ $admin = makeAdminForShow(); $this->actingAs($admin); $pr = PressRelease::factory()->create([ 'status' => PressReleaseStatus::Published->value, 'published_at' => '2026-06-01 10:00:00', 'embargo_at' => now()->addDays(10), ]); Livewire::test('admin.press-releases.show', ['id' => $pr->id]) ->assertSee('Sperrfrist bis'); }); test('admin show verlinkt Firma, Autor und Firmen-Benutzer', function () { /** @var TestCase $this */ $admin = makeAdminForShow(); $this->actingAs($admin); $company = Company::factory()->presseecho()->create(['name' => 'Muster GmbH']); $author = User::factory()->create(['name' => 'Anna Autorin']); $coEditor = User::factory()->create(['name' => 'Carl Co-Editor']); $company->users()->attach($author->id, ['role' => 'owner']); $company->users()->attach($coEditor->id, ['role' => 'member']); $pr = PressRelease::factory()->create([ 'company_id' => $company->id, 'user_id' => $author->id, ]); Livewire::test('admin.press-releases.show', ['id' => $pr->id]) ->assertSee('Benutzer mit Zugriff') ->assertSee('Carl Co-Editor') ->assertSeeHtml(route('admin.companies.show', $company->id)) ->assertSeeHtml(route('admin.users.show', $author->id)) ->assertSeeHtml(route('admin.users.show', $coEditor->id)); }); test('admin show zeigt Autor im Status-Verlauf-Grid', function () { /** @var TestCase $this */ $admin = makeAdminForShow(); $this->actingAs($admin); $author = User::factory()->create(['name' => 'Anna Autorin']); $pr = PressRelease::factory()->create(['user_id' => $author->id]); Livewire::test('admin.press-releases.show', ['id' => $pr->id]) ->assertSee('Anna Autorin'); });