# Changelog
-## [2.3.0](https://github.com/wallabag/wallabag/tree/2.3.0) (2017-10-21)
+## [unreleased](https://github.com/wallabag/wallabag/tree/master)
+ [Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.0...master)
+
+### Fixes
+
+ - Fix empty title and domain_name when exception is thrown during fetch [#3442](https://github.com/wallabag/wallabag/pull/3442)
+
+## [2.3.0](https://github.com/wallabag/wallabag/tree/2.3.0) (2017-12-11)
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.2.3...2.3.0)
### API
}
}
+ if (empty($entry->getDomainName())) {
+ $this->get('wallabag_core.content_proxy')->setEntryDomainName($entry);
+ }
+
+ if (empty($entry->getTitle())) {
+ $this->get('wallabag_core.content_proxy')->setDefaultEntryTitle($entry);
+ }
+
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
$em->flush();
$entry->setOriginUrl($data['origin_url']);
}
+ if (empty($entry->getDomainName())) {
+ $this->get('wallabag_core.content_proxy')->setEntryDomainName($entry);
+ }
+
+ if (empty($entry->getTitle())) {
+ $this->get('wallabag_core.content_proxy')->setDefaultEntryTitle($entry);
+ }
+
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
$em->flush();
$message = 'flashes.entry.notice.' . $prefixMessage . '_failed';
}
+ if (empty($entry->getDomainName())) {
+ $this->get('wallabag_core.content_proxy')->setEntryDomainName($entry);
+ }
+
+ if (empty($entry->getTitle())) {
+ $this->get('wallabag_core.content_proxy')->setDefaultEntryTitle($entry);
+ }
+
$this->get('session')->getFlashBag()->add('notice', $message);
}
}
}
+ /**
+ * Helper to extract and save host from entry url.
+ *
+ * @param Entry $entry
+ */
+ public function setEntryDomainName(Entry $entry)
+ {
+ $domainName = parse_url($entry->getUrl(), PHP_URL_HOST);
+ if (false !== $domainName) {
+ $entry->setDomainName($domainName);
+ }
+ }
+
+ /**
+ * Helper to set a default title using:
+ * - url basename, if applicable
+ * - hostname.
+ *
+ * @param Entry $entry
+ */
+ public function setDefaultEntryTitle(Entry $entry)
+ {
+ $url = parse_url($entry->getUrl());
+ $path = pathinfo($url['path'], PATHINFO_BASENAME);
+
+ if (empty($path)) {
+ $path = $url['host'];
+ }
+
+ $entry->setTitle($path);
+ }
+
/**
* Stock entry with fetched or imported content.
* Will fall back to OpenGraph data if available.
{
$entry->setUrl($content['url']);
- $domainName = parse_url($entry->getUrl(), PHP_URL_HOST);
- if (false !== $domainName) {
- $entry->setDomainName($domainName);
- }
+ $this->setEntryDomainName($entry);
if (!empty($content['title'])) {
$entry->setTitle($content['title']);
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertGreaterThan(0, $content['id']);
$this->assertSame('http://www.example.com/', $content['url']);
+ $this->assertSame('www.example.com', $content['domain_name']);
+ $this->assertSame('www.example.com', $content['title']);
} finally {
// Remove the created entry to avoid side effects on other tests
if (isset($content['id'])) {
use Wallabag\CoreBundle\Entity\Config;
use Wallabag\CoreBundle\Entity\Entry;
use Wallabag\CoreBundle\Entity\SiteCredential;
+use Wallabag\CoreBundle\Helper\ContentProxy;
class EntryControllerTest extends WallabagCoreTestCase
{
$client->getContainer()->get('craue_config')->set('restricted_access', 0);
}
+
+ public function testPostEntryWhenFetchFails()
+ {
+ $url = 'http://example.com/papers/email_tracking.pdf';
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $container = $client->getContainer();
+ $contentProxy = $this->getMockBuilder(ContentProxy::class)
+ ->disableOriginalConstructor()
+ ->setMethods(['updateEntry'])
+ ->getMock();
+ $contentProxy->expects($this->any())
+ ->method('updateEntry')
+ ->willThrowException(new \Exception('Test Fetch content fails'));
+
+ $crawler = $client->request('GET', '/new');
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+ $form = $crawler->filter('form[name=entry]')->form();
+
+ $data = [
+ 'entry[url]' => $url,
+ ];
+
+ /**
+ * We generate a new client to be able to use Mock ContentProxy
+ * Also we reinject the cookie from the previous client to keep the
+ * session.
+ */
+ $cookie = $client->getCookieJar()->all();
+ $client = $this->getNewClient();
+ $client->getCookieJar()->set($cookie[0]);
+ $client->getContainer()->set('wallabag_core.content_proxy', $contentProxy);
+ $client->submit($form, $data);
+
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+
+ $content = $client->getContainer()
+ ->get('doctrine.orm.entity_manager')
+ ->getRepository('WallabagCoreBundle:Entry')
+ ->findByUrlAndUserId($url, $this->getLoggedInUserId());
+
+ $authors = $content->getPublishedBy();
+ $this->assertSame('email_tracking.pdf', $content->getTitle());
+ $this->assertSame('example.com', $content->getDomainName());
+ }
}
$this->client = static::createClient();
}
+ public function getNewClient()
+ {
+ return $this->client = static::createClient();
+ }
+
public function getClient()
{
return $this->client;