From f85d220c19872dd7e9199fd150060555584a2886 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Fri, 12 Oct 2018 15:01:19 +0200 Subject: [PATCH] Fix tests --- .../CoreBundle/Controller/EntryController.php | 188 +++++++++--------- .../CoreBundle/Repository/EntryRepository.php | 5 + 2 files changed, 94 insertions(+), 99 deletions(-) diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index 6c843ba7..669e15d7 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php @@ -233,6 +233,21 @@ class EntryController extends Controller return $this->showEntries('starred', $request, $page); } + /** + * Shows untagged articles for current user. + * + * @param Request $request + * @param int $page + * + * @Route("/untagged/list/{page}", name="untagged", defaults={"page" = "1"}) + * + * @return \Symfony\Component\HttpFoundation\Response + */ + public function showUntaggedEntriesAction(Request $request, $page) + { + return $this->showEntries('untagged', $request, $page); + } + /** * Shows random unread entry. * @@ -244,19 +259,7 @@ class EntryController extends Controller */ public function showRandomUnreadEntryAction() { - $repository = $this->get('wallabag_core.entry_repository'); - - try { - $entry = $repository->getRandomEntry($this->getUser()->getId(), 'unread'); - } 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()])); + return $this->showRandomEntries('unread'); } /** @@ -270,19 +273,7 @@ class EntryController extends Controller */ public function showRandomStarredEntryAction() { - $repository = $this->get('wallabag_core.entry_repository'); - - try { - $entry = $repository->getRandomEntry($this->getUser()->getId(), 'starred'); - } 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()])); + return $this->showRandomEntries('starred'); } /** @@ -296,19 +287,21 @@ class EntryController extends Controller */ public function showRandomArchiveEntryAction() { - $repository = $this->get('wallabag_core.entry_repository'); - - try { - $entry = $repository->getRandomEntry($this->getUser()->getId(), 'starred'); - } 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->showRandomEntries('archive'); + } - return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()])); + /** + * 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'); } /** @@ -322,19 +315,7 @@ class EntryController extends Controller */ public function showRandomAllEntryAction() { - $repository = $this->get('wallabag_core.entry_repository'); - - try { - $entry = $repository->getRandomEntry($this->getUser()->getId()); - } 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()])); + return $this->showRandomEntries(); } /** @@ -570,54 +551,6 @@ class EntryController extends Controller ); } - /** - * Shows untagged articles for current user. - * - * @param Request $request - * @param int $page - * - * @Route("/untagged/list/{page}", name="untagged", defaults={"page" = "1"}) - * - * @return \Symfony\Component\HttpFoundation\Response - */ - public function showUntaggedEntriesAction(Request $request, $page) - { - return $this->showEntries('untagged', $request, $page); - } - - /** - * Fetch content and update entry. - * In case it fails, $entry->getContent will return an error message. - * - * @param Entry $entry - * @param string $prefixMessage Should be the translation key: entry_saved or entry_reloaded - */ - private function updateEntry(Entry $entry, $prefixMessage = 'entry_saved') - { - $message = 'flashes.entry.notice.' . $prefixMessage; - - try { - $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl()); - } catch (\Exception $e) { - $this->get('logger')->error('Error while saving an entry', [ - 'exception' => $e, - 'entry' => $entry, - ]); - - $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); - } - /** * Global method to retrieve entries depending on the given type * It returns the response to be send. @@ -690,6 +623,63 @@ class EntryController extends Controller ); } + /** + * 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. + * + * @param Entry $entry + * @param string $prefixMessage Should be the translation key: entry_saved or entry_reloaded + */ + private function updateEntry(Entry $entry, $prefixMessage = 'entry_saved') + { + $message = 'flashes.entry.notice.' . $prefixMessage; + + try { + $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl()); + } catch (\Exception $e) { + $this->get('logger')->error('Error while saving an entry', [ + 'exception' => $e, + 'entry' => $entry, + ]); + + $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); + } + /** * Check if the logged user can manage the given entry. * diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php index a26de0a8..6107e19e 100644 --- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php +++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php @@ -464,6 +464,11 @@ class EntryRepository extends EntityRepository $qb->andWhere('e.isStarred = true'); } + if ('untagged' === $status) { + $qb->leftJoin('e.tags', 't'); + $qb->andWhere('t.id is null'); + } + return $qb->andWhere('e.id >= :rand') ->setParameter('rand', rand(0, $max)) ->setMaxResults(1) -- 2.41.0