aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas Lœuillet <nicolas@loeuillet.org>2015-12-28 13:51:48 +0100
committerNicolas Lœuillet <nicolas@loeuillet.org>2015-12-28 13:51:48 +0100
commitc997cfcc9c161241a6398b0942a1a869688d807a (patch)
tree42c40d24baab371f5dd41eda12d3cbdbe6445a51
parentd25b8288216a09fa5cf7f40e614c133a6edd8a67 (diff)
parent2863bf2ab58a4903128f60751aa416130db93e52 (diff)
downloadwallabag-c997cfcc9c161241a6398b0942a1a869688d807a.tar.gz
wallabag-c997cfcc9c161241a6398b0942a1a869688d807a.tar.zst
wallabag-c997cfcc9c161241a6398b0942a1a869688d807a.zip
Merge pull request #1540 from wallabag/v2-fix-delete
v2 – Don't redirect to the content page after deletion
-rw-r--r--src/Wallabag/CoreBundle/Controller/EntryController.php14
-rw-r--r--src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php12
-rw-r--r--src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php46
3 files changed, 64 insertions, 8 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php
index 6769799b..2f3fd6a9 100644
--- a/src/Wallabag/CoreBundle/Controller/EntryController.php
+++ b/src/Wallabag/CoreBundle/Controller/EntryController.php
@@ -5,6 +5,7 @@ namespace Wallabag\CoreBundle\Controller;
5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6use Symfony\Bundle\FrameworkBundle\Controller\Controller; 6use Symfony\Bundle\FrameworkBundle\Controller\Controller;
7use Symfony\Component\HttpFoundation\Request; 7use Symfony\Component\HttpFoundation\Request;
8use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
8use Wallabag\CoreBundle\Entity\Entry; 9use Wallabag\CoreBundle\Entity\Entry;
9use Wallabag\CoreBundle\Form\Type\NewEntryType; 10use Wallabag\CoreBundle\Form\Type\NewEntryType;
10use Wallabag\CoreBundle\Form\Type\EditEntryType; 11use Wallabag\CoreBundle\Form\Type\EditEntryType;
@@ -316,7 +317,7 @@ class EntryController extends Controller
316 } 317 }
317 318
318 /** 319 /**
319 * Deletes entry and redirect to the homepage. 320 * Deletes entry and redirect to the homepage or the last viewed page.
320 * 321 *
321 * @param Entry $entry 322 * @param Entry $entry
322 * 323 *
@@ -328,6 +329,14 @@ class EntryController extends Controller
328 { 329 {
329 $this->checkUserAction($entry); 330 $this->checkUserAction($entry);
330 331
332 // generates the view url for this entry to check for redirection later
333 // to avoid redirecting to the deleted entry. Ugh.
334 $url = $this->generateUrl(
335 'view',
336 array('id' => $entry->getId()),
337 UrlGeneratorInterface::ABSOLUTE_URL
338 );
339
331 $em = $this->getDoctrine()->getManager(); 340 $em = $this->getDoctrine()->getManager();
332 $em->remove($entry); 341 $em->remove($entry);
333 $em->flush(); 342 $em->flush();
@@ -337,7 +346,8 @@ class EntryController extends Controller
337 'Entry deleted' 346 'Entry deleted'
338 ); 347 );
339 348
340 return $this->redirect($request->headers->get('referer')); 349 // don't redirect user to the deleted entry
350 return $this->redirect($url !== $request->headers->get('referer') ?: $this->generateUrl('homepage'));
341 } 351 }
342 352
343 /** 353 /**
diff --git a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php
index 176c529e..0513cdb8 100644
--- a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php
+++ b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadEntryData.php
@@ -16,7 +16,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
16 public function load(ObjectManager $manager) 16 public function load(ObjectManager $manager)
17 { 17 {
18 $entry1 = new Entry($this->getReference('admin-user')); 18 $entry1 = new Entry($this->getReference('admin-user'));
19 $entry1->setUrl('http://0.0.0.0'); 19 $entry1->setUrl('http://0.0.0.0/entry1');
20 $entry1->setReadingTime(11); 20 $entry1->setReadingTime(11);
21 $entry1->setDomainName('domain.io'); 21 $entry1->setDomainName('domain.io');
22 $entry1->setMimetype('text/html'); 22 $entry1->setMimetype('text/html');
@@ -29,7 +29,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
29 $this->addReference('entry1', $entry1); 29 $this->addReference('entry1', $entry1);
30 30
31 $entry2 = new Entry($this->getReference('admin-user')); 31 $entry2 = new Entry($this->getReference('admin-user'));
32 $entry2->setUrl('http://0.0.0.0'); 32 $entry2->setUrl('http://0.0.0.0/entry2');
33 $entry2->setReadingTime(1); 33 $entry2->setReadingTime(1);
34 $entry2->setDomainName('domain.io'); 34 $entry2->setDomainName('domain.io');
35 $entry2->setMimetype('text/html'); 35 $entry2->setMimetype('text/html');
@@ -42,7 +42,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
42 $this->addReference('entry2', $entry2); 42 $this->addReference('entry2', $entry2);
43 43
44 $entry3 = new Entry($this->getReference('bob-user')); 44 $entry3 = new Entry($this->getReference('bob-user'));
45 $entry3->setUrl('http://0.0.0.0'); 45 $entry3->setUrl('http://0.0.0.0/entry3');
46 $entry3->setReadingTime(1); 46 $entry3->setReadingTime(1);
47 $entry3->setDomainName('domain.io'); 47 $entry3->setDomainName('domain.io');
48 $entry3->setMimetype('text/html'); 48 $entry3->setMimetype('text/html');
@@ -63,7 +63,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
63 $this->addReference('entry3', $entry3); 63 $this->addReference('entry3', $entry3);
64 64
65 $entry4 = new Entry($this->getReference('admin-user')); 65 $entry4 = new Entry($this->getReference('admin-user'));
66 $entry4->setUrl('http://0.0.0.0'); 66 $entry4->setUrl('http://0.0.0.0/entry4');
67 $entry4->setReadingTime(12); 67 $entry4->setReadingTime(12);
68 $entry4->setDomainName('domain.io'); 68 $entry4->setDomainName('domain.io');
69 $entry4->setMimetype('text/html'); 69 $entry4->setMimetype('text/html');
@@ -84,7 +84,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
84 $this->addReference('entry4', $entry4); 84 $this->addReference('entry4', $entry4);
85 85
86 $entry5 = new Entry($this->getReference('admin-user')); 86 $entry5 = new Entry($this->getReference('admin-user'));
87 $entry5->setUrl('http://0.0.0.0'); 87 $entry5->setUrl('http://0.0.0.0/entry5');
88 $entry5->setReadingTime(12); 88 $entry5->setReadingTime(12);
89 $entry5->setDomainName('domain.io'); 89 $entry5->setDomainName('domain.io');
90 $entry5->setMimetype('text/html'); 90 $entry5->setMimetype('text/html');
@@ -99,7 +99,7 @@ class LoadEntryData extends AbstractFixture implements OrderedFixtureInterface
99 $this->addReference('entry5', $entry5); 99 $this->addReference('entry5', $entry5);
100 100
101 $entry6 = new Entry($this->getReference('admin-user')); 101 $entry6 = new Entry($this->getReference('admin-user'));
102 $entry6->setUrl('http://0.0.0.0'); 102 $entry6->setUrl('http://0.0.0.0/entry6');
103 $entry6->setReadingTime(12); 103 $entry6->setReadingTime(12);
104 $entry6->setDomainName('domain.io'); 104 $entry6->setDomainName('domain.io');
105 $entry6->setMimetype('text/html'); 105 $entry6->setMimetype('text/html');
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
index af62aee8..9f585d85 100644
--- a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
+++ b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
@@ -3,6 +3,7 @@
3namespace Wallabag\CoreBundle\Tests\Controller; 3namespace Wallabag\CoreBundle\Tests\Controller;
4 4
5use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; 5use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
6use Wallabag\CoreBundle\Entity\Entry;
6 7
7class EntryControllerTest extends WallabagCoreTestCase 8class EntryControllerTest extends WallabagCoreTestCase
8{ 9{
@@ -290,6 +291,51 @@ class EntryControllerTest extends WallabagCoreTestCase
290 $this->assertEquals(404, $client->getResponse()->getStatusCode()); 291 $this->assertEquals(404, $client->getResponse()->getStatusCode());
291 } 292 }
292 293
294 /**
295 * It will create a new entry.
296 * Browse to it.
297 * Then remove it.
298 *
299 * And it'll check that user won't be redirected to the view page of the content when it had been removed
300 */
301 public function testViewAndDelete()
302 {
303 $this->logInAs('admin');
304 $client = $this->getClient();
305
306 // add a new content to be removed later
307 $user = $client->getContainer()
308 ->get('doctrine.orm.entity_manager')
309 ->getRepository('WallabagUserBundle:User')
310 ->findOneByUserName('admin');
311
312 $content = new Entry($user);
313 $content->setUrl('http://1.1.1.1/entry');
314 $content->setReadingTime(12);
315 $content->setDomainName('domain.io');
316 $content->setMimetype('text/html');
317 $content->setTitle('test title entry');
318 $content->setContent('This is my content /o/');
319 $content->setArchived(true);
320 $content->setLanguage('fr');
321
322 $client->getContainer()
323 ->get('doctrine.orm.entity_manager')
324 ->persist($content);
325 $client->getContainer()
326 ->get('doctrine.orm.entity_manager')
327 ->flush();
328
329 $client->request('GET', '/view/'.$content->getId());
330 $this->assertEquals(200, $client->getResponse()->getStatusCode());
331
332 $client->request('GET', '/delete/'.$content->getId());
333 $this->assertEquals(302, $client->getResponse()->getStatusCode());
334
335 $client->followRedirect();
336 $this->assertEquals(200, $client->getResponse()->getStatusCode());
337 }
338
293 public function testViewOtherUserEntry() 339 public function testViewOtherUserEntry()
294 { 340 {
295 $this->logInAs('admin'); 341 $this->logInAs('admin');