function MenuAccessControlHandlerTest::providerTestAccess

Provides test cases for menu access control based on user permissions and menu lock status.

Return value

array An array of test cases.

File

core/modules/system/tests/src/Kernel/MenuAccessControlHandlerTest.php, line 83

Class

MenuAccessControlHandlerTest
Tests Drupal\system\MenuAccessControlHandler.

Namespace

Drupal\Tests\system\Kernel

Code

public static function providerTestAccess() : array {
  // RefinableCacheableDependencyTrait::addCacheContexts() only needs the
  // container to perform an assertion, but we can't use the container here,
  // so disable assertions for the purposes of this test.
  $assertions = ini_set('zend.assertions', 0);
  $data = [
    'no permission + unlocked' => [
      [],
      'unlocked',
      AccessResult::allowed(),
      AccessResult::neutral()->addCacheContexts([
        'user.permissions',
      ])
        ->setReason("The 'administer menu' permission is required."),
      AccessResult::neutral()->addCacheContexts([
        'user.permissions',
      ])
        ->setReason("The 'administer menu' permission is required."),
      AccessResult::neutral()->addCacheContexts([
        'user.permissions',
      ])
        ->setReason("The 'administer menu' permission is required.")
        ->addCacheTags([
        'config:system.menu.llama',
      ]),
      AccessResult::neutral()->addCacheContexts([
        'user.permissions',
      ])
        ->setReason("The 'administer menu' permission is required."),
    ],
    'no permission + locked' => [
      [],
      'locked',
      AccessResult::allowed(),
      AccessResult::neutral()->addCacheContexts([
        'user.permissions',
      ])
        ->setReason("The 'administer menu' permission is required."),
      AccessResult::neutral()->addCacheContexts([
        'user.permissions',
      ])
        ->setReason("The 'administer menu' permission is required."),
      AccessResult::forbidden()->addCacheTags([
        'config:system.menu.llama',
      ])
        ->setReason("The Menu config entity is locked."),
      AccessResult::neutral()->addCacheContexts([
        'user.permissions',
      ])
        ->setReason("The 'administer menu' permission is required."),
    ],
    'admin + unlocked' => [
      [
        'administer menu',
      ],
      'unlocked',
      AccessResult::allowed(),
      AccessResult::allowed()->addCacheContexts([
        'user.permissions',
      ]),
      AccessResult::allowed()->addCacheContexts([
        'user.permissions',
      ]),
      AccessResult::allowed()->addCacheContexts([
        'user.permissions',
      ])
        ->addCacheTags([
        'config:system.menu.llama',
      ]),
      AccessResult::allowed()->addCacheContexts([
        'user.permissions',
      ]),
    ],
    'admin + locked' => [
      [
        'administer menu',
      ],
      'locked',
      AccessResult::allowed(),
      AccessResult::allowed()->addCacheContexts([
        'user.permissions',
      ]),
      AccessResult::allowed()->addCacheContexts([
        'user.permissions',
      ]),
      AccessResult::forbidden()->addCacheTags([
        'config:system.menu.llama',
      ])
        ->setReason("The Menu config entity is locked."),
      AccessResult::allowed()->addCacheContexts([
        'user.permissions',
      ]),
    ],
  ];
  if ($assertions !== FALSE) {
    ini_set('zend.assertions', $assertions);
  }
  return $data;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.