public function __invoke(ServerRequestInterface $request, ResponseInterface $response)
 {
     if (null === ($trackingId = $request->getAttribute('trackingId'))) {
         return new EmptyResponse(404);
     }
     $candidateIndex = 1;
     return new JsonResponse(['routeCandidates' => array_map(function (RouteCandidateDto $routeCandidate) use(&$candidateIndex) {
         $candidateData = $routeCandidate->getArrayCopy();
         $candidateData['id'] = $candidateIndex;
         $candidateIndex++;
         return $candidateData;
     }, $this->bookingService->requestPossibleRoutesForCargo($trackingId))]);
 }
 /**
  * @test
  */
 public function it_assigns_cargo_to_route()
 {
     $trackingId = $this->bookingService->bookNewCargo('USNYC', 'DEHAM');
     $routeCandidates = $this->bookingService->requestPossibleRoutesForCargo($trackingId);
     $this->bookingService->assignCargoToRoute($trackingId, $routeCandidates[0]);
     $cargo = $this->cargoRepository->get(TrackingId::fromString($trackingId));
     $legs = $cargo->itinerary()->legs();
     $this->assertEquals(1, count($legs));
     $this->assertEquals('USNYC', $legs[0]->loadLocation());
     $this->assertEquals('DEHAM', $legs[0]->unloadLocation());
 }