/** * Calculates what the desired revisit factor should be. * * @param \Simgroep\ConcurrentSpiderBundle\PersistenceEvent $event */ public function onPrePersistDocument(PersistenceEvent $event) { $newDocument = $event->getDocument(); $currentDocument = $this->indexer->findDocumentByUrl($newDocument['url'], $event->getMetadata()); if (null === $currentDocument || $currentDocument['revisit_after'] == 0) { $newDocument['revisit_after'] = $this->defaultRevisitFactor; $expireDate = new DateTime(); $expireDate->modify(sprintf('+%s minute', $newDocument['revisit_after'])); $newDocument['revisit_expiration'] = $expireDate->format('Y-m-d\\TH:i:s\\Z'); return; } if ($this->createDocumentChecksum($currentDocument) === $this->createDocumentChecksum($newDocument)) { $this->increaseRevisitFactor($newDocument, $currentDocument['revisit_after']); } else { $this->decreaseRevisitFactor($newDocument, $currentDocument['revisit_after']); } }
/** * @test */ public function isNullReturnedWhenNoDocumentFoundByUrl() { $url = 'https://github.com'; $selectQuery = $this->getMockBuilder('Solarium\\QueryType\\Select\\Query\\Query')->setMethods(['setQuery'])->getMock(); $selectQuery->expects($this->once())->method('setQuery')->with($this->callback(function ($subject) use($url) { return preg_match(sprintf('/^id:%s$/', sha1($url)), $subject); }))->will($this->returnValue($selectQuery)); $result = $this->getMockBuilder('Solarium\\QueryType\\Select\\Result\\Result')->disableOriginalConstructor()->getMock(); $solrClient = $this->getMockBuilder('Solarium\\Client')->setMethods(['createSelect', 'select'])->getMock(); $solrClient->expects($this->once())->method('createSelect')->will($this->returnValue($selectQuery)); $solrClient->expects($this->once())->method('select')->will($this->returnValue($result)); $indexer = new Indexer($solrClient, [], 50); $this->assertNull($indexer->findDocumentByUrl($url)); }