Security update for Core, with self-updated composer
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Config / ConfigLanguageOverrideTest.php
1 <?php
2
3 namespace Drupal\KernelTests\Core\Config;
4
5 use Drupal\language\Entity\ConfigurableLanguage;
6 use Drupal\KernelTests\KernelTestBase;
7
8 /**
9  * Confirm that language overrides work.
10  *
11  * @group config
12  */
13 class ConfigLanguageOverrideTest extends KernelTestBase {
14
15   /**
16    * Modules to enable.
17    *
18    * @var array
19    */
20   public static $modules = ['user', 'language', 'config_test', 'system', 'field'];
21
22   /**
23    * {@inheritdoc}
24    */
25   protected function setUp() {
26     parent::setUp();
27     $this->installConfig(['config_test']);
28   }
29
30   /**
31    * Tests locale override based on language.
32    */
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');
40
41     // Ensure that the raw data is not translated.
42     $raw = $config->getRawData();
43     $this->assertIdentical($raw['foo'], 'bar');
44
45     ConfigurableLanguage::createFromLangcode('fr')->save();
46     ConfigurableLanguage::createFromLangcode('de')->save();
47
48     \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('fr'));
49     $config = \Drupal::config('config_test.system');
50     $this->assertIdentical($config->get('foo'), 'fr bar');
51
52     \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('de'));
53     $config = \Drupal::config('config_test.system');
54     $this->assertIdentical($config->get('foo'), 'de bar');
55
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')
62       ->save();
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);
67
68     // Test how overrides react to base configuration changes. Set up some base
69     // values.
70     \Drupal::configFactory()->getEditable('config_test.foo')
71       ->set('value', ['key' => 'original'])
72       ->set('label', 'Original')
73       ->save();
74     \Drupal::languageManager()
75       ->getLanguageConfigOverride('de', 'config_test.foo')
76       ->set('value', ['key' => 'override'])
77       ->set('label', 'Override')
78       ->save();
79     \Drupal::languageManager()
80       ->getLanguageConfigOverride('fr', 'config_test.foo')
81       ->set('value', ['key' => 'override'])
82       ->save();
83     \Drupal::configFactory()->clearStaticCache();
84     $config = \Drupal::config('config_test.foo');
85     $this->assertIdentical($config->get('value'), ['key' => 'override']);
86
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']);
101
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);
112
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);
118   }
119
120 }