3 namespace Drupal\Tests\language\Unit;
5 use Drupal\Core\Language\LanguageInterface;
6 use Drupal\Core\DependencyInjection\ContainerBuilder;
7 use Drupal\language\Entity\ContentLanguageSettings;
8 use Drupal\Tests\UnitTestCase;
11 * @coversDefaultClass \Drupal\language\Entity\ContentLanguageSettings
14 class ContentLanguageSettingsUnitTest extends UnitTestCase {
17 * The entity type used for testing.
19 * @var \Drupal\Core\Entity\EntityTypeInterface|\PHPUnit_Framework_MockObject_MockObject
21 protected $entityType;
24 * The entity manager used for testing.
26 * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
28 protected $entityManager;
31 * The ID of the type of the entity under test.
35 protected $entityTypeId;
38 * The UUID generator used for testing.
40 * @var \Drupal\Component\Uuid\UuidInterface|\PHPUnit_Framework_MockObject_MockObject
45 * The typed configuration manager used for testing.
47 * @var \Drupal\Core\Config\TypedConfigManagerInterface|\PHPUnit_Framework_MockObject_MockObject
49 protected $typedConfigManager;
52 * The typed configuration manager used for testing.
54 * @var \Drupal\Core\Config\Entity\ConfigEntityStorage|\PHPUnit_Framework_MockObject_MockObject
56 protected $configEntityStorageInterface;
61 protected function setUp() {
62 $this->entityTypeId = $this->randomMachineName();
63 $this->entityType = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface');
65 $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
67 $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
69 $this->typedConfigManager = $this->getMock('Drupal\Core\Config\TypedConfigManagerInterface');
71 $this->configEntityStorageInterface = $this->getMock('Drupal\Core\Entity\EntityStorageInterface');
73 $container = new ContainerBuilder();
74 $container->set('entity.manager', $this->entityManager);
75 $container->set('uuid', $this->uuid);
76 $container->set('config.typed', $this->typedConfigManager);
77 $container->set('config.storage', $this->configEntityStorageInterface);
78 \Drupal::setContainer($container);
82 * @covers ::calculateDependencies
84 public function testCalculateDependencies() {
85 // Mock the interfaces necessary to create a dependency on a bundle entity.
86 $target_entity_type = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface');
87 $target_entity_type->expects($this->any())
88 ->method('getBundleConfigDependency')
89 ->will($this->returnValue(['type' => 'config', 'name' => 'test.test_entity_type.id']));
91 $this->entityManager->expects($this->any())
92 ->method('getDefinition')
93 ->with('test_entity_type')
94 ->will($this->returnValue($target_entity_type));
96 $config = new ContentLanguageSettings([
97 'target_entity_type_id' => 'test_entity_type',
98 'target_bundle' => 'test_bundle',
99 ], 'language_content_settings');
100 $dependencies = $config->calculateDependencies()->getDependencies();
101 $this->assertContains('test.test_entity_type.id', $dependencies['config']);
107 public function testId() {
108 $config = new ContentLanguageSettings([
109 'target_entity_type_id' => 'test_entity_type',
110 'target_bundle' => 'test_bundle',
111 ], 'language_content_settings');
112 $this->assertSame('test_entity_type.test_bundle', $config->id());
116 * @covers ::getTargetEntityTypeId
118 public function testTargetEntityTypeId() {
119 $config = new ContentLanguageSettings([
120 'target_entity_type_id' => 'test_entity_type',
121 'target_bundle' => 'test_bundle',
122 ], 'language_content_settings');
123 $this->assertSame('test_entity_type', $config->getTargetEntityTypeId());
127 * @covers ::getTargetBundle
129 public function testTargetBundle() {
130 $config = new ContentLanguageSettings([
131 'target_entity_type_id' => 'test_entity_type',
132 'target_bundle' => 'test_bundle',
133 ], 'language_content_settings');
134 $this->assertSame('test_bundle', $config->getTargetBundle());
138 * @covers ::getDefaultLangcode
139 * @covers ::setDefaultLangcode
141 * @dataProvider providerDefaultLangcode
143 public function testDefaultLangcode(ContentLanguageSettings $config, $expected) {
144 $this->assertSame($expected, $config->getDefaultLangcode());
147 public function providerDefaultLangcode() {
148 $langcode = $this->randomMachineName();
149 $config = new ContentLanguageSettings([
150 'target_entity_type_id' => 'test_entity_type',
151 'target_bundle' => 'test_bundle',
152 ], 'language_content_settings');
153 $config->setDefaultLangcode($langcode);
155 $defaultConfig = new ContentLanguageSettings([
156 'target_entity_type_id' => 'test_entity_type',
157 'target_bundle' => 'test_default_language_bundle',
158 ], 'language_content_settings');
161 [$config, $langcode],
162 [$defaultConfig, LanguageInterface::LANGCODE_SITE_DEFAULT],
167 * @covers ::setLanguageAlterable
168 * @covers ::isLanguageAlterable
170 * @dataProvider providerLanguageAlterable
172 public function testLanguageAlterable(ContentLanguageSettings $config, $expected) {
173 $this->assertSame($expected, $config->isLanguageAlterable());
176 public function providerLanguageAlterable() {
177 $alterableConfig = new ContentLanguageSettings([
178 'target_entity_type_id' => 'test_entity_type',
179 'target_bundle' => 'test_bundle',
180 ], 'language_content_settings');
181 $alterableConfig->setLanguageAlterable(TRUE);
183 $nonAlterableConfig = new ContentLanguageSettings([
184 'target_entity_type_id' => 'test_entity_type',
185 'target_bundle' => 'test_fixed_language_bundle',
186 ], 'language_content_settings');
187 $nonAlterableConfig->setLanguageAlterable(FALSE);
189 $defaultConfig = new ContentLanguageSettings([
190 'target_entity_type_id' => 'test_entity_type',
191 'target_bundle' => 'test_default_language_bundle',
192 ], 'language_content_settings');
195 [$alterableConfig, TRUE],
196 [$nonAlterableConfig, FALSE],
197 [$defaultConfig, FALSE],
202 * @covers ::isDefaultConfiguration
204 * @dataProvider providerIsDefaultConfiguration
206 public function testIsDefaultConfiguration(ContentLanguageSettings $config, $expected) {
207 $this->assertSame($expected, $config->isDefaultConfiguration());
210 public function providerIsDefaultConfiguration() {
211 $alteredLanguage = new ContentLanguageSettings([
212 'target_entity_type_id' => 'test_entity_type',
213 'target_bundle' => 'test_bundle',
214 ], 'language_content_settings');
215 $alteredLanguage->setLanguageAlterable(TRUE);
217 $alteredDefaultLangcode = new ContentLanguageSettings([
218 'target_entity_type_id' => 'test_entity_type',
219 'target_bundle' => 'test_fixed_language_bundle',
220 ], 'language_content_settings');
221 $alteredDefaultLangcode->setDefaultLangcode($this->randomMachineName());
223 $defaultConfig = new ContentLanguageSettings([
224 'target_entity_type_id' => 'test_entity_type',
225 'target_bundle' => 'test_default_language_bundle',
226 ], 'language_content_settings');
229 [$alteredLanguage, FALSE],
230 [$alteredDefaultLangcode, FALSE],
231 [$defaultConfig, TRUE],
236 * @covers ::loadByEntityTypeBundle
238 * @dataProvider providerLoadByEntityTypeBundle
240 public function testLoadByEntityTypeBundle($config_id, ContentLanguageSettings $existing_config = NULL, $expected_langcode, $expected_language_alterable) {
241 list($type, $bundle) = explode('.', $config_id);
243 $nullConfig = new ContentLanguageSettings([
244 'target_entity_type_id' => $type,
245 'target_bundle' => $bundle,
246 ], 'language_content_settings');
247 $this->configEntityStorageInterface
248 ->expects($this->any())
251 ->will($this->returnValue($existing_config));
252 $this->configEntityStorageInterface
253 ->expects($this->any())
255 ->will($this->returnValue($nullConfig));
258 ->expects($this->any())
259 ->method('getStorage')
260 ->with('language_content_settings')
261 ->will($this->returnValue($this->configEntityStorageInterface));
262 $this->entityManager->expects($this->any())
263 ->method('getEntityTypeFromClass')
264 ->with('Drupal\language\Entity\ContentLanguageSettings')
265 ->willReturn('language_content_settings');
267 $config = ContentLanguageSettings::loadByEntityTypeBundle($type, $bundle);
269 $this->assertSame($expected_langcode, $config->getDefaultLangcode());
270 $this->assertSame($expected_language_alterable, $config->isLanguageAlterable());
273 public function providerLoadByEntityTypeBundle() {
274 $alteredLanguage = new ContentLanguageSettings([
275 'target_entity_type_id' => 'test_entity_type',
276 'target_bundle' => 'test_bundle',
277 ], 'language_content_settings');
278 $alteredLanguage->setLanguageAlterable(TRUE);
280 $langcode = $this->randomMachineName();
281 $alteredDefaultLangcode = new ContentLanguageSettings([
282 'target_entity_type_id' => 'test_entity_type',
283 'target_bundle' => 'test_fixed_language_bundle',
284 ], 'language_content_settings');
285 $alteredDefaultLangcode->setDefaultLangcode($langcode);
287 $defaultConfig = new ContentLanguageSettings([
288 'target_entity_type_id' => 'test_entity_type',
289 'target_bundle' => 'test_default_language_bundle',
290 ], 'language_content_settings');
293 ['test_entity_type.test_bundle', $alteredLanguage, LanguageInterface::LANGCODE_SITE_DEFAULT, TRUE],
294 ['test_entity_type.test_fixed_language_bundle', $alteredDefaultLangcode, $langcode, FALSE],
295 ['test_entity_type.test_default_language_bundle', $defaultConfig, LanguageInterface::LANGCODE_SITE_DEFAULT, FALSE],
296 ['test_entity_type.null_bundle', NULL, LanguageInterface::LANGCODE_SITE_DEFAULT, FALSE],