]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Fix tests
authorJeremy Benoist <jeremy.benoist@gmail.com>
Fri, 12 Oct 2018 13:01:19 +0000 (15:01 +0200)
committerJeremy Benoist <jeremy.benoist@gmail.com>
Sat, 19 Jan 2019 20:09:33 +0000 (21:09 +0100)
src/Wallabag/CoreBundle/Controller/EntryController.php
src/Wallabag/CoreBundle/Repository/EntryRepository.php

index 6c843ba7a8991039e67b1a2b7159dcbfe64cbcf1..669e15d7ca95262cd5fe49882ecbe2bd3c108c24 100644 (file)
@@ -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.
      *
index a26de0a83a5d7e8ea3282d55f4cb999242f4e025..6107e19ec65244f32efe322cfc51e2f533ae3795 100644 (file)
@@ -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)