/** * 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.'); }