annotate core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\KernelTests\Config;
Chris@0 4
Chris@0 5 use Drupal\Core\Config\FileStorage;
Chris@0 6 use Drupal\Core\Config\InstallStorage;
Chris@0 7 use Drupal\Core\Config\StorageInterface;
Chris@0 8 use Drupal\KernelTests\AssertConfigTrait;
Chris@0 9 use Drupal\KernelTests\FileSystemModuleDiscoveryDataProviderTrait;
Chris@0 10 use Drupal\KernelTests\KernelTestBase;
Chris@0 11
Chris@0 12 /**
Chris@0 13 * Tests that the installed config matches the default config.
Chris@0 14 *
Chris@0 15 * @group Config
Chris@0 16 */
Chris@0 17 class DefaultConfigTest extends KernelTestBase {
Chris@0 18
Chris@0 19 use AssertConfigTrait;
Chris@0 20 use FileSystemModuleDiscoveryDataProviderTrait;
Chris@0 21
Chris@0 22 /**
Chris@0 23 * {@inheritdoc}
Chris@0 24 */
Chris@0 25 protected static $timeLimit = 500;
Chris@0 26
Chris@0 27 /**
Chris@0 28 * {@inheritdoc}
Chris@0 29 */
Chris@0 30 public static $modules = ['system', 'user'];
Chris@0 31
Chris@0 32 /**
Chris@0 33 * The following config entries are changed on module install.
Chris@0 34 *
Chris@0 35 * Comparing them does not make sense.
Chris@0 36 *
Chris@0 37 * @todo Figure out why simpletest.settings is not installed.
Chris@0 38 *
Chris@0 39 * @var array
Chris@0 40 */
Chris@0 41 public static $skippedConfig = [
Chris@0 42 'locale.settings' => ['path: '],
Chris@0 43 'syslog.settings' => ['facility: '],
Chris@0 44 'simpletest.settings' => TRUE,
Chris@0 45 ];
Chris@0 46
Chris@0 47 /**
Chris@0 48 * {@inheritdoc}
Chris@0 49 */
Chris@0 50 protected function setUp() {
Chris@0 51 parent::setUp();
Chris@0 52
Chris@0 53 // @todo ModuleInstaller calls system_rebuild_module_data which is part of
Chris@0 54 // system.module, see https://www.drupal.org/node/2208429.
Chris@0 55 include_once $this->root . '/core/modules/system/system.module';
Chris@0 56
Chris@0 57 // Set up the state values so we know where to find the files when running
Chris@0 58 // drupal_get_filename().
Chris@0 59 // @todo Remove as part of https://www.drupal.org/node/2186491
Chris@0 60 system_rebuild_module_data();
Chris@0 61 }
Chris@0 62
Chris@0 63 /**
Chris@0 64 * Tests if installed config is equal to the exported config.
Chris@0 65 *
Chris@0 66 * @dataProvider coreModuleListDataProvider
Chris@0 67 */
Chris@0 68 public function testModuleConfig($module) {
Chris@0 69 // System and user are required in order to be able to install some of the
Chris@0 70 // other modules. Therefore they are put into static::$modules, which though
Chris@0 71 // doesn't install config files, so import those config files explicitly.
Chris@0 72 switch ($module) {
Chris@0 73 case 'system':
Chris@0 74 case 'user':
Chris@0 75 $this->installConfig([$module]);
Chris@0 76 break;
Chris@0 77 }
Chris@0 78
Chris@0 79 $module_path = drupal_get_path('module', $module) . '/';
Chris@0 80
Chris@0 81 /** @var \Drupal\Core\Extension\ModuleInstallerInterface $module_installer */
Chris@0 82 $module_installer = $this->container->get('module_installer');
Chris@0 83
Chris@0 84 // @todo https://www.drupal.org/node/2308745 Rest has an implicit dependency
Chris@0 85 // on the Node module remove once solved.
Chris@0 86 if (in_array($module, ['rest', 'hal'])) {
Chris@0 87 $module_installer->install(['node']);
Chris@0 88 }
Chris@0 89
Chris@0 90 // Work out any additional modules and themes that need installing to create
Chris@0 91 // an optional config.
Chris@0 92 $optional_config_storage = new FileStorage($module_path . InstallStorage::CONFIG_OPTIONAL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION);
Chris@0 93 $modules_to_install = [$module];
Chris@0 94 $themes_to_install = [];
Chris@0 95 foreach ($optional_config_storage->listAll() as $config_name) {
Chris@0 96 $data = $optional_config_storage->read($config_name);
Chris@0 97 if (isset($data['dependencies']['module'])) {
Chris@0 98 $modules_to_install = array_merge($modules_to_install, $data['dependencies']['module']);
Chris@0 99 }
Chris@0 100 if (isset($data['dependencies']['theme'])) {
Chris@0 101 $themes_to_install = array_merge($themes_to_install, $data['dependencies']['theme']);
Chris@0 102 }
Chris@0 103 }
Chris@0 104 $module_installer->install(array_unique($modules_to_install));
Chris@0 105 $this->container->get('theme_installer')->install($themes_to_install);
Chris@0 106
Chris@0 107 // Test configuration in the module's config/install directory.
Chris@0 108 $module_config_storage = new FileStorage($module_path . InstallStorage::CONFIG_INSTALL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION);
Chris@0 109 $this->doTestsOnConfigStorage($module_config_storage);
Chris@0 110
Chris@0 111 // Test configuration in the module's config/optional directory.
Chris@0 112 $this->doTestsOnConfigStorage($optional_config_storage);
Chris@0 113 }
Chris@0 114
Chris@0 115 /**
Chris@0 116 * Tests that default config matches the installed config.
Chris@0 117 *
Chris@0 118 * @param \Drupal\Core\Config\StorageInterface $default_config_storage
Chris@0 119 * The default config storage to test.
Chris@0 120 */
Chris@0 121 protected function doTestsOnConfigStorage(StorageInterface $default_config_storage) {
Chris@0 122 /** @var \Drupal\Core\Config\ConfigManagerInterface $config_manager */
Chris@0 123 $config_manager = $this->container->get('config.manager');
Chris@0 124
Chris@0 125 // Just connect directly to the config table so we don't need to worry about
Chris@0 126 // the cache layer.
Chris@0 127 $active_config_storage = $this->container->get('config.storage');
Chris@0 128
Chris@0 129 foreach ($default_config_storage->listAll() as $config_name) {
Chris@0 130 if ($active_config_storage->exists($config_name)) {
Chris@0 131 // If it is a config entity re-save it. This ensures that any
Chris@0 132 // recalculation of dependencies does not cause config change.
Chris@0 133 if ($entity_type = $config_manager->getEntityTypeIdByName($config_name)) {
Chris@0 134 $entity_storage = $config_manager
Chris@0 135 ->getEntityManager()
Chris@0 136 ->getStorage($entity_type);
Chris@0 137 $id = $entity_storage->getIDFromConfigName($config_name, $entity_storage->getEntityType()
Chris@0 138 ->getConfigPrefix());
Chris@0 139 $entity_storage->load($id)->calculateDependencies()->save();
Chris@0 140 }
Chris@0 141 $result = $config_manager->diff($default_config_storage, $active_config_storage, $config_name);
Chris@0 142 $this->assertConfigDiff($result, $config_name, static::$skippedConfig);
Chris@0 143 }
Chris@0 144 }
Chris@0 145 }
Chris@0 146
Chris@0 147 }