Version 1
[yaffs-website] / web / modules / contrib / devel / tests / src / Kernel / DevelEnforcedDependenciesTest.php
diff --git a/web/modules/contrib/devel/tests/src/Kernel/DevelEnforcedDependenciesTest.php b/web/modules/contrib/devel/tests/src/Kernel/DevelEnforcedDependenciesTest.php
new file mode 100644 (file)
index 0000000..b67965b
--- /dev/null
@@ -0,0 +1,80 @@
+<?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' => array(),
+      'weight' => 0,
+    ]);
+    $block->save();
+
+    // Ensure that the menu and block instance depend on devel module.
+    $dependents = $config_manager->findConfigEntityDependents('module', ['devel']);
+    $this->assertTrue(isset($dependents['system.menu.devel']));
+    $this->assertTrue(isset($dependents['block.block.' . $block_id]));
+
+    $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->assertFalse(isset($dependents['system.menu.devel']));
+    $this->assertFalse(isset($dependents['block.block.' . $block_id]));
+  }
+
+}