/** * @runInSeparateProcess */ public function testExceptionHandledByFinaleReadResponder() { $requestInfo = new RequestInfo(['REQUEST_METHOD' => 'GET', 'REQUEST_URI' => '/test']); $exception = new \Exception(); $finalReadResponder = $this->getMockBuilder(RespondsFinallyToReadRequest::class)->getMockForAbstractClass(); $finalReadResponder->method('handleUncaughtException')->will($this->returnCallback(function ($exception) { echo get_class($exception); })); $config = $this->getMockBuilder(ConfiguresIceHawk::class)->getMockForAbstractClass(); $config->method('getRequestInfo')->willReturn($requestInfo); $config->method('getFinalReadResponder')->willReturn($finalReadResponder); $requestHandler = $this->getMockBuilder(HandlesGetRequest::class)->getMockForAbstractClass(); $requestHandler->expects($this->once())->method('handle')->will($this->throwException($exception)); $readRoute = new ReadRoute(new Literal('/test'), $requestHandler); $config->expects($this->once())->method('getReadRoutes')->willReturn([$readRoute]); $readRequestHandler = new ReadRequestHandler($config, new EventPublisher()); $readRequestHandler->handleRequest(); $this->expectOutputString(get_class($exception)); }
public function handleRequest() { $requestInfo = $this->config->getRequestInfo(); if (in_array($requestInfo->getMethod(), HttpMethod::WRITE_METHODS)) { $requestHandler = new WriteRequestHandler($this->config, $this->eventPublisher); $requestHandler->handleRequest(); } elseif (in_array($requestInfo->getMethod(), HttpMethod::READ_METHODS)) { $requestHandler = new ReadRequestHandler($this->config, $this->eventPublisher); $requestHandler->handleRequest(); } elseif ($requestInfo->getMethod() == HttpMethod::OPTIONS) { $requestHandler = new OptionsRequestHandler($this->config, $this->eventPublisher); $requestHandler->handleRequest(); } else { (new MethodNotImplemented($requestInfo->getMethod()))->respond(); } }