diff core/modules/locale/tests/src/Kernel/LocaleConfigManagerTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/modules/locale/tests/src/Kernel/LocaleConfigManagerTest.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,123 @@
+<?php
+
+namespace Drupal\Tests\locale\Kernel;
+
+use Drupal\block\Entity\Block;
+use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests that the locale config manager operates correctly.
+ *
+ * @group locale
+ */
+class LocaleConfigManagerTest extends KernelTestBase {
+
+  /**
+   * A list of modules to install for this test.
+   *
+   * @var array
+   */
+  public static $modules = ['system', 'language', 'locale', 'locale_test', 'block'];
+
+  /**
+   * This test creates simple config on the fly breaking schema checking.
+   *
+   * @var bool
+   */
+  protected $strictConfigSchema = FALSE;
+
+  /**
+   * Tests hasTranslation().
+   */
+  public function testHasTranslation() {
+    $this->installSchema('locale', ['locales_location', 'locales_source', 'locales_target']);
+    $this->installConfig(['locale_test']);
+    $locale_config_manager = \Drupal::service('locale.config_manager');
+
+    $language = ConfigurableLanguage::createFromLangcode('de');
+    $language->save();
+    $result = $locale_config_manager->hasTranslation('locale_test.no_translation', $language->getId());
+    $this->assertFalse($result, 'There is no translation for locale_test.no_translation configuration.');
+
+    $result = $locale_config_manager->hasTranslation('locale_test.translation', $language->getId());
+    $this->assertTrue($result, 'There is a translation for locale_test.translation configuration.');
+  }
+
+  /**
+   * Tests getStringTranslation().
+   */
+  public function testGetStringTranslation() {
+    $this->installSchema('locale', ['locales_location', 'locales_source', 'locales_target']);
+    $this->installConfig(['locale_test']);
+
+    $locale_config_manager = \Drupal::service('locale.config_manager');
+
+    $language = ConfigurableLanguage::createFromLangcode('de');
+    $language->save();
+
+    $translation_before = $locale_config_manager->getStringTranslation('locale_test.no_translation', $language->getId(), 'Test', '');
+    $this->assertTrue($translation_before->isNew());
+    $translation_before->setString('translation')->save();
+
+    $translation_after = $locale_config_manager->getStringTranslation('locale_test.no_translation', $language->getId(), 'Test', '');
+    $this->assertFalse($translation_after->isNew());
+    $translation_after->setString('updated_translation')->save();
+  }
+
+  /**
+   * Tests getDefaultConfigLangcode().
+   */
+  public function testGetDefaultConfigLangcode() {
+    // Install the Language module's configuration so we can use the
+    // module_installer service.
+    $this->installConfig(['language']);
+    $this->assertNull(\Drupal::service('locale.config_manager')->getDefaultConfigLangcode('locale_test_translate.settings'), 'Before installing a module the locale config manager can not access the shipped configuration.');
+    \Drupal::service('module_installer')->install(['locale_test_translate']);
+    $this->assertEqual('en', \Drupal::service('locale.config_manager')->getDefaultConfigLangcode('locale_test_translate.settings'), 'After installing a module the locale config manager can get the shipped configuration langcode.');
+
+    $simple_config = \Drupal::configFactory()->getEditable('locale_test_translate.simple_config_extra');
+    $simple_config->set('foo', 'bar')->save();
+    $this->assertNull(\Drupal::service('locale.config_manager')->getDefaultConfigLangcode($simple_config->getName()), 'Simple config created through the API is not treated as shipped configuration.');
+
+    $block = Block::create([
+      'id' => 'test_default_config',
+      'theme' => 'classy',
+      'status' => TRUE,
+      'region' => 'content',
+      'plugin' => 'local_tasks_block',
+      'settings' => [
+        'id' => 'local_tasks_block',
+        'label' => $this->randomMachineName(),
+        'provider' => 'core',
+        'label_display' => FALSE,
+        'primary' => TRUE,
+        'secondary' => TRUE,
+      ],
+    ]);
+    $block->save();
+
+    // Install the theme after creating the block as installing the theme will
+    // install the block provided by the locale_test module.
+    \Drupal::service('theme_installer')->install(['classy']);
+
+    // The test_default_config block provided by the locale_test module will not
+    // be installed because a block with the same ID already exists.
+    $this->installConfig(['locale_test']);
+    $this->assertNull(\Drupal::service('locale.config_manager')->getDefaultConfigLangcode('block.block.test_default_config'), 'The block.block.test_default_config is not shipped configuration.');
+    // Delete the block so we can install the one provided by the locale_test
+    // module.
+    $block->delete();
+    $this->installConfig(['locale_test']);
+    $this->assertEqual('en', \Drupal::service('locale.config_manager')->getDefaultConfigLangcode('block.block.test_default_config'), 'The block.block.test_default_config is shipped configuration.');
+
+    // Test the special case for configurable_language config entities.
+    $fr_language = ConfigurableLanguage::createFromLangcode('fr');
+    $fr_language->save();
+    $this->assertEqual('en', \Drupal::service('locale.config_manager')->getDefaultConfigLangcode('language.entity.fr'), 'The language.entity.fr is treated as shipped configuration because it is a configurable_language config entity and in the standard language list.');
+    $custom_language = ConfigurableLanguage::createFromLangcode('custom');
+    $custom_language->save();
+    $this->assertNull(\Drupal::service('locale.config_manager')->getDefaultConfigLangcode('language.entity.custom'), 'The language.entity.custom is not shipped configuration because it is not in the standard language list.');
+  }
+
+}