namespace Wallabag\CoreBundle\Helper;
use Symfony\Component\Routing\Router;
-use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
+use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Wallabag\CoreBundle\Entity\Config;
/**
class Redirect
{
private $router;
+ private $tokenStorage;
private $actionMarkAsRead;
- public function __construct(Router $router, TokenStorage $token)
+ public function __construct(Router $router, TokenStorageInterface $tokenStorage)
{
$this->router = $router;
- $this->actionMarkAsRead = $token->getToken()->getUser()->getConfig()->getActionMarkAsRead();
+ $this->tokenStorage = $tokenStorage;
}
/**
*/
public function to($url, $fallback = '')
{
- if (Config::REDIRECT_TO_HOMEPAGE === $this->actionMarkAsRead) {
+ $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
+
+ if (null === $user || !is_object($user)) {
+ return $url;
+ }
+
+ if (Config::REDIRECT_TO_HOMEPAGE === $user->getConfig()->getActionMarkAsRead()) {
return $this->router->generate('homepage');
}
namespace Tests\Wallabag\CoreBundle\Controller;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
+use Wallabag\CoreBundle\Entity\Config;
use Wallabag\CoreBundle\Entity\Entry;
class EntryControllerTest extends WallabagCoreTestCase
$client->getContainer()->get('craue_config')->set('download_images_enabled', 0);
}
+
+ public function testRedirectToHomepage()
+ {
+ $this->logInAs('empty');
+ $client = $this->getClient();
+
+ $em = $client->getContainer()->get('doctrine.orm.entity_manager');
+ $user = $em
+ ->getRepository('WallabagUserBundle:User')
+ ->find($this->getLoggedInUserId());
+
+ if (!$user) {
+ $this->markTestSkipped('No user found in db.');
+ }
+
+ // Redirect to homepage
+ $config = $user->getConfig();
+ $config->setActionMarkAsRead(Config::REDIRECT_TO_HOMEPAGE);
+ $em->persist($config);
+ $em->flush();
+
+ $content = $client->getContainer()
+ ->get('doctrine.orm.entity_manager')
+ ->getRepository('WallabagCoreBundle:Entry')
+ ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
+
+ $client->request('GET', '/view/'.$content->getId());
+ $client->request('GET', '/archive/'.$content->getId());
+
+ $this->assertEquals(302, $client->getResponse()->getStatusCode());
+ $this->assertEquals('/', $client->getResponse()->headers->get('location'));
+ }
+
+ public function testRedirectToCurrentPage()
+ {
+ $this->logInAs('empty');
+ $client = $this->getClient();
+
+ $em = $client->getContainer()->get('doctrine.orm.entity_manager');
+ $user = $em
+ ->getRepository('WallabagUserBundle:User')
+ ->find($this->getLoggedInUserId());
+
+ if (!$user) {
+ $this->markTestSkipped('No user found in db.');
+ }
+
+ // Redirect to current page
+ $config = $user->getConfig();
+ $config->setActionMarkAsRead(Config::REDIRECT_TO_CURRENT_PAGE);
+ $em->persist($config);
+ $em->flush();
+
+ $content = $client->getContainer()
+ ->get('doctrine.orm.entity_manager')
+ ->getRepository('WallabagCoreBundle:Entry')
+ ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
+
+ $client->request('GET', '/view/'.$content->getId());
+ $client->request('GET', '/archive/'.$content->getId());
+
+ $this->assertEquals(302, $client->getResponse()->getStatusCode());
+ $this->assertContains('/view/'.$content->getId(), $client->getResponse()->headers->get('location'));
+ }
}
{
$redirectUrl = $this->redirect->to(null, 'fallback');
- $this->assertEquals('fallback', $redirectUrl);
+ $this->assertEquals(null, $redirectUrl);
}
public function testRedirectToNullWithoutFallback()
{
$redirectUrl = $this->redirect->to(null);
- $this->assertEquals($this->routerMock->generate('homepage'), $redirectUrl);
+ $this->assertEquals(null, $redirectUrl);
}
public function testRedirectToValidUrl()