function ExcludedModulesEventSubscriberTest::testExcludedModules

Same name and namespace in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/Config/ExcludedModulesEventSubscriberTest.php \Drupal\KernelTests\Core\Config\ExcludedModulesEventSubscriberTest::testExcludedModules()
  2. 8.9.x core/tests/Drupal/KernelTests/Core/Config/ExcludedModulesEventSubscriberTest.php \Drupal\KernelTests\Core\Config\ExcludedModulesEventSubscriberTest::testExcludedModules()
  3. 11.x core/tests/Drupal/KernelTests/Core/Config/ExcludedModulesEventSubscriberTest.php \Drupal\KernelTests\Core\Config\ExcludedModulesEventSubscriberTest::testExcludedModules()

Tests excluding modules from the config export.

File

core/tests/Drupal/KernelTests/Core/Config/ExcludedModulesEventSubscriberTest.php, line 37

Class

ExcludedModulesEventSubscriberTest
Tests ExcludedModulesEventSubscriber.

Namespace

Drupal\KernelTests\Core\Config

Code

public function testExcludedModules() : void {
  // Assert that config_test is in the active config.
  $active = $this->container
    ->get('config.storage');
  $this->assertNotEmpty($active->listAll('config_test.'));
  $this->assertNotEmpty($active->listAll('system.'));
  $this->assertArrayHasKey('config_test', $active->read('core.extension')['module']);
  $collection = $this->randomMachineName();
  foreach ($active->listAll() as $config) {
    $active->createCollection($collection)
      ->write($config, $active->read($config));
  }
  // Assert that config_test is not in the export storage.
  $export = $this->container
    ->get('config.storage.export');
  $this->assertEmpty($export->listAll('config_test.'));
  $this->assertNotEmpty($export->listAll('system.'));
  $this->assertEmpty($export->createCollection($collection)
    ->listAll('config_test.'));
  $this->assertNotEmpty($export->createCollection($collection)
    ->listAll('system.'));
  $this->assertArrayNotHasKey('config_test', $export->read('core.extension')['module']);
  // The config_exclude_test is not excluded but the menu it installs are.
  $this->assertArrayHasKey('config_exclude_test', $export->read('core.extension')['module']);
  $this->assertFalse($export->exists('system.menu.exclude_test'));
  $this->assertFalse($export->exists('system.menu.indirect_exclude_test'));
  // Assert that config_test is again in the import storage.
  $import = $this->container
    ->get('config.import_transformer')
    ->transform($export);
  $this->assertNotEmpty($import->listAll('config_test.'));
  $this->assertNotEmpty($import->listAll('system.'));
  $this->assertNotEmpty($import->createCollection($collection)
    ->listAll('config_test.'));
  $this->assertNotEmpty($import->createCollection($collection)
    ->listAll('system.'));
  $this->assertArrayHasKey('config_test', $import->read('core.extension')['module']);
  $this->assertArrayHasKey('config_exclude_test', $import->read('core.extension')['module']);
  $this->assertTrue($import->exists('system.menu.exclude-test'));
  $this->assertTrue($import->exists('system.menu.indirect-exclude-test'));
  $this->assertEquals($active->read('core.extension'), $import->read('core.extension'));
  $this->assertEquals($active->listAll(), $import->listAll());
  foreach ($active->listAll() as $config) {
    $this->assertEquals($active->read($config), $import->read($config));
  }
  // When the settings are changed, the next request will get the export
  // storage without the config_test excluded.
  $this->setSetting('config_exclude_modules', []);
  // We rebuild the container to simulate a new request. The managed storage
  // gets the storage from the manager only once.
  $this->container
    ->get('kernel')
    ->rebuildContainer();
  $export = $this->container
    ->get('config.storage.export');
  $this->assertArrayHasKey('config_test', $export->read('core.extension')['module']);
}

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