Ablehnungskategorien live aus der DB (rejection_categories)

/richtlinien rendert jetzt alle aktiven Kategorien aus der neuen
rejection_categories-Tabelle (stabiler code als Anker, public_label/desc,
optionale Beispiele) statt der statischen K1-K6-Liste. Kategorien werden
nie geloescht, nur deaktiviert; neue Kategorien erscheinen ohne
Textaenderung und ohne neue AGB-Version (AGB par. 7 Abs. 3 verweist nicht
abschliessend). Seeder legt K1-K6 idempotent an; Versionszeile der Seite
kommt aus legal_documents. Go-Live-Checkliste um beide Seeder ergaenzt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-06 09:25:16 +00:00
parent 7510e7633e
commit 0bec71ffa5
8 changed files with 213 additions and 18 deletions

View file

@ -1,5 +1,7 @@
<?php
use App\Models\RejectionCategory;
use Database\Seeders\RejectionCategorySeeder;
use Tests\TestCase;
dataset('static pages', [
@ -75,12 +77,25 @@ test('the terms render the b2b version with cancellation and archive rules', fun
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('Kein Pressecharakter / Spam')
->assertSeeText('Rechtswidrige Inhalte')
->assertSeeText('Testkategorie aus der Datenbank')
->assertSee('id="K1"', false)
->assertSee('id="K6"', 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 () {