diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigLocaleOverride.php b/core/modules/config/lib/Drupal/config/Tests/ConfigLocaleOverride.php index 6803259..e6412d0 100644 --- a/core/modules/config/lib/Drupal/config/Tests/ConfigLocaleOverride.php +++ b/core/modules/config/lib/Drupal/config/Tests/ConfigLocaleOverride.php @@ -78,6 +78,96 @@ function testConfigLocaleUserOverride() { 'langcode' => 'de', ))); + $this->installSchema('user', 'users'); + $account = entity_create('user', array( + 'name' => 'French user', + 'mail' => 'test@example.com', + 'created' => REQUEST_TIME, + 'status' => 1, + 'preferred_langcode' => 'fr', + )); + + $user_config_context = config_context_enter('Drupal\user\UserConfigContext'); + $user_config_context->setAccount($account); + $config = config('config_test.system'); + $this->assertIdentical($config->get('foo'), 'fr bar'); + // Ensure the non-overriden value is still the same. + $this->assertIdentical($config->get('404'), 'herp'); + + // Ensure that we get the expected value when we leave the user context. The + // locale overrides contain an English override too, so although we are not + // in a user based language override context, the English language override + // applies due to the negotiated language for the page. + config_context_leave(); + $config = config('config_test.system'); + $this->assertIdentical($config->get('foo'), 'en bar'); + + $account = entity_create('user', array( + 'name' => 'German user', + 'mail' => 'test@example.com', + 'created' => REQUEST_TIME, + 'status' => 1, + 'preferred_langcode' => 'de', + )); + + $config_factory = \Drupal::service('config.factory'); + $config_factory->enterContext($user_config_context->setAccount($account)); + // Should not have to re-initialize the configuration object to get new + // overrides as the new context will have a different uuid. + $config = config('config_test.system'); + $this->assertIdentical($config->get('foo'), 'de bar'); + + // Enter an english context on top of the german context. + $account = entity_create('user', array( + 'name' => 'English user', + 'mail' => 'test@example.com', + 'created' => REQUEST_TIME, + 'status' => 1, + 'preferred_langcode' => 'en', + )); + // Create a new user config context to stack on top of the existign one. + $en_user_config_context = config_context_enter('Drupal\user\UserConfigContext'); + $en_user_config_context->setAccount($account); + $config = config('config_test.system'); + $this->assertIdentical($config->get('foo'), 'en bar'); + + // Ensure that we get the expected value when we leave the english user + // context. + config_context_leave(); + $config = config('config_test.system'); + $this->assertIdentical($config->get('foo'), 'de bar'); + + // Ensure that we get the expected value when we leave the german user + // context. + config_context_leave(); + $config = config('config_test.system'); + $this->assertIdentical($config->get('foo'), 'en bar'); + + // Ensure that we cannot leave the default context. + config_context_leave(); + $config = config('config_test.system'); + $this->assertIdentical($config->get('foo'), 'en bar'); + } + + /** + * Tests locale override based on language. + */ + function testConfigLocaleLanguageOverride() { + $this->installSchema('system', 'variable'); + $this->installSchema('language', 'language'); + language_save(new Language(array( + 'name' => 'French', + 'langcode' => 'fr', + ))); + language_save(new Language(array( + 'name' => 'English', + 'langcode' => 'en', + ))); + language_save(new Language(array( + 'name' => 'German', + 'langcode' => 'de', + ))); + $language = language_load('fr'); $language_config_context = config_context_enter('Drupal\language\LanguageConfigContext'); $language_config_context->setLanguage($language);