public function testCollect() { $e = new \Exception('foo', 500); $c = new ExceptionDataCollector(); $flattened = FlattenException::create($e); $trace = $flattened->getTrace(); $this->assertFalse($c->hasException()); $c->collect(new Request(), new Response(), $e); $this->assertTrue($c->hasException()); $this->assertEquals($flattened, $c->getException()); $this->assertSame('foo', $c->getMessage()); $this->assertSame(500, $c->getCode()); $this->assertSame('exception', $c->getName()); $this->assertSame($trace, $c->getTrace()); }
/** * Handle http request. * * @param HttpRequest $httpRequest * * @return HttpResponse */ public function handleHttpRequest(HttpRequest $httpRequest) { // Try parse HttpRequest to JsonRequest|JsonRequest[] try { $jsonRequests = $this->parserHttpRequest($httpRequest); } catch (Exceptions\ParseException $e) { return $this->createHttpResponseFromException($e); } $jsonResponses = $this->handleJsonRequest($jsonRequests); // Response $httpResponse = HttpResponse::create(); // Is has exception? if ($this->container && $this->container->has('profiler')) { /* @var Profile $profiler */ $profiler = $this->container->get('profiler'); if (is_array($jsonResponses)) { foreach ($jsonResponses as $jsonResponse) { if ($exception = $jsonResponse->getException()) { $collector = new ExceptionDataCollector(); $collector->collect($httpRequest, $httpResponse, $exception); $profiler->add($collector); } } } else { if ($exception = $jsonResponses->getException()) { $collector = new ExceptionDataCollector(); $collector->collect($httpRequest, $httpResponse, $exception); $profiler->add($collector); } } } // Set httpResponse content. if (is_array($jsonResponses)) { $results = []; foreach ($jsonResponses as $jsonResponse) { if ($jsonResponse->isError() || $jsonResponse->getId()) { $results[] = $jsonResponse; } if ($jsonResponse->isError()) { $httpResponse->setStatusCode(500); } } $httpResponse->setContent(json_encode($results)); } else { if ($jsonResponses->isError() || $jsonResponses->getId()) { $httpResponse->setContent(json_encode($jsonResponses)); } if ($jsonResponses->isError()) { $httpResponse->setStatusCode(500); } } // Set httpResponse headers. if (is_array($jsonResponses)) { foreach ($jsonResponses as $jsonResponse) { if ($jsonResponse->isError() || $jsonResponse->getId()) { $httpResponse->headers->add($jsonResponse->headers()->all()); } } } else { $httpResponse->headers->add($jsonResponses->headers()->all()); } $httpResponse->headers->set('Content-Type', 'application/json'); return $httpResponse; }