/**
  * Imports urls from file and returns number of items imported.
  *
  * @param string $file
  * @param int    $redirectCode
  * @param bool   $countRedirects
  * @param OutputInterface $output
  *
  * @throws Exception\CsvImporterException
  * @return int
  */
 public function import($file, $redirectCode, $countRedirects, OutputInterface $output)
 {
     $count = 0;
     if (($handle = fopen($file, 'r')) !== false) {
         $em = $this->getEm();
         while (($data = fgetcsv($handle)) !== false) {
             if (count($data) != 2) {
                 throw new CsvImporterException(sprintf('There should be only 2 columns in csv file. Got %d columns.', count($data)));
             }
             $urlFrom = $data[0];
             $urlTo = $data[1];
             $map = new Map();
             $map->setUrlFrom($urlFrom)->setUrlTo($urlTo)->setRedirectHttpCode($redirectCode)->setCountRedirects($countRedirects);
             if ($this->getValidator()->validate($map)) {
                 $em->persist($map);
                 $count++;
             } else {
                 $output->writeln('<error>Circular redirect detected for ' . $map->getUrlTo() . '</error>');
             }
         }
         fclose($handle);
         $em->flush();
     }
     return $count;
 }
 protected function createRedirect($hostPattern, $urlFrom, $requestUrl, $isRegex = false, $isNoCase = false, $negate = false, $urlTo = null)
 {
     $request = Request::create($requestUrl);
     $map = new Map();
     $map->setUrlFrom($urlFrom);
     $map->setUrlFromIsRegexPattern($isRegex);
     $map->setUrlFromIsNoCase($isNoCase);
     $map->setUrlTo($urlTo);
     $map->setHost($hostPattern);
     $map->setHostIsRegexPattern($isRegex);
     $map->setHostRegexPatternNegate($negate);
     return new Redirect($request, $map);
 }
 /**
  * Tests if method is working properly and if all mocks all called properly.
  */
 public function testIfListenerSetProperRedirect()
 {
     $map = new Map();
     $map->setUrlFrom('/something')->setUrlTo('/somewhere');
     $repoMock = $this->getMockBuilder('Astina\\Bundle\\RedirectManagerBundle\\Entity\\MapRepository')->disableOriginalConstructor()->getMock();
     $repoMock->expects($this->once())->method('findCandidatesForUrlOrPath')->will($this->returnValue(array($map)));
     $managerMock = $this->getMockBuilder('\\Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $managerMock->expects($this->once())->method('persist')->with($map);
     $managerMock->expects($this->once())->method('getRepository')->will($this->returnValue($repoMock));
     $redirectFinder = new RedirectFinder($managerMock);
     $redirectListener = new RedirectListener($redirectFinder);
     $requestMock = $this->getRequestMock('GET', null, '/something');
     $eventMock = $this->getResponseEventMock($requestMock);
     $eventMock->expects($this->once())->method('setResponse');
     $redirectListener->onKernelRequest($eventMock);
     $this->assertEquals(1, $map->getCount(), 'Map count should be increased to 1.');
 }