diff --git a/src/Recorders/ValidationErrors.php b/src/Recorders/ValidationErrors.php index b9af6ef..a366015 100644 --- a/src/Recorders/ValidationErrors.php +++ b/src/Recorders/ValidationErrors.php @@ -65,11 +65,14 @@ public function register(callable $record, Application $app): void */ public function record(LivewireValidationError|RequestHandled $event): void { - $this->pulse->lazy(function () use ($event) { - if (! $this->shouldSample()) { - return; - } + if ( + $event->request->route() === null || + ! $this->shouldSample() + ) { + return; + } + $this->pulse->lazy(function () use ($event) { [$path, $via] = $this->resolveRoutePath($event->request); if ($this->shouldIgnore($path)) { diff --git a/tests/RecorderTest.php b/tests/RecorderTest.php index a9572f6..2528781 100644 --- a/tests/RecorderTest.php +++ b/tests/RecorderTest.php @@ -14,6 +14,7 @@ use Tests\TestClasses\DummyComponent; use TiMacDonald\Pulse\Recorders\ValidationErrors; +use function Pest\Laravel\get; use function Pest\Laravel\post; use function Pest\Laravel\postJson; @@ -483,3 +484,27 @@ expect($aggregates->pluck('aggregate')->all())->toBe(array_fill(0, 4, 'count')); expect($aggregates->pluck('value')->every(fn ($value) => $value == 1.0))->toBe(true); }); + +it('ignores unknown routes', function () { + get('unknown-route')->assertNotFound(); +}); + +it('can sample', function () { + Config::set('pulse.recorders.'.ValidationErrors::class.'.sample_rate', 0.1); + Route::post('users', fn () => Request::validate([ + 'email' => 'required', + ]))->middleware('web'); + + post('users'); + post('users'); + post('users'); + post('users'); + post('users'); + post('users'); + post('users'); + post('users'); + post('users'); + post('users'); + + expect(Pulse::ingest())->toEqualWithDelta(1, 4); +});