3 namespace Drupal\KernelTests\Core\Config;
5 use Drupal\Core\Language\Language;
6 use Drupal\KernelTests\KernelTestBase;
9 * Tests that language, module and settings.php are applied in the correct
14 class ConfigOverridesPriorityTest extends KernelTestBase {
21 public static $modules = ['system', 'config', 'config_override_test', 'language'];
23 public function testOverridePriorities() {
24 $GLOBALS['config_test_run_module_overrides'] = FALSE;
26 $non_overridden_mail = 'site@example.com';
27 $language_overridden_mail = 'french@example.com';
29 $language_overridden_name = 'French site name';
30 $module_overridden_name = 'ZOMG overridden site name';
31 $non_overridden_name = 'ZOMG this name is on disk mkay';
33 $module_overridden_slogan = 'Yay for overrides!';
34 $non_overridden_slogan = 'Yay for defaults!';
36 /** @var \Drupal\Core\Config\ConfigFactoryInterface $config_factory */
37 $config_factory = $this->container->get('config.factory');
39 ->getEditable('system.site')
40 ->set('name', $non_overridden_name)
41 ->set('slogan', $non_overridden_slogan)
42 ->set('mail', $non_overridden_mail)
43 ->set('weight_select_max', 50)
46 // Ensure that no overrides are applying.
47 $this->assertEqual($non_overridden_name, $config_factory->get('system.site')->get('name'));
48 $this->assertEqual($non_overridden_slogan, $config_factory->get('system.site')->get('slogan'));
49 $this->assertEqual($non_overridden_mail, $config_factory->get('system.site')->get('mail'));
50 $this->assertEqual(50, $config_factory->get('system.site')->get('weight_select_max'));
52 // Override using language.
53 $language = new Language([
57 \Drupal::languageManager()->setConfigOverrideLanguage($language);
58 \Drupal::languageManager()
59 ->getLanguageConfigOverride($language->getId(), 'system.site')
60 ->set('name', $language_overridden_name)
61 ->set('mail', $language_overridden_mail)
64 $this->assertEqual($language_overridden_name, $config_factory->get('system.site')->get('name'));
65 $this->assertEqual($non_overridden_slogan, $config_factory->get('system.site')->get('slogan'));
66 $this->assertEqual($language_overridden_mail, $config_factory->get('system.site')->get('mail'));
67 $this->assertEqual(50, $config_factory->get('system.site')->get('weight_select_max'));
69 // Enable module overrides. Do not override system.site:mail to prove that
70 // the language override still applies.
71 $GLOBALS['config_test_run_module_overrides'] = TRUE;
72 $config_factory->reset('system.site');
73 $this->assertEqual($module_overridden_name, $config_factory->get('system.site')->get('name'));
74 $this->assertEqual($module_overridden_slogan, $config_factory->get('system.site')->get('slogan'));
75 $this->assertEqual($language_overridden_mail, $config_factory->get('system.site')->get('mail'));
76 $this->assertEqual(50, $config_factory->get('system.site')->get('weight_select_max'));
78 // Configure a global override to simulate overriding using settings.php. Do
79 // not override system.site:mail or system.site:slogan to prove that the
80 // language and module overrides still apply.
81 $GLOBALS['config']['system.site']['name'] = 'Site name global conf override';
82 $config_factory->reset('system.site');
83 $this->assertEqual('Site name global conf override', $config_factory->get('system.site')->get('name'));
84 $this->assertEqual($module_overridden_slogan, $config_factory->get('system.site')->get('slogan'));
85 $this->assertEqual($language_overridden_mail, $config_factory->get('system.site')->get('mail'));
86 $this->assertEqual(50, $config_factory->get('system.site')->get('weight_select_max'));
88 $this->assertEqual($non_overridden_name, $config_factory->get('system.site')->getOriginal('name', FALSE));
89 $this->assertEqual($non_overridden_slogan, $config_factory->get('system.site')->getOriginal('slogan', FALSE));
90 $this->assertEqual($non_overridden_mail, $config_factory->get('system.site')->getOriginal('mail', FALSE));
91 $this->assertEqual(50, $config_factory->get('system.site')->getOriginal('weight_select_max', FALSE));
93 unset($GLOBALS['config_test_run_module_overrides']);