ConfigLanguageOverrideTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace Drupal\KernelTests\Core\Config;
  3. use Drupal\language\Entity\ConfigurableLanguage;
  4. use Drupal\KernelTests\KernelTestBase;
  5. /**
  6. * Confirm that language overrides work.
  7. *
  8. * @group config
  9. */
  10. class ConfigLanguageOverrideTest extends KernelTestBase {
  11. /**
  12. * Modules to enable.
  13. *
  14. * @var array
  15. */
  16. public static $modules = ['user', 'language', 'config_test', 'system', 'field'];
  17. /**
  18. * {@inheritdoc}
  19. */
  20. protected function setUp() {
  21. parent::setUp();
  22. $this->installConfig(['config_test']);
  23. }
  24. /**
  25. * Tests locale override based on language.
  26. */
  27. public function testConfigLanguageOverride() {
  28. // The language module implements a config factory override object that
  29. // overrides configuration when the Language module is enabled. This test ensures that
  30. // English overrides work.
  31. \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('en'));
  32. $config = \Drupal::config('config_test.system');
  33. $this->assertIdentical($config->get('foo'), 'en bar');
  34. // Ensure that the raw data is not translated.
  35. $raw = $config->getRawData();
  36. $this->assertIdentical($raw['foo'], 'bar');
  37. ConfigurableLanguage::createFromLangcode('fr')->save();
  38. ConfigurableLanguage::createFromLangcode('de')->save();
  39. \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('fr'));
  40. $config = \Drupal::config('config_test.system');
  41. $this->assertIdentical($config->get('foo'), 'fr bar');
  42. \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('de'));
  43. $config = \Drupal::config('config_test.system');
  44. $this->assertIdentical($config->get('foo'), 'de bar');
  45. // Test overrides of completely new configuration objects. In normal runtime
  46. // this should only happen for configuration entities as we should not be
  47. // creating simple configuration objects on the fly.
  48. \Drupal::languageManager()
  49. ->getLanguageConfigOverride('de', 'config_test.new')
  50. ->set('language', 'override')
  51. ->save();
  52. $config = \Drupal::config('config_test.new');
  53. $this->assertTrue($config->isNew(), 'The configuration object config_test.new is new');
  54. $this->assertIdentical($config->get('language'), 'override');
  55. $this->assertIdentical($config->getOriginal('language', FALSE), NULL);
  56. // Test how overrides react to base configuration changes. Set up some base
  57. // values.
  58. \Drupal::configFactory()->getEditable('config_test.foo')
  59. ->set('value', ['key' => 'original'])
  60. ->set('label', 'Original')
  61. ->save();
  62. \Drupal::languageManager()
  63. ->getLanguageConfigOverride('de', 'config_test.foo')
  64. ->set('value', ['key' => 'override'])
  65. ->set('label', 'Override')
  66. ->save();
  67. \Drupal::languageManager()
  68. ->getLanguageConfigOverride('fr', 'config_test.foo')
  69. ->set('value', ['key' => 'override'])
  70. ->save();
  71. \Drupal::configFactory()->clearStaticCache();
  72. $config = \Drupal::config('config_test.foo');
  73. $this->assertIdentical($config->get('value'), ['key' => 'override']);
  74. // Ensure renaming the config will rename the override.
  75. \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('en'));
  76. \Drupal::configFactory()->rename('config_test.foo', 'config_test.bar');
  77. $config = \Drupal::config('config_test.bar');
  78. $this->assertEqual($config->get('value'), ['key' => 'original']);
  79. $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.foo');
  80. $this->assertTrue($override->isNew());
  81. $this->assertEqual($override->get('value'), NULL);
  82. $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.bar');
  83. $this->assertFalse($override->isNew());
  84. $this->assertEqual($override->get('value'), ['key' => 'override']);
  85. $override = \Drupal::languageManager()->getLanguageConfigOverride('fr', 'config_test.bar');
  86. $this->assertFalse($override->isNew());
  87. $this->assertEqual($override->get('value'), ['key' => 'override']);
  88. // Ensure changing data in the config will update the overrides.
  89. $config = \Drupal::configFactory()->getEditable('config_test.bar')->clear('value.key')->save();
  90. $this->assertEqual($config->get('value'), []);
  91. $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.bar');
  92. $this->assertFalse($override->isNew());
  93. $this->assertEqual($override->get('value'), NULL);
  94. // The French override will become empty and therefore removed.
  95. $override = \Drupal::languageManager()->getLanguageConfigOverride('fr', 'config_test.bar');
  96. $this->assertTrue($override->isNew());
  97. $this->assertEqual($override->get('value'), NULL);
  98. // Ensure deleting the config will delete the override.
  99. \Drupal::configFactory()->getEditable('config_test.bar')->delete();
  100. $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.bar');
  101. $this->assertTrue($override->isNew());
  102. $this->assertEqual($override->get('value'), NULL);
  103. }
  104. }