mirror of
https://github.com/wallabag/wallabag.git
synced 2024-11-27 03:21:01 +00:00
Merge pull request #3442 from wallabag/empty-entry
Fix empty title and domain_name when exception is thrown during fetch
This commit is contained in:
commit
a68a80f654
7 changed files with 121 additions and 5 deletions
|
@ -1,6 +1,13 @@
|
||||||
# Changelog
|
# 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)
|
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.2.3...2.3.0)
|
||||||
|
|
||||||
### API
|
### API
|
||||||
|
|
|
@ -381,6 +381,14 @@ class EntryRestController extends WallabagRestController
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 = $this->getDoctrine()->getManager();
|
||||||
$em->persist($entry);
|
$em->persist($entry);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
@ -490,6 +498,14 @@ class EntryRestController extends WallabagRestController
|
||||||
$entry->setOriginUrl($data['origin_url']);
|
$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 = $this->getDoctrine()->getManager();
|
||||||
$em->persist($entry);
|
$em->persist($entry);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
|
@ -502,6 +502,14 @@ class EntryController extends Controller
|
||||||
$message = 'flashes.entry.notice.' . $prefixMessage . '_failed';
|
$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);
|
$this->get('session')->getFlashBag()->add('notice', $message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,38 @@ class ContentProxy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
* Stock entry with fetched or imported content.
|
||||||
* Will fall back to OpenGraph data if available.
|
* Will fall back to OpenGraph data if available.
|
||||||
|
@ -155,10 +187,7 @@ class ContentProxy
|
||||||
{
|
{
|
||||||
$entry->setUrl($content['url']);
|
$entry->setUrl($content['url']);
|
||||||
|
|
||||||
$domainName = parse_url($entry->getUrl(), PHP_URL_HOST);
|
$this->setEntryDomainName($entry);
|
||||||
if (false !== $domainName) {
|
|
||||||
$entry->setDomainName($domainName);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($content['title'])) {
|
if (!empty($content['title'])) {
|
||||||
$entry->setTitle($content['title']);
|
$entry->setTitle($content['title']);
|
||||||
|
|
|
@ -501,6 +501,8 @@ class EntryRestControllerTest extends WallabagApiTestCase
|
||||||
$content = json_decode($this->client->getResponse()->getContent(), true);
|
$content = json_decode($this->client->getResponse()->getContent(), true);
|
||||||
$this->assertGreaterThan(0, $content['id']);
|
$this->assertGreaterThan(0, $content['id']);
|
||||||
$this->assertSame('http://www.example.com/', $content['url']);
|
$this->assertSame('http://www.example.com/', $content['url']);
|
||||||
|
$this->assertSame('www.example.com', $content['domain_name']);
|
||||||
|
$this->assertSame('www.example.com', $content['title']);
|
||||||
} finally {
|
} finally {
|
||||||
// Remove the created entry to avoid side effects on other tests
|
// Remove the created entry to avoid side effects on other tests
|
||||||
if (isset($content['id'])) {
|
if (isset($content['id'])) {
|
||||||
|
|
|
@ -6,6 +6,7 @@ use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
|
||||||
use Wallabag\CoreBundle\Entity\Config;
|
use Wallabag\CoreBundle\Entity\Config;
|
||||||
use Wallabag\CoreBundle\Entity\Entry;
|
use Wallabag\CoreBundle\Entity\Entry;
|
||||||
use Wallabag\CoreBundle\Entity\SiteCredential;
|
use Wallabag\CoreBundle\Entity\SiteCredential;
|
||||||
|
use Wallabag\CoreBundle\Helper\ContentProxy;
|
||||||
|
|
||||||
class EntryControllerTest extends WallabagCoreTestCase
|
class EntryControllerTest extends WallabagCoreTestCase
|
||||||
{
|
{
|
||||||
|
@ -1429,4 +1430,52 @@ class EntryControllerTest extends WallabagCoreTestCase
|
||||||
|
|
||||||
$client->getContainer()->get('craue_config')->set('restricted_access', 0);
|
$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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,11 @@ abstract class WallabagCoreTestCase extends WebTestCase
|
||||||
$this->client = static::createClient();
|
$this->client = static::createClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getNewClient()
|
||||||
|
{
|
||||||
|
return $this->client = static::createClient();
|
||||||
|
}
|
||||||
|
|
||||||
public function getClient()
|
public function getClient()
|
||||||
{
|
{
|
||||||
return $this->client;
|
return $this->client;
|
||||||
|
|
Loading…
Reference in a new issue