KI-Kennzeichnung: 2 Optionen im Submit-Modal + Labels auf Detailseite

Submit-Modal auf zwei Auswahloptionen reduziert (kein Label vs.
"Ganz oder ueberwiegend mit generativer KI erstellt"); alle vier
Enum-Werte bleiben fuer API/Bestand gueltig und mappen per formOption()
auf die zwei Gruppen. Oeffentliche Detailseite rendert jetzt Text-Label
("KI-generiert: Nach Angaben ...") und Bild-Badge (KI-generiert/
KI-bearbeitet, abgedunkelter Hintergrund) — fehlte dort bisher komplett.
Bildnachweis-Vorschlag ohne "Foto:"-Praefix (stand sonst doppelt).
Einreich-Toast + FAQ: automatische Pruefung in Minuten statt 24 h.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Kevin Adametz 2026-07-10 16:51:23 +00:00
parent c8836564e9
commit dc2a3443c1
13 changed files with 172 additions and 50 deletions

View file

@ -1,5 +1,7 @@
<?php
use App\Enums\AiImageDeclaration;
use App\Enums\AiTextDeclaration;
use App\Enums\CompanyType;
use App\Enums\Portal;
use App\Enums\PressReleasePlaceholder;
@ -216,6 +218,59 @@ test('release detail attributes the company itself without a distribution agency
->assertDontSeeText('übermittelt von');
});
test('release detail shows the ai label only for ai-generated declarations', function () {
/** @var TestCase $this */
// Art. 50 KI-VO: Option 2 (ganz/überwiegend KI) trägt das Label
// „KI-generiert" am Anfang des Inhalts, Option 1 bleibt ohne Label.
// KI-deklarierte Bilder tragen das Badge „KI-generiert" direkt am Bild.
[$category, $company] = detailCategoryAndCompany(Portal::Businessportal24);
$aiRelease = PressRelease::factory()
->published()
->forPortal(Portal::Businessportal24)
->for($category)
->for($company)
->create([
'slug' => 'ki-generierte-meldung',
'ai_text_declaration' => AiTextDeclaration::MostlyAi->value,
'published_at' => now()->subDay(),
]);
$aiRelease->images()->create([
'disk' => 'public',
'path' => 'press-releases/'.$aiRelease->id.'/images/title.jpg',
'author' => 'Beispiel GmbH',
'license_type' => 'ai_generated',
'rights_confirmed_at' => now(),
'is_ai_generated' => true,
'ai_declaration' => AiImageDeclaration::AiGenerated->value,
'is_preview' => true,
'sort_order' => 1,
]);
$this->get('https://businessportal24.test/de/press-release/'.$aiRelease->slug)
->assertSuccessful()
->assertSeeText('KI-generiert: Nach Angaben des einreichenden Unternehmens wurde diese Pressemitteilung ganz oder überwiegend mit generativer KI erstellt.')
// Badge am Bild — Kurzform, nicht mehr „KI-generierte Illustration".
->assertSeeText('KI-generiert')
->assertDontSeeText('KI-generierte Illustration');
$plainRelease = PressRelease::factory()
->published()
->forPortal(Portal::Businessportal24)
->for($category)
->for($company)
->create([
'slug' => 'meldung-ohne-ki',
'ai_text_declaration' => AiTextDeclaration::None->value,
'published_at' => now()->subDay(),
]);
$this->get('https://businessportal24.test/de/press-release/'.$plainRelease->slug)
->assertSuccessful()
->assertDontSeeText('KI-generiert');
});
test('release detail counts a hit', function () {
/** @var TestCase $this */
[$category, $company] = detailCategoryAndCompany(Portal::Businessportal24);