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());
 }
Beispiel #2
0
 /**
  * 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;
 }