3 namespace Drupal\Tests\language\Unit;
5 use Drupal\Core\Language\LanguageInterface;
6 use Drupal\Core\DependencyInjection\ContainerBuilder;
7 use Drupal\Core\Entity\EntityManager;
8 use Drupal\Core\Entity\EntityTypeManagerInterface;
9 use Drupal\Core\Entity\EntityTypeRepositoryInterface;
10 use Drupal\language\Entity\ContentLanguageSettings;
11 use Drupal\Tests\UnitTestCase;
14 * @coversDefaultClass \Drupal\language\Entity\ContentLanguageSettings
17 class ContentLanguageSettingsUnitTest extends UnitTestCase {
20 * The entity type used for testing.
22 * @var \Drupal\Core\Entity\EntityTypeInterface|\PHPUnit_Framework_MockObject_MockObject
24 protected $entityType;
27 * The entity manager used for testing.
29 * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
31 protected $entityManager;
34 * The entity type manager used for testing.
36 * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
38 protected $entityTypeManager;
41 * The ID of the type of the entity under test.
45 protected $entityTypeId;
48 * The UUID generator used for testing.
50 * @var \Drupal\Component\Uuid\UuidInterface|\PHPUnit_Framework_MockObject_MockObject
55 * The typed configuration manager used for testing.
57 * @var \Drupal\Core\Config\TypedConfigManagerInterface|\PHPUnit_Framework_MockObject_MockObject
59 protected $typedConfigManager;
62 * The typed configuration manager used for testing.
64 * @var \Drupal\Core\Config\Entity\ConfigEntityStorage|\PHPUnit_Framework_MockObject_MockObject
66 protected $configEntityStorageInterface;
71 protected function setUp() {
72 $this->entityTypeId = $this->randomMachineName();
73 $this->entityType = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface');
75 $this->entityManager = new EntityManager();
76 $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
78 $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
80 $this->typedConfigManager = $this->getMock('Drupal\Core\Config\TypedConfigManagerInterface');
82 $this->configEntityStorageInterface = $this->getMock('Drupal\Core\Entity\EntityStorageInterface');
84 $container = new ContainerBuilder();
85 $container->set('entity.manager', $this->entityManager);
86 $container->set('entity_type.manager', $this->entityTypeManager);
87 $container->set('uuid', $this->uuid);
88 $container->set('config.typed', $this->typedConfigManager);
89 $container->set('config.storage', $this->configEntityStorageInterface);
90 // Inject the container into entity.manager so it can defer to other entity
92 $this->entityManager->setContainer($container);
93 \Drupal::setContainer($container);
97 * @covers ::calculateDependencies
99 public function testCalculateDependencies() {
100 // Mock the interfaces necessary to create a dependency on a bundle entity.
101 $target_entity_type = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface');
102 $target_entity_type->expects($this->any())
103 ->method('getBundleConfigDependency')
104 ->will($this->returnValue(['type' => 'config', 'name' => 'test.test_entity_type.id']));
106 $this->entityTypeManager->expects($this->any())
107 ->method('getDefinition')
108 ->with('test_entity_type')
109 ->will($this->returnValue($target_entity_type));
111 $config = new ContentLanguageSettings([
112 'target_entity_type_id' => 'test_entity_type',
113 'target_bundle' => 'test_bundle',
114 ], 'language_content_settings');
115 $dependencies = $config->calculateDependencies()->getDependencies();
116 $this->assertContains('test.test_entity_type.id', $dependencies['config']);
122 public function testId() {
123 $config = new ContentLanguageSettings([
124 'target_entity_type_id' => 'test_entity_type',
125 'target_bundle' => 'test_bundle',
126 ], 'language_content_settings');
127 $this->assertSame('test_entity_type.test_bundle', $config->id());
131 * @covers ::getTargetEntityTypeId
133 public function testTargetEntityTypeId() {
134 $config = new ContentLanguageSettings([
135 'target_entity_type_id' => 'test_entity_type',
136 'target_bundle' => 'test_bundle',
137 ], 'language_content_settings');
138 $this->assertSame('test_entity_type', $config->getTargetEntityTypeId());
142 * @covers ::getTargetBundle
144 public function testTargetBundle() {
145 $config = new ContentLanguageSettings([
146 'target_entity_type_id' => 'test_entity_type',
147 'target_bundle' => 'test_bundle',
148 ], 'language_content_settings');
149 $this->assertSame('test_bundle', $config->getTargetBundle());
153 * @covers ::getDefaultLangcode
154 * @covers ::setDefaultLangcode
156 * @dataProvider providerDefaultLangcode
158 public function testDefaultLangcode(ContentLanguageSettings $config, $expected) {
159 $this->assertSame($expected, $config->getDefaultLangcode());
162 public function providerDefaultLangcode() {
163 $langcode = $this->randomMachineName();
164 $config = new ContentLanguageSettings([
165 'target_entity_type_id' => 'test_entity_type',
166 'target_bundle' => 'test_bundle',
167 ], 'language_content_settings');
168 $config->setDefaultLangcode($langcode);
170 $defaultConfig = new ContentLanguageSettings([
171 'target_entity_type_id' => 'test_entity_type',
172 'target_bundle' => 'test_default_language_bundle',
173 ], 'language_content_settings');
176 [$config, $langcode],
177 [$defaultConfig, LanguageInterface::LANGCODE_SITE_DEFAULT],
182 * @covers ::setLanguageAlterable
183 * @covers ::isLanguageAlterable
185 * @dataProvider providerLanguageAlterable
187 public function testLanguageAlterable(ContentLanguageSettings $config, $expected) {
188 $this->assertSame($expected, $config->isLanguageAlterable());
191 public function providerLanguageAlterable() {
192 $alterableConfig = new ContentLanguageSettings([
193 'target_entity_type_id' => 'test_entity_type',
194 'target_bundle' => 'test_bundle',
195 ], 'language_content_settings');
196 $alterableConfig->setLanguageAlterable(TRUE);
198 $nonAlterableConfig = new ContentLanguageSettings([
199 'target_entity_type_id' => 'test_entity_type',
200 'target_bundle' => 'test_fixed_language_bundle',
201 ], 'language_content_settings');
202 $nonAlterableConfig->setLanguageAlterable(FALSE);
204 $defaultConfig = new ContentLanguageSettings([
205 'target_entity_type_id' => 'test_entity_type',
206 'target_bundle' => 'test_default_language_bundle',
207 ], 'language_content_settings');
210 [$alterableConfig, TRUE],
211 [$nonAlterableConfig, FALSE],
212 [$defaultConfig, FALSE],
217 * @covers ::isDefaultConfiguration
219 * @dataProvider providerIsDefaultConfiguration
221 public function testIsDefaultConfiguration(ContentLanguageSettings $config, $expected) {
222 $this->assertSame($expected, $config->isDefaultConfiguration());
225 public function providerIsDefaultConfiguration() {
226 $alteredLanguage = new ContentLanguageSettings([
227 'target_entity_type_id' => 'test_entity_type',
228 'target_bundle' => 'test_bundle',
229 ], 'language_content_settings');
230 $alteredLanguage->setLanguageAlterable(TRUE);
232 $alteredDefaultLangcode = new ContentLanguageSettings([
233 'target_entity_type_id' => 'test_entity_type',
234 'target_bundle' => 'test_fixed_language_bundle',
235 ], 'language_content_settings');
236 $alteredDefaultLangcode->setDefaultLangcode($this->randomMachineName());
238 $defaultConfig = new ContentLanguageSettings([
239 'target_entity_type_id' => 'test_entity_type',
240 'target_bundle' => 'test_default_language_bundle',
241 ], 'language_content_settings');
244 [$alteredLanguage, FALSE],
245 [$alteredDefaultLangcode, FALSE],
246 [$defaultConfig, TRUE],
251 * @covers ::loadByEntityTypeBundle
253 * @dataProvider providerLoadByEntityTypeBundle
255 public function testLoadByEntityTypeBundle($config_id, ContentLanguageSettings $existing_config = NULL, $expected_langcode, $expected_language_alterable) {
256 list($type, $bundle) = explode('.', $config_id);
258 $nullConfig = new ContentLanguageSettings([
259 'target_entity_type_id' => $type,
260 'target_bundle' => $bundle,
261 ], 'language_content_settings');
262 $this->configEntityStorageInterface
263 ->expects($this->any())
266 ->will($this->returnValue($existing_config));
267 $this->configEntityStorageInterface
268 ->expects($this->any())
270 ->will($this->returnValue($nullConfig));
272 $this->entityTypeManager
273 ->expects($this->any())
274 ->method('getStorage')
275 ->with('language_content_settings')
276 ->will($this->returnValue($this->configEntityStorageInterface));
278 $entity_type_repository = $this->getMockForAbstractClass(EntityTypeRepositoryInterface::class);
279 $entity_type_repository->expects($this->any())
280 ->method('getEntityTypeFromClass')
281 ->with(ContentLanguageSettings::class)
282 ->willReturn('language_content_settings');
284 \Drupal::getContainer()->set('entity_type.repository', $entity_type_repository);
286 $config = ContentLanguageSettings::loadByEntityTypeBundle($type, $bundle);
288 $this->assertSame($expected_langcode, $config->getDefaultLangcode());
289 $this->assertSame($expected_language_alterable, $config->isLanguageAlterable());
292 public function providerLoadByEntityTypeBundle() {
293 $alteredLanguage = new ContentLanguageSettings([
294 'target_entity_type_id' => 'test_entity_type',
295 'target_bundle' => 'test_bundle',
296 ], 'language_content_settings');
297 $alteredLanguage->setLanguageAlterable(TRUE);
299 $langcode = $this->randomMachineName();
300 $alteredDefaultLangcode = new ContentLanguageSettings([
301 'target_entity_type_id' => 'test_entity_type',
302 'target_bundle' => 'test_fixed_language_bundle',
303 ], 'language_content_settings');
304 $alteredDefaultLangcode->setDefaultLangcode($langcode);
306 $defaultConfig = new ContentLanguageSettings([
307 'target_entity_type_id' => 'test_entity_type',
308 'target_bundle' => 'test_default_language_bundle',
309 ], 'language_content_settings');
312 ['test_entity_type.test_bundle', $alteredLanguage, LanguageInterface::LANGCODE_SITE_DEFAULT, TRUE],
313 ['test_entity_type.test_fixed_language_bundle', $alteredDefaultLangcode, $langcode, FALSE],
314 ['test_entity_type.test_default_language_bundle', $defaultConfig, LanguageInterface::LANGCODE_SITE_DEFAULT, FALSE],
315 ['test_entity_type.null_bundle', NULL, LanguageInterface::LANGCODE_SITE_DEFAULT, FALSE],