From 85fddbfdf83fd6172c1625eb54411c6ae46fad12 Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Wed, 8 Jul 2026 09:30:41 +0000 Subject: [PATCH] =?UTF-8?q?Attribution:=20=C3=9Cbermittler=20aus=20users.a?= =?UTF-8?q?gency=5Fname=20statt=20Agentur-Firma?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A3 des Umbaus Agentur-Attribution → User-Profil: Eager Loading der Detailseite/Vorschau lädt user:id,agency_name; die Legacy-Relation PressRelease::submittingAgency() (Pseudo-Firma type=agency via owner_user_id) entfällt. Tests decken Verteiler-Fall, Namensgleichheit und PM ohne Übermittler ab. Co-Authored-By: Claude Fable 5 --- .../PressReleasePreviewController.php | 1 + app/Services/Web/ReleaseDetailPageData.php | 1 + tests/Feature/Web/ReleaseDetailTest.php | 69 +++++++++++++++++++ 3 files changed, 71 insertions(+) diff --git a/app/Http/Controllers/PressReleasePreviewController.php b/app/Http/Controllers/PressReleasePreviewController.php index 05ae82ab..cf53a331 100644 --- a/app/Http/Controllers/PressReleasePreviewController.php +++ b/app/Http/Controllers/PressReleasePreviewController.php @@ -33,6 +33,7 @@ class PressReleasePreviewController extends Controller ? PressRelease::withoutGlobalScopes() ->with([ 'company', + 'user:id,agency_name', 'category.translations', 'category.parent.translations', 'images' => fn ($query) => $query->orderByDesc('is_preview')->orderBy('sort_order'), diff --git a/app/Services/Web/ReleaseDetailPageData.php b/app/Services/Web/ReleaseDetailPageData.php index b81bf30d..abfd33fa 100644 --- a/app/Services/Web/ReleaseDetailPageData.php +++ b/app/Services/Web/ReleaseDetailPageData.php @@ -33,6 +33,7 @@ class ReleaseDetailPageData ->where('slug', $slug) ->with([ 'company', + 'user:id,agency_name', 'category.translations' => fn ($query) => $query->where('locale', $language), 'category.parent.translations' => fn ($query) => $query->where('locale', $language), 'images' => fn ($query) => $query->orderByDesc('is_preview')->orderBy('sort_order'), diff --git a/tests/Feature/Web/ReleaseDetailTest.php b/tests/Feature/Web/ReleaseDetailTest.php index 2ce61fb9..a15e779e 100644 --- a/tests/Feature/Web/ReleaseDetailTest.php +++ b/tests/Feature/Web/ReleaseDetailTest.php @@ -1,11 +1,13 @@ assertSee(route('legal-request.create', ['slug' => $release->slug, 'type' => 'dsgvo']), false); }); +test('release detail attributes content submitted via a distribution agency', function () { + /** @var TestCase $this */ + // Legacy-Konvention: PMs, die über einen Verteiler-Account eingeliefert + // wurden (z. B. connektar via API), tragen die Zeile „Original-Inhalt + // von {Firma} und übermittelt von {Übermittler}". Der Übermittler kommt + // aus dem Profilfeld agency_name des einliefernden Accounts. + [$category, $company] = detailCategoryAndCompany(Portal::Businessportal24); + + $agencyUser = User::factory()->withAgency('connektar.de Presseverteiler')->create(); + + $release = PressRelease::factory() + ->published() + ->forPortal(Portal::Businessportal24) + ->for($category) + ->for($company) + ->for($agencyUser, 'user') + ->create(['slug' => 'api-eingelieferte-meldung', 'published_at' => now()->subDay()]); + + $this->get('https://businessportal24.test/de/press-release/'.$release->slug) + ->assertSuccessful() + ->assertSeeText('Original-Inhalt von Muster Energie GmbH und übermittelt von connektar.de Presseverteiler'); +}); + +test('release detail attribution collapses when agency and company share the same name', function () { + /** @var TestCase $this */ + [$category] = detailCategoryAndCompany(Portal::Businessportal24); + + $agencyUser = User::factory()->withAgency('PR-Werk GmbH')->create(); + + $sameNameCompany = Company::factory()->create([ + 'portal' => Portal::Businessportal24, + 'type' => CompanyType::Company, + 'name' => 'PR-Werk GmbH', + 'is_active' => true, + ]); + + $release = PressRelease::factory() + ->published() + ->forPortal(Portal::Businessportal24) + ->for($category) + ->for($sameNameCompany) + ->for($agencyUser, 'user') + ->create(['slug' => 'eigene-agentur-meldung', 'published_at' => now()->subDay()]); + + $this->get('https://businessportal24.test/de/press-release/'.$release->slug) + ->assertSuccessful() + ->assertSeeText('Inhalt übermittelt von PR-Werk GmbH') + ->assertDontSeeText('Original-Inhalt von PR-Werk GmbH'); +}); + +test('release detail attributes the company itself without a distribution agency', function () { + /** @var TestCase $this */ + [$category, $company] = detailCategoryAndCompany(Portal::Businessportal24); + + $release = PressRelease::factory() + ->published() + ->forPortal(Portal::Businessportal24) + ->for($category) + ->for($company) + ->create(['slug' => 'direkt-eingestellte-meldung', 'published_at' => now()->subDay()]); + + $this->get('https://businessportal24.test/de/press-release/'.$release->slug) + ->assertSuccessful() + ->assertSeeText('Original-Inhalt von Muster Energie GmbH') + ->assertDontSeeText('übermittelt von'); +}); + test('release detail counts a hit', function () { /** @var TestCase $this */ [$category, $company] = detailCategoryAndCompany(Portal::Businessportal24);