You are here

protected function DefaultConfigTest::assertExtensionConfig in Drupal 9

Tests that the config provided by the extension is correct.

Parameters

string $name: Extension name.

string $type: Extension type, either 'module' or 'theme'.

2 calls to DefaultConfigTest::assertExtensionConfig()
DefaultConfigTest::testModuleConfig in core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php
Tests if installed config is equal to the exported config.
DefaultConfigTest::testThemeConfig in core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php
Tests if installed config is equal to the exported config.

File

core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php, line 75

Class

DefaultConfigTest
Tests that the installed config matches the default config.

Namespace

Drupal\KernelTests\Config

Code

protected function assertExtensionConfig(string $name, string $type) {

  // System and user are required in order to be able to install some of the
  // other modules. Therefore they are put into static::$modules, which though
  // doesn't install config files, so import those config files explicitly. Do
  // this for all tests in case optional configuration depends on it.
  $this
    ->installConfig([
    'system',
    'user',
  ]);
  $extension_path = \Drupal::service('extension.path.resolver')
    ->getPath($type, $name) . '/';
  $extension_config_storage = new FileStorage($extension_path . InstallStorage::CONFIG_INSTALL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION);
  $optional_config_storage = new FileStorage($extension_path . InstallStorage::CONFIG_OPTIONAL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION);
  if (empty($optional_config_storage
    ->listAll()) && empty($extension_config_storage
    ->listAll())) {
    $this
      ->markTestSkipped("{$name} has no configuration to test");
  }

  // Work out any additional modules and themes that need installing to create
  // an optional config.
  $modules_to_install = $type !== 'theme' ? [
    $name,
  ] : [];
  $themes_to_install = $type === 'theme' ? [
    $name,
  ] : [];
  foreach ($optional_config_storage
    ->listAll() as $config_name) {
    $data = $optional_config_storage
      ->read($config_name);
    $dependency = new ConfigEntityDependency($config_name, $data);
    $modules_to_install = array_merge($modules_to_install, $dependency
      ->getDependencies('module'));
    $themes_to_install = array_merge($themes_to_install, $dependency
      ->getDependencies('theme'));
  }

  // Remove core because that cannot be installed.
  $modules_to_install = array_diff(array_unique($modules_to_install), [
    'core',
  ]);
  $this->container
    ->get('module_installer')
    ->install($modules_to_install);
  $this->container
    ->get('theme_installer')
    ->install(array_unique($themes_to_install));

  // Test configuration in the module's config/install directory.
  $this
    ->doTestsOnConfigStorage($extension_config_storage, $name);

  // Test configuration in the module's config/optional directory.
  $this
    ->doTestsOnConfigStorage($optional_config_storage, $name);
}