diff options
-rw-r--r-- | src/Wallabag/CoreBundle/Helper/ContentProxy.php | 12 | ||||
-rw-r--r-- | tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php | 34 |
2 files changed, 43 insertions, 3 deletions
diff --git a/src/Wallabag/CoreBundle/Helper/ContentProxy.php b/src/Wallabag/CoreBundle/Helper/ContentProxy.php index fd97e0ff..1ac7ad83 100644 --- a/src/Wallabag/CoreBundle/Helper/ContentProxy.php +++ b/src/Wallabag/CoreBundle/Helper/ContentProxy.php | |||
@@ -122,15 +122,21 @@ class ContentProxy | |||
122 | */ | 122 | */ |
123 | public function updatePublishedAt(Entry $entry, $value) | 123 | public function updatePublishedAt(Entry $entry, $value) |
124 | { | 124 | { |
125 | $date = $value instanceof \DateTime ? $value->date : $value; | 125 | $date = $value; |
126 | 126 | ||
127 | // is it a timestamp? | 127 | // is it a timestamp? |
128 | if (filter_var($date, FILTER_VALIDATE_INT) !== false) { | 128 | if (filter_var($date, FILTER_VALIDATE_INT) !== false) { |
129 | $date = '@' . $value; | 129 | $date = '@' . $date; |
130 | } | 130 | } |
131 | 131 | ||
132 | try { | 132 | try { |
133 | $entry->setPublishedAt(new \DateTime($date)); | 133 | // is it already a DateTime? |
134 | // (it's inside the try/catch in case of fail to be parse time string) | ||
135 | if (!$date instanceof \DateTime) { | ||
136 | $date = new \DateTime($date); | ||
137 | } | ||
138 | |||
139 | $entry->setPublishedAt($date); | ||
134 | } catch (\Exception $e) { | 140 | } catch (\Exception $e) { |
135 | $this->logger->warning('Error while defining date', ['e' => $e, 'url' => $entry->getUrl(), 'date' => $value]); | 141 | $this->logger->warning('Error while defining date', ['e' => $e, 'url' => $entry->getUrl(), 'date' => $value]); |
136 | } | 142 | } |
diff --git a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php index c76be13d..2dc08be2 100644 --- a/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php +++ b/tests/Wallabag/ApiBundle/Controller/EntryRestControllerTest.php | |||
@@ -421,6 +421,16 @@ class EntryRestControllerTest extends WallabagApiTestCase | |||
421 | 421 | ||
422 | public function testPostSameEntry() | 422 | public function testPostSameEntry() |
423 | { | 423 | { |
424 | $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); | ||
425 | $entry = new Entry($em->getReference(User::class, 1)); | ||
426 | $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'); | ||
427 | $entry->setArchived(true); | ||
428 | $entry->addTag((new Tag())->setLabel('google')); | ||
429 | $entry->addTag((new Tag())->setLabel('apple')); | ||
430 | $em->persist($entry); | ||
431 | $em->flush(); | ||
432 | $em->clear(); | ||
433 | |||
424 | $this->client->request('POST', '/api/entries.json', [ | 434 | $this->client->request('POST', '/api/entries.json', [ |
425 | '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', | 435 | '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', |
426 | 'archive' => '1', | 436 | 'archive' => '1', |
@@ -1046,4 +1056,28 @@ class EntryRestControllerTest extends WallabagApiTestCase | |||
1046 | $this->assertSame(400, $this->client->getResponse()->getStatusCode()); | 1056 | $this->assertSame(400, $this->client->getResponse()->getStatusCode()); |
1047 | $this->assertContains('API limit reached', $this->client->getResponse()->getContent()); | 1057 | $this->assertContains('API limit reached', $this->client->getResponse()->getContent()); |
1048 | } | 1058 | } |
1059 | |||
1060 | public function testRePostEntryAndReUsePublishedAt() | ||
1061 | { | ||
1062 | $em = $this->client->getContainer()->get('doctrine.orm.entity_manager'); | ||
1063 | $entry = new Entry($em->getReference(User::class, 1)); | ||
1064 | $entry->setTitle('Antoine de Caunes : « Je veux avoir le droit de tâtonner »'); | ||
1065 | $entry->setContent('hihi'); | ||
1066 | $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'); | ||
1067 | $entry->setPublishedAt(new \DateTime('2017-06-26T07:46:02+0200')); | ||
1068 | $em->persist($entry); | ||
1069 | $em->flush(); | ||
1070 | $em->clear(); | ||
1071 | |||
1072 | $this->client->request('POST', '/api/entries.json', [ | ||
1073 | 'url' => 'http://www.lemonde.fr/m-perso/article/2017/06/25/antoine-de-caunes-je-veux-avoir-le-droit-de-tatonner_5150728_4497916.html', | ||
1074 | ]); | ||
1075 | |||
1076 | $this->assertSame(200, $this->client->getResponse()->getStatusCode()); | ||
1077 | |||
1078 | $content = json_decode($this->client->getResponse()->getContent(), true); | ||
1079 | |||
1080 | $this->assertGreaterThan(0, $content['id']); | ||
1081 | $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']); | ||
1082 | } | ||
1049 | } | 1083 | } |