/**
  *
  */
 public function testFillFromDatabase()
 {
     $test = array('id' => '12', 'id_vendor' => '5', 'name_package' => 'hamburger', 'allergies' => 'gluten', 'advance' => '12');
     $this->package = Package::fillFromDatabase($test);
     $this->assertInstanceOf('Citypantry\\Models\\Entities\\Package', $this->package);
     $this->assertEquals($this->package->getId(), $test['id']);
     $this->assertEquals($this->package->getVendor(), $test['id_vendor']);
     $this->assertEquals($this->package->getNamePackage(), $test['name_package']);
     $this->assertEquals($this->package->getAllergies(), $test['allergies']);
     $this->assertEquals($this->package->getAdvance(), $test['advance']);
 }
 /**
  * @param $location
  * @param $date
  * @param $covers
  * @return array
  */
 public function findPackages($location, $date, $covers)
 {
     $pattern = '/^([a-zA-Z]+)[a-zA-Z0-9]+/';
     preg_match($pattern, $location, $matches);
     $locationToFind = $matches[1] . '%';
     $stmt = $this->prepare('SELECT * FROM vendors v ' . 'LEFT JOIN packages p ON v.id = p.id_vendor ' . 'WHERE v.postcode LIKE :location ' . 'AND datetime(:dateProvide) < datetime("now", "+"|| p.advance||" hours") ' . 'AND :covers <= v.max_cover ');
     $stmt->bindValue(':location', $locationToFind, SQLITE3_TEXT);
     $stmt->bindValue(':dateProvide', $date->format('Y-m-d H:i:s'));
     $stmt->bindValue(':covers', $covers, SQLITE3_INTEGER);
     $result = $stmt->execute();
     $vendors = array();
     while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
         if (!isset($vendors[$row['id_vendor']])) {
             $vendors[$row['id_vendor']] = Vendor::fillFromDatabase($row);
         }
         $vendors[$row['id_vendor']]->addPackage(Package::fillFromDatabase($row));
     }
     return $vendors;
 }