Version 1
[yaffs-website] / web / core / modules / language / tests / src / Unit / ContentLanguageSettingsUnitTest.php
diff --git a/web/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php b/web/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php
new file mode 100644 (file)
index 0000000..06820d0
--- /dev/null
@@ -0,0 +1,300 @@
+<?php
+
+namespace Drupal\Tests\language\Unit;
+
+use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\language\Entity\ContentLanguageSettings;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\language\Entity\ContentLanguageSettings
+ * @group language
+ */
+class ContentLanguageSettingsUnitTest extends UnitTestCase {
+
+  /**
+   * The entity type used for testing.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $entityType;
+
+  /**
+   * The entity manager used for testing.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $entityManager;
+
+  /**
+   * The ID of the type of the entity under test.
+   *
+   * @var string
+   */
+  protected $entityTypeId;
+
+  /**
+   * The UUID generator used for testing.
+   *
+   * @var \Drupal\Component\Uuid\UuidInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $uuid;
+
+  /**
+   * The typed configuration manager used for testing.
+   *
+   * @var \Drupal\Core\Config\TypedConfigManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $typedConfigManager;
+
+  /**
+   * The typed configuration manager used for testing.
+   *
+   * @var \Drupal\Core\Config\Entity\ConfigEntityStorage|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $configEntityStorageInterface;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    $this->entityTypeId = $this->randomMachineName();
+    $this->entityType = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface');
+
+    $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
+
+    $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
+
+    $this->typedConfigManager = $this->getMock('Drupal\Core\Config\TypedConfigManagerInterface');
+
+    $this->configEntityStorageInterface = $this->getMock('Drupal\Core\Entity\EntityStorageInterface');
+
+    $container = new ContainerBuilder();
+    $container->set('entity.manager', $this->entityManager);
+    $container->set('uuid', $this->uuid);
+    $container->set('config.typed', $this->typedConfigManager);
+    $container->set('config.storage', $this->configEntityStorageInterface);
+    \Drupal::setContainer($container);
+  }
+
+  /**
+   * @covers ::calculateDependencies
+   */
+  public function testCalculateDependencies() {
+    // Mock the interfaces necessary to create a dependency on a bundle entity.
+    $target_entity_type = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface');
+    $target_entity_type->expects($this->any())
+      ->method('getBundleConfigDependency')
+      ->will($this->returnValue(['type' => 'config', 'name' => 'test.test_entity_type.id']));
+
+    $this->entityManager->expects($this->any())
+      ->method('getDefinition')
+      ->with('test_entity_type')
+      ->will($this->returnValue($target_entity_type));
+
+    $config = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_bundle',
+    ], 'language_content_settings');
+    $dependencies = $config->calculateDependencies()->getDependencies();
+    $this->assertContains('test.test_entity_type.id', $dependencies['config']);
+  }
+
+  /**
+   * @covers ::id
+   */
+  public function testId() {
+    $config = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_bundle',
+    ], 'language_content_settings');
+    $this->assertSame('test_entity_type.test_bundle', $config->id());
+  }
+
+  /**
+   * @covers ::getTargetEntityTypeId
+   */
+  public function testTargetEntityTypeId() {
+    $config = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_bundle',
+    ], 'language_content_settings');
+    $this->assertSame('test_entity_type', $config->getTargetEntityTypeId());
+  }
+
+  /**
+   * @covers ::getTargetBundle
+   */
+  public function testTargetBundle() {
+    $config = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_bundle',
+    ], 'language_content_settings');
+    $this->assertSame('test_bundle', $config->getTargetBundle());
+  }
+
+  /**
+   * @covers ::getDefaultLangcode
+   * @covers ::setDefaultLangcode
+   *
+   * @dataProvider providerDefaultLangcode
+   */
+  public function testDefaultLangcode(ContentLanguageSettings $config, $expected) {
+    $this->assertSame($expected, $config->getDefaultLangcode());
+  }
+
+  public function providerDefaultLangcode() {
+    $langcode = $this->randomMachineName();
+    $config = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_bundle',
+    ], 'language_content_settings');
+    $config->setDefaultLangcode($langcode);
+
+    $defaultConfig = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_default_language_bundle',
+    ], 'language_content_settings');
+
+    return [
+      [$config, $langcode],
+      [$defaultConfig, LanguageInterface::LANGCODE_SITE_DEFAULT],
+    ];
+  }
+
+  /**
+   * @covers ::setLanguageAlterable
+   * @covers ::isLanguageAlterable
+   *
+   * @dataProvider providerLanguageAlterable
+   */
+  public function testLanguageAlterable(ContentLanguageSettings $config, $expected) {
+    $this->assertSame($expected, $config->isLanguageAlterable());
+  }
+
+  public function providerLanguageAlterable() {
+    $alterableConfig = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_bundle',
+    ], 'language_content_settings');
+    $alterableConfig->setLanguageAlterable(TRUE);
+
+    $nonAlterableConfig = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_fixed_language_bundle',
+    ], 'language_content_settings');
+    $nonAlterableConfig->setLanguageAlterable(FALSE);
+
+    $defaultConfig = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_default_language_bundle',
+    ], 'language_content_settings');
+
+    return [
+      [$alterableConfig, TRUE],
+      [$nonAlterableConfig, FALSE],
+      [$defaultConfig, FALSE],
+    ];
+  }
+
+  /**
+   * @covers ::isDefaultConfiguration
+   *
+   * @dataProvider providerIsDefaultConfiguration
+   */
+  public function testIsDefaultConfiguration(ContentLanguageSettings $config, $expected) {
+    $this->assertSame($expected, $config->isDefaultConfiguration());
+  }
+
+  public function providerIsDefaultConfiguration() {
+    $alteredLanguage = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_bundle',
+    ], 'language_content_settings');
+    $alteredLanguage->setLanguageAlterable(TRUE);
+
+    $alteredDefaultLangcode = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_fixed_language_bundle',
+    ], 'language_content_settings');
+    $alteredDefaultLangcode->setDefaultLangcode($this->randomMachineName());
+
+    $defaultConfig = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_default_language_bundle',
+    ], 'language_content_settings');
+
+    return [
+      [$alteredLanguage, FALSE],
+      [$alteredDefaultLangcode, FALSE],
+      [$defaultConfig, TRUE],
+    ];
+  }
+
+  /**
+   * @covers ::loadByEntityTypeBundle
+   *
+   * @dataProvider providerLoadByEntityTypeBundle
+   */
+  public function testLoadByEntityTypeBundle($config_id, ContentLanguageSettings $existing_config = NULL, $expected_langcode, $expected_language_alterable) {
+    list($type, $bundle) = explode('.', $config_id);
+
+    $nullConfig = new ContentLanguageSettings([
+      'target_entity_type_id' => $type,
+      'target_bundle' => $bundle,
+    ], 'language_content_settings');
+    $this->configEntityStorageInterface
+      ->expects($this->any())
+      ->method('load')
+      ->with($config_id)
+      ->will($this->returnValue($existing_config));
+    $this->configEntityStorageInterface
+      ->expects($this->any())
+      ->method('create')
+      ->will($this->returnValue($nullConfig));
+
+    $this->entityManager
+      ->expects($this->any())
+      ->method('getStorage')
+      ->with('language_content_settings')
+      ->will($this->returnValue($this->configEntityStorageInterface));
+    $this->entityManager->expects($this->any())
+      ->method('getEntityTypeFromClass')
+      ->with('Drupal\language\Entity\ContentLanguageSettings')
+      ->willReturn('language_content_settings');
+
+    $config = ContentLanguageSettings::loadByEntityTypeBundle($type, $bundle);
+
+    $this->assertSame($expected_langcode, $config->getDefaultLangcode());
+    $this->assertSame($expected_language_alterable, $config->isLanguageAlterable());
+  }
+
+  public function providerLoadByEntityTypeBundle() {
+    $alteredLanguage = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_bundle',
+    ], 'language_content_settings');
+    $alteredLanguage->setLanguageAlterable(TRUE);
+
+    $langcode = $this->randomMachineName();
+    $alteredDefaultLangcode = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_fixed_language_bundle',
+    ], 'language_content_settings');
+    $alteredDefaultLangcode->setDefaultLangcode($langcode);
+
+    $defaultConfig = new ContentLanguageSettings([
+      'target_entity_type_id' => 'test_entity_type',
+      'target_bundle' => 'test_default_language_bundle',
+    ], 'language_content_settings');
+
+    return [
+      ['test_entity_type.test_bundle', $alteredLanguage, LanguageInterface::LANGCODE_SITE_DEFAULT, TRUE],
+      ['test_entity_type.test_fixed_language_bundle', $alteredDefaultLangcode, $langcode, FALSE],
+      ['test_entity_type.test_default_language_bundle', $defaultConfig, LanguageInterface::LANGCODE_SITE_DEFAULT, FALSE],
+      ['test_entity_type.null_bundle', NULL, LanguageInterface::LANGCODE_SITE_DEFAULT, FALSE],
+    ];
+  }
+
+}