3 namespace Drupal\KernelTests\Core\Config;
5 use Drupal\language\Entity\ConfigurableLanguage;
6 use Drupal\KernelTests\KernelTestBase;
9 * Confirm that language overrides work.
13 class ConfigLanguageOverrideTest extends KernelTestBase {
20 public static $modules = ['user', 'language', 'config_test', 'system', 'field'];
25 protected function setUp() {
27 $this->installConfig(['config_test']);
31 * Tests locale override based on language.
33 public function testConfigLanguageOverride() {
34 // The language module implements a config factory override object that
35 // overrides configuration when the Language module is enabled. This test ensures that
36 // English overrides work.
37 \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('en'));
38 $config = \Drupal::config('config_test.system');
39 $this->assertIdentical($config->get('foo'), 'en bar');
41 // Ensure that the raw data is not translated.
42 $raw = $config->getRawData();
43 $this->assertIdentical($raw['foo'], 'bar');
45 ConfigurableLanguage::createFromLangcode('fr')->save();
46 ConfigurableLanguage::createFromLangcode('de')->save();
48 \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('fr'));
49 $config = \Drupal::config('config_test.system');
50 $this->assertIdentical($config->get('foo'), 'fr bar');
52 \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('de'));
53 $config = \Drupal::config('config_test.system');
54 $this->assertIdentical($config->get('foo'), 'de bar');
56 // Test overrides of completely new configuration objects. In normal runtime
57 // this should only happen for configuration entities as we should not be
58 // creating simple configuration objects on the fly.
59 \Drupal::languageManager()
60 ->getLanguageConfigOverride('de', 'config_test.new')
61 ->set('language', 'override')
63 $config = \Drupal::config('config_test.new');
64 $this->assertTrue($config->isNew(), 'The configuration object config_test.new is new');
65 $this->assertIdentical($config->get('language'), 'override');
66 $this->assertIdentical($config->getOriginal('language', FALSE), NULL);
68 // Test how overrides react to base configuration changes. Set up some base
70 \Drupal::configFactory()->getEditable('config_test.foo')
71 ->set('value', ['key' => 'original'])
72 ->set('label', 'Original')
74 \Drupal::languageManager()
75 ->getLanguageConfigOverride('de', 'config_test.foo')
76 ->set('value', ['key' => 'override'])
77 ->set('label', 'Override')
79 \Drupal::languageManager()
80 ->getLanguageConfigOverride('fr', 'config_test.foo')
81 ->set('value', ['key' => 'override'])
83 \Drupal::configFactory()->clearStaticCache();
84 $config = \Drupal::config('config_test.foo');
85 $this->assertIdentical($config->get('value'), ['key' => 'override']);
87 // Ensure renaming the config will rename the override.
88 \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('en'));
89 \Drupal::configFactory()->rename('config_test.foo', 'config_test.bar');
90 $config = \Drupal::config('config_test.bar');
91 $this->assertEqual($config->get('value'), ['key' => 'original']);
92 $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.foo');
93 $this->assertTrue($override->isNew());
94 $this->assertEqual($override->get('value'), NULL);
95 $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.bar');
96 $this->assertFalse($override->isNew());
97 $this->assertEqual($override->get('value'), ['key' => 'override']);
98 $override = \Drupal::languageManager()->getLanguageConfigOverride('fr', 'config_test.bar');
99 $this->assertFalse($override->isNew());
100 $this->assertEqual($override->get('value'), ['key' => 'override']);
102 // Ensure changing data in the config will update the overrides.
103 $config = \Drupal::configFactory()->getEditable('config_test.bar')->clear('value.key')->save();
104 $this->assertEqual($config->get('value'), []);
105 $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.bar');
106 $this->assertFalse($override->isNew());
107 $this->assertEqual($override->get('value'), NULL);
108 // The French override will become empty and therefore removed.
109 $override = \Drupal::languageManager()->getLanguageConfigOverride('fr', 'config_test.bar');
110 $this->assertTrue($override->isNew());
111 $this->assertEqual($override->get('value'), NULL);
113 // Ensure deleting the config will delete the override.
114 \Drupal::configFactory()->getEditable('config_test.bar')->delete();
115 $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.bar');
116 $this->assertTrue($override->isNew());
117 $this->assertEqual($override->get('value'), NULL);