Mercurial > hg > isophonics-drupal-site
diff core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -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], + ]; + } + +}