/**
  * @param array $schedule
  * @param $busLineName
  * @return Schedule
  * @throws \InvalidArgumentException
  */
 public static function createSchedule(array $schedule, $busLineName)
 {
     self::verifyRequiredFields($schedule);
     if (!is_int($schedule["_id"])) {
         throw new \InvalidArgumentException("The id must be a number");
     }
     $departureDateTime = \DateTime::createFromFormat('Ymd H:i', $schedule["_departure_date"] . " " . $schedule["_departure_time"]);
     if (!$departureDateTime) {
         $message = "The departure date or time is invalid: ";
         $message .= $schedule["_departure_date"] . " " . $schedule["_departure_time"];
         throw new \InvalidArgumentException($message);
     }
     $arrivalDateTime = \DateTime::createFromFormat('Ymd H:i', $schedule["_arrival_date"] . " " . $schedule["_arrival_time"]);
     if (!$arrivalDateTime) {
         $message = "The arrival date or time is invalid: ";
         $message .= $schedule["_arrival_date"] . " " . $schedule["_arrival_time"];
         throw new \InvalidArgumentException($message);
     }
     if (empty($schedule["_service"])) {
         throw new \InvalidArgumentException("The service is required");
     }
     $newSchedule = new Schedule();
     $newSchedule->setId($schedule["_id"]);
     $newSchedule->setDepartureDateTime($departureDateTime);
     $newSchedule->setArrivalDateTime($arrivalDateTime);
     $newSchedule->setService($schedule["_service"]);
     $newSchedule->setBusLine($busLineName);
     $categories = [];
     foreach ($schedule["_category"] as $category) {
         $categories[] = CategoryFactory::create($category);
     }
     $newSchedule->setCategories($categories);
     return $newSchedule;
 }
 /**
  * @expectedException Exception
  */
 public function test_category_not_found_should_raise_an_exception()
 {
     $schedule = new Schedule();
     $schedule->setCategories([]);
     $schedule->getCategoryByType("ADULT");
 }