From 30432a03b74b9e682ef931e07cb951bdea4befa8 Mon Sep 17 00:00:00 2001 From: webchick <drupal@webchick.net> Date: Fri, 13 Feb 2015 12:03:54 -0800 Subject: [PATCH] Issue #1986330 by subhojit777, marcelodornelas, wheatpenny, kasperg, timaholt, stefank, AkshayKalose, develCuy, valthebald, moymilo, YesCT, dawehner, tstoeckler: When Batch ID doesn't exist, Drupal should emit a 404 --- core/includes/batch.inc | 5 +- .../Tests/Core/Batch/BatchNotFoundTest.php | 76 +++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 core/tests/Drupal/Tests/Core/Batch/BatchNotFoundTest.php diff --git a/core/includes/batch.inc b/core/includes/batch.inc index 7d905cdade5e..89bd7e4a8851 100644 --- a/core/includes/batch.inc +++ b/core/includes/batch.inc @@ -15,6 +15,7 @@ */ use Drupal\Component\Utility\SafeMarkup; +use Drupal\Component\Utility\String; use Drupal\Component\Utility\Timer; use Drupal\Component\Utility\UrlHelper; use Drupal\Core\Batch\Percentage; @@ -23,6 +24,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RedirectResponse; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Renders the batch processing page based on the current state of the batch. @@ -43,8 +45,7 @@ function _batch_page(Request $request) { if (!$batch) { $batch = \Drupal::service('batch.storage')->load($request_id); if (!$batch) { - drupal_set_message(t('No active batch.'), 'error'); - return new RedirectResponse(\Drupal::url('<front>', [], ['absolute' => TRUE])); + throw new NotFoundHttpException(String::format('Batch %id requested, but not found.', array('%id' => $request_id))); } } // Restore safe strings from previous batches. diff --git a/core/tests/Drupal/Tests/Core/Batch/BatchNotFoundTest.php b/core/tests/Drupal/Tests/Core/Batch/BatchNotFoundTest.php new file mode 100644 index 000000000000..2105599cdb5a --- /dev/null +++ b/core/tests/Drupal/Tests/Core/Batch/BatchNotFoundTest.php @@ -0,0 +1,76 @@ +<?php + +/** + * @file + * Contains \Drupal\Tests\Core\Batch\BatchNotFoundTest. + */ + +namespace Drupal\Tests\Core\Batch; + +use Drupal\simpletest\WebTestBase; + +/** + * Tests if Drupal returns page not found error when batch ID does not exist. + * + * @group Batch + */ +class BatchNotFoundTest extends WebTestBase { + + /** + * The main user for testing. + * + * @var object + */ + protected $userToBeDeleted; + + /** + * Administrator user. + * + * @var object + */ + protected $adminUser; + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = array('views'); + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + + $this->adminUser = $this->drupalCreateUser(array('administer users'));; + $this->userToBeDeleted = $this->drupalCreateUser(); + } + + /** + * Tests for page not found error if batch ID does not exist. + */ + public function testBatchNotFound() { + $this->drupalLogin($this->adminUser); + + // Replicate a batch process by cancelling a user. + $edit = array( + 'action' => 'user_cancel_user_action', + 'user_bulk_form[2]' => TRUE, + ); + $this->drupalPostForm('admin/people', $edit, t('Apply')); + $this->drupalPostForm(NULL, array(), t('Cancel accounts')); + + $batch_id = db_next_id(); + + $this->drupalGet('batch', array( + 'query' => array( + 'op' => 'start', + 'id' => $batch_id, + ), + )); + + $this->assertResponse(404); + } + +} -- GitLab