function ConfigLocaleOverride::testConfigLocaleUserAndGlobalOverride

Tests locale override in combination with global overrides.

File

drupal/core/modules/config/lib/Drupal/config/Tests/ConfigLocaleOverride.php, line 155
Contains \Drupal\config\Tests\ConfigLocaleOverride.

Class

ConfigLocaleOverride
Tests locale config override.

Namespace

Drupal\config\Tests

Code

function testConfigLocaleUserAndGlobalOverride() {
  global $conf;

  // Globally override value for the keys in config_test.system. Although we
  // override the foo key, there are also language overrides, which trump
  // global overrides so the 'foo' key override will never surface.
  $conf['config_test.system']['foo'] = 'global bar';
  $conf['config_test.system']['404'] = 'global herp';
  $this
    ->installSchema('system', 'variable');
  $this
    ->installSchema('language', 'language');
  language_save(new Language(array(
    'name' => 'French',
    'langcode' => 'fr',
  )));
  $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 value overriden from global $conf works.
  $this
    ->assertIdentical($config
    ->get('404'), 'global 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');

  // Global override should still apply.
  $this
    ->assertIdentical($config
    ->get('404'), 'global herp');

  // Ensure that we cannot leave the default context.
  config_context_leave();
  $config = config('config_test.system');
  $this
    ->assertIdentical($config
    ->get('foo'), 'en bar');

  // Global override should still apply.
  $this
    ->assertIdentical($config
    ->get('404'), 'global herp');

  // Ensure that we get the expected value when we avoid overrides.
  config_context_enter('config.context.free');
  $config_admin = config('config_test.system');

  // Language override should not apply anymore.
  $this
    ->assertIdentical($config_admin
    ->get('foo'), 'bar');

  // Global override should not apply.
  $this
    ->assertIdentical($config_admin
    ->get('404'), 'herp');
  config_context_leave();
}