admin_ui-8.x-1.x-dev/tests/src/Functional/RedirectRoutesTest.php

tests/src/Functional/RedirectRoutesTest.php
<?php

namespace Drupal\Tests\admin_ui_support\Functional;

use Drupal\Tests\BrowserTestBase;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;

/**
 * Tests redirects of routes.
 *
 * @group admin_ui_support
 */
class RedirectRoutesTest extends BrowserTestBase {

  public static $modules = ['user', 'node', 'admin_ui_support'];

  /**
   * {@inheritdoc}
   */
  protected function setUp() {
    parent::setUp();
    $this->drupalLogin($this->createUser([
      'administer permissions',
      'administer site configuration',
    ]));

    NodeType::create([
      'type' => 'page',
    ])->save();

    Node::create([
      'type' => 'page',
      'title' => 'Test title',
      'status' => 1,
    ])->save();
  }

  /**
   * Tests if routes are redirect based on config setting.
   *
   * @see \Drupal\admin_ui_support\Routing\RouteSubscriber::alterRoutes()
   * @see \Drupal\admin_ui_support\Controller\DefaultController::getAppRoute()
   *
   * @throws \Behat\Mink\Exception\ResponseTextException
   * @throws \Behat\Mink\Exception\ExpectationException
   */
  public function testRouteRedirect() {
    if (!\Drupal::configFactory()->get('admin_ui_support.settings')->get('redirect_related_routes')) {
      $this->fail('redirect_related_routes should be enabled when is first enabled');
    }
    $paths = [
      '/admin/people/permissions',
      '/admin/people/roles',
      '/node/add',
      '/node/add/page',
      '/node/1/edit',
    ];

    /** @var \Drupal\Core\Routing\RouteProvider $route_provider */
    $route_provider = \Drupal::service('router.route_provider');
    foreach ($paths as $path) {
      $routes = $route_provider->getRoutesByPattern($path);
      $this->assertGreaterThanOrEqual(1, $routes->count());
      foreach ($routes as $route_name => $route) {
        // The canonical node route /node/1 is a route suggestion for
        // /node/1/edit.
        if ($route_name !== 'entity.node.canonical') {
          $this->assertEquals('Drupal\admin_ui_support\Controller\DefaultController::getAppRoute', $route->getDefault('_controller'));
        }
      }
    }

    $this->drupalGet('/admin/config/system/admin-ui-support');
    $this->assertSession()->checkboxChecked('redirect_related_routes');
    $this->drupalPostForm('/admin/config/system/admin-ui-support', ['redirect_related_routes' => 0], 'Save configuration');

    if (\Drupal::configFactory()->get('admin_ui_support.settings')->get('redirect_related_routes')) {
      $this->fail('redirect_related_routes should be disable after form submitted');
    }
    // After the setting is updated the paths should go to the default page.
    /** @var \Drupal\Core\Routing\RouteProvider $route_provider */
    $route_provider = \Drupal::service('router.route_provider');
    foreach ($paths as $path) {
      $routes = $route_provider->getRoutesByPattern($path);
      $this->assertGreaterThanOrEqual(1, $routes->count());
      foreach ($routes as $route_name => $route) {
        // The canonical node route /node/1 is a route suggestion for
        // /node/1/edit.
        if ($route_name !== 'entity.node.canonical') {
          $this->assertNotEquals('Drupal\admin_ui_support\Controller\DefaultController::getAppRoute', $route->getDefault('_controller'));
        }
      }
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc