assertArrayHasKey(KernelEvents::EXCEPTION, $events); $methodName = $events[KernelEvents::EXCEPTION][0]; $this->assertTrue(method_exists(AjaxAuthenticationSubscriber::class, $methodName)); } public function getTestHeader() { yield ['XMLHttpRequest']; yield ['Kimai']; } /** * @dataProvider getTestHeader */ public function testAuthenticationExpiredException(string $requestedWith) { $sut = new AjaxAuthenticationSubscriber(); $exception = new AuthenticationExpiredException(); $kernel = $this->createMock(HttpKernelInterface::class); $request = new Request(); $request->initialize([], [], [], [], [], ['HTTP_X-Requested-With' => $requestedWith]); $event = new ExceptionEvent($kernel, $request, 1, $exception); $sut->onCoreException($event); $response = $event->getResponse(); self::assertNotNull($response); self::assertEquals('Session expired', $response->getContent()); self::assertEquals(403, $response->getStatusCode()); self::assertTrue($response->headers->has('Login-Required')); self::assertEquals('1', $response->headers->get('Login-Required')); } /** * @dataProvider getTestHeader */ public function testAuthenticationException(string $requestedWith) { $sut = new AjaxAuthenticationSubscriber(); $exception = new AuthenticationException(); $kernel = $this->createMock(HttpKernelInterface::class); $request = new Request(); $request->initialize([], [], [], [], [], ['HTTP_X-Requested-With' => $requestedWith]); $event = new ExceptionEvent($kernel, $request, 1, $exception); $sut->onCoreException($event); $response = $event->getResponse(); self::assertNotNull($response); self::assertEquals('Authentication problem', $response->getContent()); self::assertEquals(403, $response->getStatusCode()); self::assertTrue($response->headers->has('Login-Required')); self::assertEquals('1', $response->headers->get('Login-Required')); } /** * @dataProvider getTestHeader */ public function testAccessDeniedException(string $requestedWith) { $sut = new AjaxAuthenticationSubscriber(); $exception = new AccessDeniedException(); $kernel = $this->createMock(HttpKernelInterface::class); $request = new Request(); $request->initialize([], [], [], [], [], ['HTTP_X-Requested-With' => $requestedWith]); $event = new ExceptionEvent($kernel, $request, 1, $exception); $sut->onCoreException($event); $response = $event->getResponse(); self::assertNotNull($response); self::assertEquals('Access denied', $response->getContent()); self::assertEquals(403, $response->getStatusCode()); self::assertTrue($response->headers->has('Login-Required')); self::assertEquals('1', $response->headers->get('Login-Required')); } }