}
/**
- * Shows random unread entry.
+ * Shows random entry depending on the given type.
*
* @param Entry $entry
*
- * @Route("/unread/random", name="unread_random")
+ * @Route("/{type}/random", name="random_entry", requirements={"_locale": "unread|starred|archive|untagged|all"})
*
- * @return \Symfony\Component\HttpFoundation\Response
- */
- public function showRandomUnreadEntryAction()
- {
- return $this->showRandomEntries('unread');
- }
-
- /**
- * Shows random favorite entry.
- *
- * @param Entry $entry
- *
- * @Route("/starred/random", name="starred_random")
- *
- * @return \Symfony\Component\HttpFoundation\Response
- */
- public function showRandomStarredEntryAction()
- {
- return $this->showRandomEntries('starred');
- }
-
- /**
- * Shows random archived entry.
- *
- * @param Entry $entry
- *
- * @Route("/archive/random", name="archive_random")
- *
- * @return \Symfony\Component\HttpFoundation\Response
+ * @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
- public function showRandomArchiveEntryAction()
+ public function redirectRandomEntryAction($type = 'all')
{
- return $this->showRandomEntries('archive');
- }
+ try {
+ $entry = $this->get('wallabag_core.entry_repository')
+ ->getRandomEntry($this->getUser()->getId(), $type);
+ } catch (NoResultException $e) {
+ $bag = $this->get('session')->getFlashBag();
+ $bag->clear();
+ $bag->add('notice', 'flashes.entry.notice.no_random_entry');
- /**
- * Shows random all entry.
- *
- * @param Entry $entry
- *
- * @Route("/untagged/random", name="untagged_random")
- *
- * @return \Symfony\Component\HttpFoundation\Response
- */
- public function showRandomUntaggedEntryAction()
- {
- return $this->showRandomEntries('untagged');
- }
+ return $this->redirect($this->generateUrl('homepage'));
+ }
- /**
- * Shows random all entry.
- *
- * @param Entry $entry
- *
- * @Route("/all/random", name="all_random")
- *
- * @return \Symfony\Component\HttpFoundation\Response
- */
- public function showRandomAllEntryAction()
- {
- return $this->showRandomEntries();
+ return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
}
/**
);
}
- /**
- * Global method to retrieve random entries depending on the given type.
- *
- * @param string $type Entries type: unread, starred, archive or untagged
- *
- * @return \Symfony\Component\HttpFoundation\RedirectResponse
- */
- private function showRandomEntries($type)
- {
- $repository = $this->get('wallabag_core.entry_repository');
-
- try {
- $entry = $repository->getRandomEntry($this->getUser()->getId(), $type);
- } catch (NoResultException $e) {
- $bag = $this->get('session')->getFlashBag();
- $bag->clear();
- $bag->add('notice', 'flashes.entry.notice.no_random_entry');
-
- return $this->redirect($this->generateUrl('homepage'));
- }
-
- return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
- }
-
/**
* Fetch content and update entry.
* In case it fails, $entry->getContent will return an error message.
$this->assertSame(sprintf('/remove-tag/%s/%s', $entry->getId(), $tag->getId()), $link);
}
+
+ public function testRandom()
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $client->request('GET', '/unread/random');
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+ $this->assertContains('/view/', $client->getResponse()->getTargetUrl(), 'Unread random');
+
+ $client->request('GET', '/starred/random');
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+ $this->assertContains('/view/', $client->getResponse()->getTargetUrl(), 'Starred random');
+
+ $client->request('GET', '/archive/random');
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+ $this->assertContains('/view/', $client->getResponse()->getTargetUrl(), 'Archive random');
+
+ $client->request('GET', '/untagged/random');
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+ $this->assertContains('/view/', $client->getResponse()->getTargetUrl(), 'Untagged random');
+
+ $client->request('GET', '/all/random');
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+ $this->assertContains('/view/', $client->getResponse()->getTargetUrl(), 'All random');
+ }
}