['de/impressum', 'Impressum'], 'datenschutz' => ['de/datenschutz', 'Datenschutzerklärung'], 'agb' => ['de/agb', 'Allgemeine Geschäftsbedingungen'], 'faq' => ['de/faq', 'Häufig gestellte Fragen'], 'hilfe' => ['de/hilfe', 'Hilfe-Center'], 'api' => ['de/api', 'API-Dokumentation'], 'richtlinien' => ['de/richtlinien', 'Veröffentlichungsrichtlinien'], 'melden' => ['de/melden', 'Inhalte melden oder Änderungen beantragen'], ]); test('static pages render in the editorial design', function (string $path, string $heading) { /** @var TestCase $this */ $response = $this->get("https://businessportal24.test/{$path}"); $response->assertSuccessful() ->assertSeeText($heading) // Editorial-Shell (Token aus den neuen Komponenten) statt altem Theme. ->assertSee('bg-bg', false) // Altes Theme darf nicht mehr gerendert werden. ->assertDontSee('gradient-hero'); })->with('static pages'); test('the faq page lists questions and links to support', function () { /** @var TestCase $this */ $this->get('https://businessportal24.test/de/faq') ->assertSuccessful() ->assertSeeText('Wie veröffentliche ich meine erste Pressemitteilung?') ->assertSeeText('Frage nicht gefunden?') // Kontakt läuft nach dem Rückbau der Kontakt-Seite über das // Support-Postfach und die Kündigung über die eigene Seite. ->assertSee('mailto:', false) ->assertSee(route('kuendigung', ['edition' => 'de']), false); }); test('the retired contact and about pages redirect to the edition home', function (string $path) { /** @var TestCase $this */ $this->get('https://businessportal24.test/de/'.$path) ->assertStatus(301) ->assertRedirect('https://businessportal24.test/de'); })->with(['kontakt', 'ueber-uns']); test('the imprint shows the real provider data instead of placeholders', function () { /** @var TestCase $this */ $this->get('https://businessportal24.test/de/impressum') ->assertSuccessful() ->assertSeeText('adametz.media') ->assertSeeText('Kevin Adametz') ->assertSeeText('33739 Bielefeld') ->assertSeeText('DE298729654') // Zentrale Rechts-E-Mail (config/legal.php) auf allen Domains. ->assertSeeText('info@pressekonto.com') ->assertDontSeeText('info@businessportal24.com') // DDG statt TMG; keine erfundene GmbH/Musterstraße mehr. ->assertSeeText('§ 5 DDG') ->assertDontSeeText('Business Portal GmbH') ->assertDontSeeText('Musterstraße'); }); test('the terms render the b2b version with cancellation and archive rules', function () { /** @var TestCase $this */ $this->get('https://pressekonto.test/de/agb') ->assertSuccessful() ->assertSeeText('Kein Widerrufsrecht (B2B)') ->assertSeeText('richtet sich ausschließlich an Unternehmer') ->assertSeeText('Depublikation, Änderungen, Meldeverfahren') // Alte Platzhalter-AGB (30-Tage-Frist, Business Portal GmbH) sind weg. ->assertDontSeeText('Frist von 30') ->assertDontSeeText('Business Portal GmbH'); }); test('the guidelines list the rejection categories with anchors', function () { /** @var TestCase $this */ // Kategorien kommen live aus rejection_categories (E3) — neue Zeilen // erscheinen ohne Textänderung, deaktivierte verschwinden. $this->seed(RejectionCategorySeeder::class); RejectionCategory::query()->where('code', 'K6')->update(['active' => false]); RejectionCategory::factory()->create([ 'code' => 'K7', 'public_label' => 'Testkategorie aus der Datenbank', 'sort_order' => 70, ]); $this->get('https://presseecho.test/de/richtlinien') ->assertSuccessful() ->assertSeeText('So funktioniert die Prüfung') ->assertSeeText('Rechtswidrige Inhalte') ->assertSeeText('Testkategorie aus der Datenbank') ->assertSee('id="K1"', false) ->assertSee('id="K7"', false) // Deaktivierte Kategorien werden nicht mehr gerendert. ->assertDontSeeText('Kein Pressecharakter / Spam'); }); test('the reporting page separates free legal paths from the paid takedown service', function () { /** @var TestCase $this */ $this->get('https://businessportal24.test/de/melden') ->assertSuccessful() ->assertSeeText('Rechtswidrige Inhalte oder Rechteverletzungen melden') ->assertSeeText('Eigene personenbezogene Daten entfernen lassen') ->assertSeeText('Freiwillige Entfernung rechtmäßiger Inhalte') ->assertSeeText('Ausübung gesetzlicher Rechte'); }); test('the privacy policy renders the real v03 content with host-specific blocks', function () { /** @var TestCase $this */ // Spoke: Portal-Bausteine (Medienprivileg, Änderungslinks), kein Stripe-Block. $this->get('https://presseecho.test/de/datenschutz') ->assertSuccessful() ->assertSeeText('adametz.media') ->assertSeeText('info@pressekonto.com') ->assertSeeText('Hetzner Online GmbH') ->assertSeeText('Medienprivileg') ->assertSeeText('Änderungslinks für Pressekontakte') ->assertDontSeeText('Zahlungsabwicklung mit Stripe') // Alter Platzhalter (Google Analytics gibt es nicht) ist weg. ->assertDontSeeText('Google Analytics'); // Hub: Kundenkonto-/Stripe-Bausteine, keine Portal-Bausteine. $this->get('https://pressekonto.test/de/datenschutz') ->assertSuccessful() ->assertSeeText('Kundenkonto und Registrierung auf dem Hub') ->assertSeeText('Zahlungsabwicklung mit Stripe') ->assertSeeText('gewerblichen oder selbständigen beruflichen Tätigkeit') ->assertDontSeeText('Medienprivileg'); }); test('the help center shows quick links and topics', function () { /** @var TestCase $this */ $this->get('https://businessportal24.test/de/hilfe') ->assertSuccessful() ->assertSeeText('Hilfe-Themen') ->assertSee(route('faq'), false) ->assertSee(route('veroeffentlichen'), false); });