Fix tests

This commit is contained in:
Jeremy Benoist 2018-10-12 15:01:19 +02:00
parent 09ef25c3c3
commit f85d220c19
No known key found for this signature in database
GPG key ID: BCA73962457ACC3C
2 changed files with 94 additions and 99 deletions

View file

@ -233,6 +233,21 @@ class EntryController extends Controller
return $this->showEntries('starred', $request, $page); 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. * Shows random unread entry.
* *
@ -244,19 +259,7 @@ class EntryController extends Controller
*/ */
public function showRandomUnreadEntryAction() public function showRandomUnreadEntryAction()
{ {
$repository = $this->get('wallabag_core.entry_repository'); return $this->showRandomEntries('unread');
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()]));
} }
/** /**
@ -270,19 +273,7 @@ class EntryController extends Controller
*/ */
public function showRandomStarredEntryAction() public function showRandomStarredEntryAction()
{ {
$repository = $this->get('wallabag_core.entry_repository'); return $this->showRandomEntries('starred');
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()]));
} }
/** /**
@ -296,19 +287,21 @@ class EntryController extends Controller
*/ */
public function showRandomArchiveEntryAction() public function showRandomArchiveEntryAction()
{ {
$repository = $this->get('wallabag_core.entry_repository'); return $this->showRandomEntries('archive');
}
try { /**
$entry = $repository->getRandomEntry($this->getUser()->getId(), 'starred'); * Shows random all entry.
} catch (NoResultException $e) { *
$bag = $this->get('session')->getFlashBag(); * @param Entry $entry
$bag->clear(); *
$bag->add('notice', 'flashes.entry.notice.no_random_entry'); * @Route("/untagged/random", name="untagged_random")
*
return $this->redirect($this->generateUrl('homepage')); * @return \Symfony\Component\HttpFoundation\Response
} */
public function showRandomUntaggedEntryAction()
return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()])); {
return $this->showRandomEntries('untagged');
} }
/** /**
@ -322,19 +315,7 @@ class EntryController extends Controller
*/ */
public function showRandomAllEntryAction() public function showRandomAllEntryAction()
{ {
$repository = $this->get('wallabag_core.entry_repository'); return $this->showRandomEntries();
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()]));
} }
/** /**
@ -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 * Global method to retrieve entries depending on the given type
* It returns the response to be send. * 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. * Check if the logged user can manage the given entry.
* *

View file

@ -464,6 +464,11 @@ class EntryRepository extends EntityRepository
$qb->andWhere('e.isStarred = true'); $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') return $qb->andWhere('e.id >= :rand')
->setParameter('rand', rand(0, $max)) ->setParameter('rand', rand(0, $max))
->setMaxResults(1) ->setMaxResults(1)