From 2c1beb0cbd577106402825ec760021bff3eb10ad Mon Sep 17 00:00:00 2001 From: Michael Aerni Date: Tue, 16 Jun 2026 12:33:54 +0200 Subject: [PATCH] Add cache_tracker tag for manual dependency tracking --- src/Tags/CacheTracker.php | 32 ++++++++++++++++++++ tests/Unit/CacheTrackerTagTest.php | 47 ++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 src/Tags/CacheTracker.php create mode 100644 tests/Unit/CacheTrackerTagTest.php diff --git a/src/Tags/CacheTracker.php b/src/Tags/CacheTracker.php new file mode 100644 index 0000000..68a0fdb --- /dev/null +++ b/src/Tags/CacheTracker.php @@ -0,0 +1,32 @@ +track($this->params->get('tag')); + } + + /** + * {{ cache_tracker:hero }} + */ + public function wildcard(string $method): void + { + $this->track($method); + } + + private function track(?string $tag): void + { + if (! is_null($tag)) { + TrackContentTags::dispatch([$tag]); + } + } +} diff --git a/tests/Unit/CacheTrackerTagTest.php b/tests/Unit/CacheTrackerTagTest.php new file mode 100644 index 0000000..31d22b4 --- /dev/null +++ b/tests/Unit/CacheTrackerTagTest.php @@ -0,0 +1,47 @@ +assertTracked(['custom:dependency']); + } + + #[Test] + public function it_tracks_a_tag_via_the_wildcard_method() + { + Event::fake([TrackContentTags::class]); + + Antlers::parse('{{ cache_tracker:custom:dependency }}', [], true); + + $this->assertTracked(['custom:dependency']); + } + + #[Test] + public function it_does_not_track_when_no_tag_is_given() + { + Event::fake([TrackContentTags::class]); + + Antlers::parse('{{ cache_tracker }}', [], true); + + Event::assertNotDispatched(TrackContentTags::class); + } + + private function assertTracked(array $tags): void + { + Event::assertDispatched(TrackContentTags::class, fn (TrackContentTags $event) => $event->tags === $tags); + } +}