ContentProxy: swap entry url to origin_url and set new url according to graby content

Closes #3529

Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
This commit is contained in:
Kevin Decherf 2018-01-07 17:28:04 +01:00
parent 4a81360efc
commit 781864b954
2 changed files with 37 additions and 4 deletions

View file

@ -68,9 +68,8 @@ class ContentProxy
// In one case (at least in tests), url is empty here // In one case (at least in tests), url is empty here
// so we set it using $url provided in the updateEntry call. // so we set it using $url provided in the updateEntry call.
// Not sure what are the other possible cases where this property is empty // Not sure what are the other possible cases where this property is empty
if (empty($entry->getUrl()) && !empty($url)) if (empty($entry->getUrl()) && !empty($url)) {
{
$entry->setUrl($url); $entry->setUrl($url);
} }
@ -247,7 +246,15 @@ class ContentProxy
*/ */
private function stockEntry(Entry $entry, array $content) private function stockEntry(Entry $entry, array $content)
{ {
$entry->setUrl($content['url']); // When a redirection occurs while fetching an entry
// we move the original url in origin_url property if empty
// and set the entry url with the final value
if (!empty($content['url']) && $entry->getUrl() !== $content['url']) {
if (empty($entry->getOriginUrl())) {
$entry->setOriginUrl($entry->getUrl());
}
$entry->setUrl($content['url']);
}
$this->setEntryDomainName($entry); $this->setEntryDomainName($entry);

View file

@ -775,6 +775,32 @@ class ContentProxyTest extends TestCase
return $string; return $string;
} }
public function testWithChangedUrl()
{
$tagger = $this->getTaggerMock();
$tagger->expects($this->once())
->method('tag');
$proxy = new ContentProxy((new Graby()), $tagger, $this->getValidator(), $this->getLogger(), $this->fetchingErrorMessage, true);
$entry = new Entry(new User());
$proxy->updateEntry(
$entry,
'http://0.0.0.0',
[
'html' => false,
'title' => '',
'url' => 'http://1.1.1.1',
'content_type' => '',
'language' => '',
],
true
);
$this->assertSame('http://1.1.1.1', $entry->getUrl());
$this->assertSame('1.1.1.1', $entry->getDomainName());
$this->assertSame('http://0.0.0.0', $entry->getOriginUrl());
}
private function getTaggerMock() private function getTaggerMock()
{ {
return $this->getMockBuilder(RuleBasedTagger::class) return $this->getMockBuilder(RuleBasedTagger::class)