/**
  * @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));
     }
 }
 /**
  * @param ResourceEvent $e
  * @return \CargoBackend\API\Booking\Dto\CargoRoutingDto
  * @throws \PhlyRestfully\Exception\UpdateException
  */
 public function onUpdate(ResourceEvent $e)
 {
     $trackingId = $e->getRouteMatch()->getParam('tracking_id');
     $data = $e->getParam('data');
     if (!isset($data->legs)) {
         throw new UpdateException("Legs missing in CargoRouting payload", 400);
     }
     $routeCandidate = new RouteCandidateDto();
     $routeCandidate->setLegs($this->toLegDtosFromData($data->legs));
     $this->bookingService->assignCargoToRoute($trackingId, $routeCandidate);
     return $this->bookingService->loadCargoForRouting($trackingId);
 }
 /**
  * @param ResourceEvent $e
  * @return \CargoBackend\API\Booking\Dto\RouteCandidateDto[]
  */
 public function onFetchAll(ResourceEvent $e)
 {
     $trackingId = $e->getRouteMatch()->getParam('tracking_id');
     return $this->bookingService->requestPossibleRoutesForCargo($trackingId);
 }