You are here

DevelEnforcedDependenciesTest.php in Devel 4.x

File

tests/src/Kernel/DevelEnforcedDependenciesTest.php
View source
<?php

namespace Drupal\Tests\devel\Kernel;

use Drupal\block\Entity\Block;
use Drupal\KernelTests\KernelTestBase;
use Drupal\system\Entity\Menu;

/**
 * Tests Devel enforced dependencies.
 *
 * @group devel
 */
class DevelEnforcedDependenciesTest extends KernelTestBase {

  /**
   * Modules to enable.
   *
   * @var array
   */
  public static $modules = [
    'devel',
    'block',
    'user',
    'system',
  ];

  /**
   * {@inheritdoc}
   */
  protected function setUp() {
    parent::setUp();
    $this
      ->installEntitySchema('user');
    $this
      ->installConfig('devel');

    // For uninstall to work.
    $this
      ->installSchema('user', [
      'users_data',
    ]);
  }

  /**
   * Tests devel menu enforced dependencies.
   */
  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);
  }

}

Classes

Namesort descending Description
DevelEnforcedDependenciesTest Tests Devel enforced dependencies.