Merge pull request #3280 from Simounet/fix/2.3-date

Fix updatePublishedAt on already parsed article's date
This commit is contained in:
Jérémy Benoist 2017-07-25 16:54:43 +02:00 committed by GitHub
commit 839edf32cc
2 changed files with 42 additions and 2 deletions

View file

@ -126,11 +126,17 @@ class ContentProxy
// is it a timestamp? // is it a timestamp?
if (filter_var($date, FILTER_VALIDATE_INT) !== false) { if (filter_var($date, FILTER_VALIDATE_INT) !== false) {
$date = '@' . $value; $date = '@' . $date;
} }
try { try {
$entry->setPublishedAt(new \DateTime($date)); // is it already a DateTime?
// (it's inside the try/catch in case of fail to be parse time string)
if (!$date instanceof \DateTime) {
$date = new \DateTime($date);
}
$entry->setPublishedAt($date);
} catch (\Exception $e) { } catch (\Exception $e) {
$this->logger->warning('Error while defining date', ['e' => $e, 'url' => $entry->getUrl(), 'date' => $value]); $this->logger->warning('Error while defining date', ['e' => $e, 'url' => $entry->getUrl(), 'date' => $value]);
} }

View file

@ -421,6 +421,16 @@ class EntryRestControllerTest extends WallabagApiTestCase
public function testPostSameEntry() public function testPostSameEntry()
{ {
$em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
$entry = new Entry($em->getReference(User::class, 1));
$entry->setUrl('http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html');
$entry->setArchived(true);
$entry->addTag((new Tag())->setLabel('google'));
$entry->addTag((new Tag())->setLabel('apple'));
$em->persist($entry);
$em->flush();
$em->clear();
$this->client->request('POST', '/api/entries.json', [ $this->client->request('POST', '/api/entries.json', [
'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', 'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html',
'archive' => '1', 'archive' => '1',
@ -1046,4 +1056,28 @@ class EntryRestControllerTest extends WallabagApiTestCase
$this->assertSame(400, $this->client->getResponse()->getStatusCode()); $this->assertSame(400, $this->client->getResponse()->getStatusCode());
$this->assertContains('API limit reached', $this->client->getResponse()->getContent()); $this->assertContains('API limit reached', $this->client->getResponse()->getContent());
} }
public function testRePostEntryAndReUsePublishedAt()
{
$em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
$entry = new Entry($em->getReference(User::class, 1));
$entry->setTitle('Antoine de Caunes : « Je veux avoir le droit de tâtonner »');
$entry->setContent('hihi');
$entry->setUrl('http://www.lemonde.fr/m-perso/article/2017/06/25/antoine-de-caunes-je-veux-avoir-le-droit-de-tatonner_5150728_4497916.html');
$entry->setPublishedAt(new \DateTime('2017-06-26T07:46:02+0200'));
$em->persist($entry);
$em->flush();
$em->clear();
$this->client->request('POST', '/api/entries.json', [
'url' => 'http://www.lemonde.fr/m-perso/article/2017/06/25/antoine-de-caunes-je-veux-avoir-le-droit-de-tatonner_5150728_4497916.html',
]);
$this->assertSame(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertGreaterThan(0, $content['id']);
$this->assertSame('http://www.lemonde.fr/m-perso/article/2017/06/25/antoine-de-caunes-je-veux-avoir-le-droit-de-tatonner_5150728_4497916.html', $content['url']);
}
} }