presseportale/tests/Feature/Web/CategoryNavigationCacheTest.php
Kevin Adametz 23cbd0bfe2 performance: Caching, deferred Tracking & externe Timeouts (H7, M12, M13)
- Navigations-Chrome (CategoryNavigation), Suche- und Newsroom-Seitendaten
  300s gecacht; gemeinsamer WebPageCache-Helper (eine TTL/Key-Konvention).
- Cache-Poisoning über ?page= geschlossen (Key an Paginator ausgerichtet,
  kein withQueryString im Cache); Newsrooms cachet nur den ungefilterten
  Fall und die ersten Seiten (kein unbegrenzter Key-Raum).
- Detailseiten schreiben Hits/View-Events deferred nach der Response
  (M12); OpenAI-/Markt-/USt-ID-Aufrufe mit Connect-Timeouts und
  begrenzten Retries; Admin-Memo-Caches konsistent invalidiert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:49:47 +00:00

40 lines
1.2 KiB
PHP

<?php
use App\Support\CategoryNavigation;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Tests\TestCase;
/**
* Regression zu Befund H7 (Audit 14.07.2026): Die Rubriken-Navigation rendert
* auf jeder Web-Seite und darf nicht pro Request neu über das Archiv aggregieren.
*/
test('category navigation is cached and not recomputed on the second call', function () {
/** @var TestCase $this */
config()->set('app.theme', 'presseecho');
app()->setLocale('de');
Cache::flush();
DB::enableQueryLog();
CategoryNavigation::items(5);
expect(DB::getQueryLog())->not->toBeEmpty();
DB::flushQueryLog();
CategoryNavigation::items(5);
expect(DB::getQueryLog())->toBeEmpty();
});
test('category navigation caches per portal, language and limit separately', function () {
/** @var TestCase $this */
config()->set('app.theme', 'presseecho');
app()->setLocale('de');
Cache::flush();
CategoryNavigation::items(5);
expect(Cache::has('web.category-nav.presseecho.de.5'))->toBeTrue()
->and(Cache::has('web.category-nav.presseecho.de.all'))->toBeFalse();
CategoryNavigation::items(null);
expect(Cache::has('web.category-nav.presseecho.de.all'))->toBeTrue();
});