/**
  * @{inheritDoc}
  */
 public function getCustomers()
 {
     if (null === ($customers = json_decode($this->json, true))) {
         throw new \UnexpectedValueException('Failed to decode the provided JSON.');
     }
     $domainCustomers = [];
     foreach ($customers as $customer) {
         if (!$this->isCustomerValid($customer)) {
             throw new \DomainException('There was an invalid customer entry in your JSON.');
         }
         $domainCustomer = new Customer();
         $domainCustomer->setUserId($customer['user_id'])->setName($customer['name'])->setLongitude($customer['longitude'])->setLatitude($customer['latitude']);
         $domainCustomers[] = $domainCustomer;
     }
     return $domainCustomers;
 }
 public function testSetLongitudeInvalid()
 {
     $this->setExpectedException('\\InvalidArgumentException');
     $customer = new Customer();
     $customer->setLongitude('invalid');
 }
 /**
  * Checks if a customer is within the distance of a given latitude / longitude in kilometers.
  *
  * @param Customer $customer        The customer to check.
  * @param float    $latitudeTo      The latitude to check the customer is in distance of.
  * @param float    $longitudeTo     The longitude to check the customer is in distance of.
  * @param float    $maxDistanceInKm The maximum distance before the customer is considered not
  *                                  "within distance".
  *
  * @return bool
  */
 public function isCustomerWithinDistance(Customer $customer, $latitudeTo, $longitudeTo, $maxDistanceInKm)
 {
     $distanceInKm = $this->distanceCalculator->haversineGreatCircleDistance($customer->getLatitude(), $customer->getLongitude(), $latitudeTo, $longitudeTo, 6371);
     return $distanceInKm <= $maxDistanceInKm;
 }