]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Merge pull request #1540 from wallabag/v2-fix-delete
authorNicolas Lœuillet <nicolas@loeuillet.org>
Mon, 28 Dec 2015 12:51:48 +0000 (13:51 +0100)
committerNicolas Lœuillet <nicolas@loeuillet.org>
Mon, 28 Dec 2015 12:51:48 +0000 (13:51 +0100)
v2 –  Don't redirect to the content page after deletion

src/Wallabag/CoreBundle/Controller/EntryController.php
src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php
src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php

index 6769799b7f35e2f6693311fac517d4e4f1d723bd..2f3fd6a9348ab6ec26c0ae1b301de95610e3778b 100644 (file)
@@ -5,6 +5,7 @@ namespace Wallabag\CoreBundle\Controller;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
 use Wallabag\CoreBundle\Entity\Entry;
 use Wallabag\CoreBundle\Form\Type\NewEntryType;
 use Wallabag\CoreBundle\Form\Type\EditEntryType;
@@ -316,7 +317,7 @@ class EntryController extends Controller
     }
 
     /**
-     * Deletes entry and redirect to the homepage.
+     * Deletes entry and redirect to the homepage or the last viewed page.
      *
      * @param Entry $entry
      *
@@ -328,6 +329,14 @@ class EntryController extends Controller
     {
         $this->checkUserAction($entry);
 
+        // generates the view url for this entry to check for redirection later
+        // to avoid redirecting to the deleted entry. Ugh.
+        $url = $this->generateUrl(
+            'view',
+            array('id' => $entry->getId()),
+            UrlGeneratorInterface::ABSOLUTE_URL
+        );
+
         $em = $this->getDoctrine()->getManager();
         $em->remove($entry);
         $em->flush();
@@ -337,7 +346,8 @@ class EntryController extends Controller
             'Entry deleted'
         );
 
-        return $this->redirect($request->headers->get('referer'));
+        // don't redirect user to the deleted entry
+        return $this->redirect($url !== $request->headers->get('referer') ?: $this->generateUrl('homepage'));
     }
 
     /**
index 176c529e1978214bf71f7ae43fd76c61eeb6cc9b..0513cdb89af486fde35039a6a6f4f84439ac526e 100644 (file)
@@ -16,7 +16,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
     public function load(ObjectManager $manager)
     {
         $entry1 = new Entry($this->getReference('admin-user'));
-        $entry1->setUrl('http://0.0.0.0');
+        $entry1->setUrl('http://0.0.0.0/entry1');
         $entry1->setReadingTime(11);
         $entry1->setDomainName('domain.io');
         $entry1->setMimetype('text/html');
@@ -29,7 +29,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
         $this->addReference('entry1', $entry1);
 
         $entry2 = new Entry($this->getReference('admin-user'));
-        $entry2->setUrl('http://0.0.0.0');
+        $entry2->setUrl('http://0.0.0.0/entry2');
         $entry2->setReadingTime(1);
         $entry2->setDomainName('domain.io');
         $entry2->setMimetype('text/html');
@@ -42,7 +42,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
         $this->addReference('entry2', $entry2);
 
         $entry3 = new Entry($this->getReference('bob-user'));
-        $entry3->setUrl('http://0.0.0.0');
+        $entry3->setUrl('http://0.0.0.0/entry3');
         $entry3->setReadingTime(1);
         $entry3->setDomainName('domain.io');
         $entry3->setMimetype('text/html');
@@ -63,7 +63,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
         $this->addReference('entry3', $entry3);
 
         $entry4 = new Entry($this->getReference('admin-user'));
-        $entry4->setUrl('http://0.0.0.0');
+        $entry4->setUrl('http://0.0.0.0/entry4');
         $entry4->setReadingTime(12);
         $entry4->setDomainName('domain.io');
         $entry4->setMimetype('text/html');
@@ -84,7 +84,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
         $this->addReference('entry4', $entry4);
 
         $entry5 = new Entry($this->getReference('admin-user'));
-        $entry5->setUrl('http://0.0.0.0');
+        $entry5->setUrl('http://0.0.0.0/entry5');
         $entry5->setReadingTime(12);
         $entry5->setDomainName('domain.io');
         $entry5->setMimetype('text/html');
@@ -99,7 +99,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
         $this->addReference('entry5', $entry5);
 
         $entry6 = new Entry($this->getReference('admin-user'));
-        $entry6->setUrl('http://0.0.0.0');
+        $entry6->setUrl('http://0.0.0.0/entry6');
         $entry6->setReadingTime(12);
         $entry6->setDomainName('domain.io');
         $entry6->setMimetype('text/html');
index af62aee8d85f80fd2d1018a858cc14677583bf5e..9f585d85d722ecf13c89a5d6a287cccd9c0acbca 100644 (file)
@@ -3,6 +3,7 @@
 namespace Wallabag\CoreBundle\Tests\Controller;
 
 use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
+use Wallabag\CoreBundle\Entity\Entry;
 
 class EntryControllerTest extends WallabagCoreTestCase
 {
@@ -290,6 +291,51 @@ class EntryControllerTest extends WallabagCoreTestCase
         $this->assertEquals(404, $client->getResponse()->getStatusCode());
     }
 
+    /**
+     * It will create a new entry.
+     * Browse to it.
+     * Then remove it.
+     *
+     * And it'll check that user won't be redirected to the view page of the content when it had been removed
+     */
+    public function testViewAndDelete()
+    {
+        $this->logInAs('admin');
+        $client = $this->getClient();
+
+        // add a new content to be removed later
+        $user = $client->getContainer()
+            ->get('doctrine.orm.entity_manager')
+            ->getRepository('WallabagUserBundle:User')
+            ->findOneByUserName('admin');
+
+        $content = new Entry($user);
+        $content->setUrl('http://1.1.1.1/entry');
+        $content->setReadingTime(12);
+        $content->setDomainName('domain.io');
+        $content->setMimetype('text/html');
+        $content->setTitle('test title entry');
+        $content->setContent('This is my content /o/');
+        $content->setArchived(true);
+        $content->setLanguage('fr');
+
+        $client->getContainer()
+            ->get('doctrine.orm.entity_manager')
+            ->persist($content);
+        $client->getContainer()
+            ->get('doctrine.orm.entity_manager')
+            ->flush();
+
+        $client->request('GET', '/view/'.$content->getId());
+        $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+        $client->request('GET', '/delete/'.$content->getId());
+        $this->assertEquals(302, $client->getResponse()->getStatusCode());
+
+        $client->followRedirect();
+        $this->assertEquals(200, $client->getResponse()->getStatusCode());
+    }
+
     public function testViewOtherUserEntry()
     {
         $this->logInAs('admin');