diff --git a/devel.routing.yml b/devel.routing.yml index bfbb70c3e44b8bd675dec54a7f9a36cb16dc596c..d96092bd4943c436ddd4d93ff69e3adef8fa4544 100644 --- a/devel.routing.yml +++ b/devel.routing.yml @@ -19,8 +19,8 @@ devel.reinstall: devel.menu_rebuild: path: '/devel/menu/reset' defaults: - _form: '\Drupal\devel\Form\DevelRebuildMenus' - _title: 'Rebuild menus' + _form: '\Drupal\devel\Form\RouterRebuildConfirmForm' + _title: 'Rebuild router' options: _admin_route: TRUE requirements: diff --git a/src/Form/DevelRebuildMenus.php b/src/Form/RouterRebuildConfirmForm.php similarity index 77% rename from src/Form/DevelRebuildMenus.php rename to src/Form/RouterRebuildConfirmForm.php index 0fb26e626270bdf77a332d0954409d8547fb0d84..a1daf8977b867d00bd2dd7a4fc8d8575e8d3a2ef 100644 --- a/src/Form/DevelRebuildMenus.php +++ b/src/Form/RouterRebuildConfirmForm.php @@ -11,7 +11,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface; /** * Provides confirmation form for rebuilding the routes. */ -class DevelRebuildMenus extends ConfirmFormBase { +class RouterRebuildConfirmForm extends ConfirmFormBase { /** * The route builder service. @@ -21,7 +21,7 @@ class DevelRebuildMenus extends ConfirmFormBase { protected $routeBuilder; /** - * Constructs a new DevelRebuildMenus object. + * Constructs a new RouterRebuildConfirmForm object. * * @param \Drupal\Core\Routing\RouteBuilderInterface $route_builder * The route builder service. @@ -50,7 +50,7 @@ class DevelRebuildMenus extends ConfirmFormBase { * {@inheritdoc} */ public function getQuestion() { - return $this->t('Are you sure you want to rebuild menus?'); + return $this->t('Are you sure you want to rebuild the router?'); } /** @@ -64,7 +64,7 @@ class DevelRebuildMenus extends ConfirmFormBase { * {@inheritdoc} */ public function getDescription() { - return $this->t('Rebuild menu based on hook_menu() and revert any custom changes. All menu items return to their default settings.'); + return $this->t('Rebuilds the routes information gathering all routing data from .routing.yml files and from classes which subscribe to the route build events. This action cannot be undone.'); } /** @@ -79,7 +79,7 @@ class DevelRebuildMenus extends ConfirmFormBase { */ public function submitForm(array &$form, FormStateInterface $form_state) { $this->routeBuilder->rebuild(); - drupal_set_message($this->t('The menu router has been rebuilt.')); + drupal_set_message($this->t('The router has been rebuilt.')); $form_state->setRedirect('<front>'); } diff --git a/src/Tests/DevelRebuildMenusTest.php b/src/Tests/DevelRebuildMenusTest.php deleted file mode 100644 index 95abf19d27ed5e5dc4b12b8e7e9a5771114b3829..0000000000000000000000000000000000000000 --- a/src/Tests/DevelRebuildMenusTest.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php - -namespace Drupal\devel\Tests; - -use Drupal\simpletest\WebTestBase; - -/** - * Tests routes rebuild. - * - * @group devel - */ -class DevelRebuildMenusTest extends WebTestBase { - - /** - * Modules to enable. - * - * @var array - */ - public static $modules = array('devel'); - - /** - * Set up test. - */ - protected function setUp() { - parent::setUp(); - - $web_user = $this->drupalCreateUser(array('administer site configuration')); - $this->drupalLogin($web_user); - } - - /** - * Test routes rebuild. - */ - public function testDevelRebuildMenus() { - $this->drupalGet('devel/menu/reset'); - $this->assertResponse(200); - $this->drupalPostForm('devel/menu/reset', array(), t('Rebuild')); - $this->assertText(t('The menu router has been rebuilt.')); - } - -} diff --git a/tests/modules/devel_test/devel_test.services.yml b/tests/modules/devel_test/devel_test.services.yml new file mode 100644 index 0000000000000000000000000000000000000000..17fc2194a7e3ccddde216a95bb8b42fdc9ec5823 --- /dev/null +++ b/tests/modules/devel_test/devel_test.services.yml @@ -0,0 +1,6 @@ +services: + + devel_test.test_route_subscriber: + class: Drupal\devel_test\Routing\TestRouteSubscriber + tags: + - { name: event_subscriber } diff --git a/tests/modules/devel_test/src/Routing/TestRouteSubscriber.php b/tests/modules/devel_test/src/Routing/TestRouteSubscriber.php new file mode 100644 index 0000000000000000000000000000000000000000..1bf9332817810d07d96f7d1ff5a2387615835743 --- /dev/null +++ b/tests/modules/devel_test/src/Routing/TestRouteSubscriber.php @@ -0,0 +1,20 @@ +<?php + +namespace Drupal\devel_test\Routing; + +use Drupal\Core\Routing\RouteSubscriberBase; +use Symfony\Component\Routing\RouteCollection; + +/** + * Router subscriber class for testing purpose. + */ +class TestRouteSubscriber extends RouteSubscriberBase { + + /** + * {@inheritdoc} + */ + protected function alterRoutes(RouteCollection $collection) { + \Drupal::state()->set('devel_test_route_rebuild','Router rebuild fired'); + } + +} diff --git a/tests/src/Functional/DevelRouterRebuildTest.php b/tests/src/Functional/DevelRouterRebuildTest.php new file mode 100644 index 0000000000000000000000000000000000000000..58436a896f1a7d8acb9289d8c542a3c49c9a50f8 --- /dev/null +++ b/tests/src/Functional/DevelRouterRebuildTest.php @@ -0,0 +1,46 @@ +<?php + +namespace Drupal\Tests\devel\Functional; + +use Drupal\Tests\BrowserTestBase; + +/** + * Tests routes rebuild. + * + * @group devel + */ +class DevelRouterRebuildTest extends BrowserTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = ['devel', 'devel_test']; + + /** + * Test routes rebuild. + */ + public function testRouterRebuildConfirmForm() { + // Reset the state flag. + \Drupal::state()->set('devel_test_route_rebuild', NULL); + + $this->drupalGet('devel/menu/reset'); + $this->assertSession()->statusCodeEquals(403); + + $web_user = $this->drupalCreateUser(['administer site configuration']); + $this->drupalLogin($web_user); + + $this->drupalGet('devel/menu/reset'); + $this->assertSession()->statusCodeEquals(200); + $this->assertSession()->pageTextContains('Are you sure you want to rebuild the router?'); + $route_rebuild_state = \Drupal::state()->get('devel_test_route_rebuild'); + $this->assertEmpty($route_rebuild_state); + + $this->drupalPostForm('devel/menu/reset', [], t('Rebuild')); + $this->assertSession()->pageTextContains('The router has been rebuilt.'); + $route_rebuild_state = \Drupal::state()->get('devel_test_route_rebuild'); + $this->assertEquals('Router rebuild fired', $route_rebuild_state); + } + +}