You are here

public function DevelEnforcedDependenciesTest::testMenuEnforcedDependencies in Devel 8.3

Same name and namespace in other branches
  1. 8 tests/src/Kernel/DevelEnforcedDependenciesTest.php \Drupal\Tests\devel\Kernel\DevelEnforcedDependenciesTest::testMenuEnforcedDependencies()
  2. 8.2 tests/src/Kernel/DevelEnforcedDependenciesTest.php \Drupal\Tests\devel\Kernel\DevelEnforcedDependenciesTest::testMenuEnforcedDependencies()
  3. 4.x tests/src/Kernel/DevelEnforcedDependenciesTest.php \Drupal\Tests\devel\Kernel\DevelEnforcedDependenciesTest::testMenuEnforcedDependencies()

Tests devel menu enforced dependencies.

File

tests/src/Kernel/DevelEnforcedDependenciesTest.php, line 38

Class

DevelEnforcedDependenciesTest
Tests Devel enforced dependencies.

Namespace

Drupal\Tests\devel\Kernel

Code

public function testMenuEnforcedDependencies() {

  /* @var \Drupal\Core\Config\ConfigManagerInterface $config_manager */
  $config_manager = $this->container
    ->get('config.manager');

  // Ensure that the Devel menu has explicit enforced dependencies on devel
  // module.
  $menu = Menu::load('devel');
  $this
    ->assertEquals([
    'enforced' => [
      'module' => [
        'devel',
      ],
    ],
  ], $menu
    ->get('dependencies'));

  // Creates an instance of devel menu block so you can test if enforced
  // dependencies work properly with it.
  $block_id = strtolower($this
    ->randomMachineName(8));
  $block = Block::create([
    'plugin' => 'system_menu_block:devel',
    'region' => 'sidebar_first',
    'id' => $block_id,
    'theme' => $this
      ->config('system.theme')
      ->get('default'),
    'label' => $this
      ->randomMachineName(8),
    'visibility' => [],
    'weight' => 0,
  ]);
  $block
    ->save();

  // Ensure that the menu and block instance depend on devel module.
  $dependents = $config_manager
    ->findConfigEntityDependents('module', [
    'devel',
  ]);
  $this
    ->assertArrayHasKey('system.menu.devel', $dependents);
  $this
    ->assertArrayHasKey('block.block.' . $block_id, $dependents);
  $this->container
    ->get('module_installer')
    ->uninstall([
    'devel',
  ]);

  // Ensure that the menu and block instance are deleted when the dependency
  // is uninstalled.
  $this
    ->assertNull(Menu::load('devel'));
  $this
    ->assertNull(Block::load($block_id));

  // Ensure that no config entities depend on devel once uninstalled.
  $dependents = $config_manager
    ->findConfigEntityDependents('module', [
    'devel',
  ]);
  $this
    ->assertArrayNotHasKey('system.menu.devel', $dependents);
  $this
    ->assertArrayNotHasKey('block.block.' . $block_id, $dependents);
}