/** * @runInSeparateProcess */ public function testExceptionHandledByFinaleWriteResponder() { $requestInfo = new RequestInfo(['REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/test']); $exception = new \Exception(); $finalWriteResponder = $this->getMockBuilder(RespondsFinallyToWriteRequest::class)->getMockForAbstractClass(); $finalWriteResponder->method('handleUncaughtException')->will($this->returnCallback(function ($exception) { echo get_class($exception); })); $config = $this->getMockBuilder(ConfiguresIceHawk::class)->getMockForAbstractClass(); $config->method('getRequestInfo')->willReturn($requestInfo); $config->method('getFinalWriteResponder')->willReturn($finalWriteResponder); $requestHandler = $this->getMockBuilder(HandlesPostRequest::class)->getMockForAbstractClass(); $requestHandler->expects($this->once())->method('handle')->will($this->throwException($exception)); $writeRoute = new WriteRoute(new Literal('/test'), $requestHandler); $config->expects($this->once())->method('getWriteRoutes')->willReturn([$writeRoute]); $writeRequestHandler = new WriteRequestHandler($config, new EventPublisher()); $writeRequestHandler->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(); } }