diff --git a/core/modules/system/src/Tests/Menu/MenuTranslateTest.php b/core/modules/system/src/Tests/Menu/MenuAccessTest.php similarity index 57% rename from core/modules/system/src/Tests/Menu/MenuTranslateTest.php rename to core/modules/system/src/Tests/Menu/MenuAccessTest.php index 3641ab1fb0ddb7941d0ad655d698c7da0a899572..8867dcb390c28fe01c606c09b815975413154997 100644 --- a/core/modules/system/src/Tests/Menu/MenuTranslateTest.php +++ b/core/modules/system/src/Tests/Menu/MenuAccessTest.php @@ -2,7 +2,7 @@ /** * @file - * Contains \Drupal\system\Tests\Menu\MenuTranslateTest. + * Contains \Drupal\system\Tests\Menu\MenuAccessTest. */ namespace Drupal\system\Tests\Menu; @@ -11,12 +11,11 @@ use Drupal\simpletest\WebTestBase; /** - * Tests the _menu_translate() method. + * Tests the route access checks on menu links. * * @group Menu - * @see _menu_translate(). */ -class MenuTranslateTest extends WebTestBase { +class MenuAccessTest extends WebTestBase { /** * Modules to enable. @@ -35,9 +34,23 @@ protected function setUp() { } /** - * Tests _menu_translate(). + * Tests menu link for route with access check. + * + * @see \Drupal\menu_test\Access\AccessCheck::access() */ - public function testMenuTranslate() { + public function testMenuBlockLinksAccessCheck() { + $this->drupalPlaceBlock('system_menu_block:account'); + // Test that there's link rendered on the route. + $this->drupalGet('menu_test_access_check_session'); + $this->assertLink('Test custom route access check'); + // Page still accessible but thre should not be menu link. + $this->drupalGet('menu_test_access_check_session'); + $this->assertResponse(200); + $this->assertNoLink('Test custom route access check'); + // Test that page is no more accessible. + $this->drupalGet('menu_test_access_check_session'); + $this->assertResponse(403); + // Check for access to a restricted local task from a default local task. $this->drupalGet('foo/asdf'); $this->assertResponse(200); diff --git a/core/modules/system/tests/modules/menu_test/menu_test.links.menu.yml b/core/modules/system/tests/modules/menu_test/menu_test.links.menu.yml index 613bc9211776ca4956be4c00eb4446cb0aa7ebec..eecd42c9a1da56bcff7ef124ec310a1d40ecc08c 100644 --- a/core/modules/system/tests/modules/menu_test/menu_test.links.menu.yml +++ b/core/modules/system/tests/modules/menu_test/menu_test.links.menu.yml @@ -83,3 +83,8 @@ menu_test.child: menu_test.unsafe: route_name: menu_test.menu_name_test deriver: '\Drupal\menu_test\Plugin\Derivative\MenuLinkTestWithUnsafeTitle' + +menu_test.access_check: + title: 'Test custom route access check' + route_name: menu_test.router_test_session + menu_name: account diff --git a/core/modules/system/tests/modules/menu_test/menu_test.routing.yml b/core/modules/system/tests/modules/menu_test/menu_test.routing.yml index b69d72259bc20d6574f38c42c93ecbe2db9ef458..751bdf7bc41d72f4b2c614ca4cbf84f83b96a4bf 100644 --- a/core/modules/system/tests/modules/menu_test/menu_test.routing.yml +++ b/core/modules/system/tests/modules/menu_test/menu_test.routing.yml @@ -74,6 +74,15 @@ menu_test.router_test4: requirements: _access: 'TRUE' +menu_test.router_test_session: + path: '/menu_test_access_check_session' + defaults: + _controller: '\Drupal\menu_test\TestControllers::testSession' + options: + no_cache: TRUE + requirements: + _menu_test_session_access: 'TRUE' + menu_test.local_action1: path: '/menu-test-local-action' defaults: diff --git a/core/modules/system/tests/modules/menu_test/menu_test.services.yml b/core/modules/system/tests/modules/menu_test/menu_test.services.yml index 8841320535a90954acf43c97359eff9f191b0889..81f1f50b95786b8087bf42f1a2718e7e7c58a0a3 100644 --- a/core/modules/system/tests/modules/menu_test/menu_test.services.yml +++ b/core/modules/system/tests/modules/menu_test/menu_test.services.yml @@ -3,3 +3,8 @@ services: class: Drupal\menu_test\Theme\TestThemeNegotiator tags: - { name: theme_negotiator } + + access_check.menu_test_session: + class: Drupal\menu_test\Access\AccessCheck + tags: + - { name: access_check, applies_to: _menu_test_session_access } diff --git a/core/modules/system/tests/modules/menu_test/src/Access/AccessCheck.php b/core/modules/system/tests/modules/menu_test/src/Access/AccessCheck.php new file mode 100644 index 0000000000000000000000000000000000000000..c6b9054a1704eb3ce7984d30aa45d04c24e47ea5 --- /dev/null +++ b/core/modules/system/tests/modules/menu_test/src/Access/AccessCheck.php @@ -0,0 +1,33 @@ +<?php +/** + * @file + * Contains \Drupal\menu_test\Access\AccessCheck. + */ + +namespace Drupal\menu_test\Access; + +use Drupal\Core\Access\AccessResult; +use Drupal\Core\Routing\Access\AccessInterface; + +/** + * Checks access based on the 'menu_test' key in session. + */ +class AccessCheck implements AccessInterface { + + /** + * Check to see if user accessed this page. + * + * @return \Drupal\Core\Access\AccessResultInterface + * The access result. + */ + public function access() { + if (!isset($_SESSION['menu_test'])) { + $result = AccessResult::allowed(); + } + else { + $result = AccessResult::allowedIf($_SESSION['menu_test'] < 2); + } + return $result->setCacheMaxAge(0); + } + +} diff --git a/core/modules/system/tests/modules/menu_test/src/TestControllers.php b/core/modules/system/tests/modules/menu_test/src/TestControllers.php index 2a91286412ce34cbcd182a848c30e8d873b9ff53..364c77b01651eb2504dc252fc87906904510d5c1 100644 --- a/core/modules/system/tests/modules/menu_test/src/TestControllers.php +++ b/core/modules/system/tests/modules/menu_test/src/TestControllers.php @@ -36,6 +36,17 @@ public function test2() { return ['#markup' => 'test2']; } + /** + * Prints out test data. + */ + public function testSession() { + if (!isset($_SESSION['menu_test'])) { + $_SESSION['menu_test'] = 0; + } + $_SESSION['menu_test']++; + return ['#markup' => SafeMarkup::format('Session menu_test is @count', ['@count' => $_SESSION['menu_test']])]; + } + /** * Prints out test data. */