diff --git a/src/Tracker/Manager.php b/src/Tracker/Manager.php index 9975417..9b9939b 100644 --- a/src/Tracker/Manager.php +++ b/src/Tracker/Manager.php @@ -119,6 +119,13 @@ private function tagsMatch(array $tagsToInvalidate, array $storeTags): bool private function invalidateUrls($urls) { $cacher = app(Cacher::class); + + if (config('statamic.static_caching.background_recache', false)) { + $cacher->refreshUrls($urls); + + return; + } + $cacher->invalidateUrls($urls); } diff --git a/tests/Unit/TrackerTest.php b/tests/Unit/TrackerTest.php index 8bfb315..fa1e38d 100644 --- a/tests/Unit/TrackerTest.php +++ b/tests/Unit/TrackerTest.php @@ -3,7 +3,9 @@ namespace Thoughtco\StatamicCacheTracker\Tests\Unit; use Illuminate\Support\Facades\Event; +use Illuminate\Support\Facades\Queue; use PHPUnit\Framework\Attributes\Test; +use Statamic\Console\Commands\StaticWarmJob; use Statamic\Events\UrlInvalidated; use Thoughtco\StatamicCacheTracker\Events\ContentTracked; use Thoughtco\StatamicCacheTracker\Facades\Tracker; @@ -212,4 +214,36 @@ public function it_doesnt_invalidate_when_wildcard_doesnt_match() $this->assertCount(2, Tracker::all()); } + + #[Test] + public function it_invalidates_the_static_cache_immediately_by_default() + { + $this->get('/'); + + Queue::fake(); + Event::fake([UrlInvalidated::class]); + + Tracker::invalidate(['collection:pages']); + + Queue::assertNotPushed(StaticWarmJob::class); + Event::assertDispatched(UrlInvalidated::class); + $this->assertCount(0, Tracker::all()); + } + + #[Test] + public function it_queues_a_recache_job_instead_of_invalidating_when_background_recache_is_enabled() + { + config(['statamic.static_caching.background_recache' => true]); + + $this->get('/'); + + Queue::fake(); + Event::fake([UrlInvalidated::class]); + + Tracker::invalidate(['collection:pages']); + + Queue::assertPushed(StaticWarmJob::class); + Event::assertNotDispatched(UrlInvalidated::class); + $this->assertCount(0, Tracker::all()); + } }