/**
  * @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;
 }
 /**
  * @test
  */
 public function it_lists_all_stored_cargos()
 {
     $trackingIdOne = $this->bookingService->bookNewCargo('USNYC', 'DEHAM');
     $trackingIdTwo = $this->bookingService->bookNewCargo('NLRTM', 'USNYC');
     $cargoRoutingDtos = $this->bookingService->listAllCargos();
     $this->assertEquals(2, count($cargoRoutingDtos));
     $generatedTrackingIds = [$trackingIdOne, $trackingIdTwo];
     foreach ($cargoRoutingDtos as $cargoRoutingDto) {
         $this->assertTrue(in_array($cargoRoutingDto->getTrackingId(), $generatedTrackingIds));
     }
 }