/**
  * @param ResourceEvent $e
  * @return CargoRoutingDto
  * @throws \PhlyRestfully\Exception\CreationException
  */
 public function onCreate(ResourceEvent $e)
 {
     $data = $e->getParam('data');
     $this->cargoFrom->setData((array) $data);
     if (!$this->cargoFrom->isValid()) {
         $creationException = new CreationException("Provided Cargo data is invalid.");
         $creationException->setAdditionalDetails(array('errors' => $this->cargoFrom->getMessages()));
         throw $creationException;
     }
     $trackingId = $this->bookingService->bookNewCargo($this->cargoFrom->get('origin')->getValue(), $this->cargoFrom->get('final_destination')->getValue());
     $cargoRouting = new CargoRoutingDto();
     $cargoRouting->setTrackingId($trackingId);
     $cargoRouting->setOrigin($this->cargoFrom->get('origin')->getValue());
     $cargoRouting->setFinalDestination($this->cargoFrom->get('final_destination')->getValue());
     return $cargoRouting;
 }
 public function testUsesAdditionalDetailsFromExceptionWhenProvided()
 {
     $exception = new Exception\CreationException('exception message', 401);
     $exception->setAdditionalDetails(array('foo' => 'bar'));
     $apiProblem = new ApiProblem('401', $exception);
     $payload = $apiProblem->toArray();
     $this->assertArrayHasKey('foo', $payload);
     $this->assertEquals('bar', $payload['foo']);
 }