pushScope(); } /** * @return array */ private function captureScopeTags(): array { $event = SentryEvent::createEvent(); configureScope(static function (Scope $scope) use ($event): void { $scope->applyToEvent($event); }); return $event->getTags(); } private function runMiddleware(Request $request): void { (new BindSentryRouteContext())->handle($request, static fn (Request $req) => response('ok')); } public function test_app_tag_is_api(): void { $request = Request::create('http://localhost/api/v1/_anything', 'GET'); $this->runMiddleware($request); $this->assertSame('api', $this->captureScopeTags()['app'] ?? null); } public function test_http_method_tag_present(): void { $request = Request::create('http://localhost/api/v1/me/profile', 'PATCH'); $this->runMiddleware($request); $this->assertSame('PATCH', $this->captureScopeTags()['http.method'] ?? null); } public function test_route_name_tag_present(): void { $request = Request::create('http://localhost/api/v1/me/profile', 'GET'); $route = new \Illuminate\Routing\Route(['GET'], 'me/profile', static fn () => null); $route->name('me.profile'); $route->bind($request); $request->setRouteResolver(static fn () => $route); $this->runMiddleware($request); $this->assertSame('me.profile', $this->captureScopeTags()['route_name'] ?? null); } public function test_route_name_tag_omitted_when_route_has_no_name(): void { $request = Request::create('http://localhost/api/v1/anonymous', 'GET'); $this->runMiddleware($request); $this->assertArrayNotHasKey('route_name', $this->captureScopeTags()); } }