c3955df56a9e924ce78d1fece9037dfaa662ec0c
[yaffs-website] / web / core / modules / language / tests / src / Unit / ContentLanguageSettingsUnitTest.php
1 <?php
2
3 namespace Drupal\Tests\language\Unit;
4
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;
12
13 /**
14  * @coversDefaultClass \Drupal\language\Entity\ContentLanguageSettings
15  * @group language
16  */
17 class ContentLanguageSettingsUnitTest extends UnitTestCase {
18
19   /**
20    * The entity type used for testing.
21    *
22    * @var \Drupal\Core\Entity\EntityTypeInterface|\PHPUnit_Framework_MockObject_MockObject
23    */
24   protected $entityType;
25
26   /**
27    * The entity manager used for testing.
28    *
29    * @var \Drupal\Core\Entity\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject
30    */
31   protected $entityManager;
32
33   /**
34    * The entity type manager used for testing.
35    *
36    * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
37    */
38   protected $entityTypeManager;
39
40   /**
41    * The ID of the type of the entity under test.
42    *
43    * @var string
44    */
45   protected $entityTypeId;
46
47   /**
48    * The UUID generator used for testing.
49    *
50    * @var \Drupal\Component\Uuid\UuidInterface|\PHPUnit_Framework_MockObject_MockObject
51    */
52   protected $uuid;
53
54   /**
55    * The typed configuration manager used for testing.
56    *
57    * @var \Drupal\Core\Config\TypedConfigManagerInterface|\PHPUnit_Framework_MockObject_MockObject
58    */
59   protected $typedConfigManager;
60
61   /**
62    * The typed configuration manager used for testing.
63    *
64    * @var \Drupal\Core\Config\Entity\ConfigEntityStorage|\PHPUnit_Framework_MockObject_MockObject
65    */
66   protected $configEntityStorageInterface;
67
68   /**
69    * {@inheritdoc}
70    */
71   protected function setUp() {
72     $this->entityTypeId = $this->randomMachineName();
73     $this->entityType = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface');
74
75     $this->entityManager = new EntityManager();
76     $this->entityTypeManager = $this->getMock(EntityTypeManagerInterface::class);
77
78     $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
79
80     $this->typedConfigManager = $this->getMock('Drupal\Core\Config\TypedConfigManagerInterface');
81
82     $this->configEntityStorageInterface = $this->getMock('Drupal\Core\Entity\EntityStorageInterface');
83
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
91     // services.
92     $this->entityManager->setContainer($container);
93     \Drupal::setContainer($container);
94   }
95
96   /**
97    * @covers ::calculateDependencies
98    */
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']));
105
106     $this->entityTypeManager->expects($this->any())
107       ->method('getDefinition')
108       ->with('test_entity_type')
109       ->will($this->returnValue($target_entity_type));
110
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']);
117   }
118
119   /**
120    * @covers ::id
121    */
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());
128   }
129
130   /**
131    * @covers ::getTargetEntityTypeId
132    */
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());
139   }
140
141   /**
142    * @covers ::getTargetBundle
143    */
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());
150   }
151
152   /**
153    * @covers ::getDefaultLangcode
154    * @covers ::setDefaultLangcode
155    *
156    * @dataProvider providerDefaultLangcode
157    */
158   public function testDefaultLangcode(ContentLanguageSettings $config, $expected) {
159     $this->assertSame($expected, $config->getDefaultLangcode());
160   }
161
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);
169
170     $defaultConfig = new ContentLanguageSettings([
171       'target_entity_type_id' => 'test_entity_type',
172       'target_bundle' => 'test_default_language_bundle',
173     ], 'language_content_settings');
174
175     return [
176       [$config, $langcode],
177       [$defaultConfig, LanguageInterface::LANGCODE_SITE_DEFAULT],
178     ];
179   }
180
181   /**
182    * @covers ::setLanguageAlterable
183    * @covers ::isLanguageAlterable
184    *
185    * @dataProvider providerLanguageAlterable
186    */
187   public function testLanguageAlterable(ContentLanguageSettings $config, $expected) {
188     $this->assertSame($expected, $config->isLanguageAlterable());
189   }
190
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);
197
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);
203
204     $defaultConfig = new ContentLanguageSettings([
205       'target_entity_type_id' => 'test_entity_type',
206       'target_bundle' => 'test_default_language_bundle',
207     ], 'language_content_settings');
208
209     return [
210       [$alterableConfig, TRUE],
211       [$nonAlterableConfig, FALSE],
212       [$defaultConfig, FALSE],
213     ];
214   }
215
216   /**
217    * @covers ::isDefaultConfiguration
218    *
219    * @dataProvider providerIsDefaultConfiguration
220    */
221   public function testIsDefaultConfiguration(ContentLanguageSettings $config, $expected) {
222     $this->assertSame($expected, $config->isDefaultConfiguration());
223   }
224
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);
231
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());
237
238     $defaultConfig = new ContentLanguageSettings([
239       'target_entity_type_id' => 'test_entity_type',
240       'target_bundle' => 'test_default_language_bundle',
241     ], 'language_content_settings');
242
243     return [
244       [$alteredLanguage, FALSE],
245       [$alteredDefaultLangcode, FALSE],
246       [$defaultConfig, TRUE],
247     ];
248   }
249
250   /**
251    * @covers ::loadByEntityTypeBundle
252    *
253    * @dataProvider providerLoadByEntityTypeBundle
254    */
255   public function testLoadByEntityTypeBundle($config_id, ContentLanguageSettings $existing_config = NULL, $expected_langcode, $expected_language_alterable) {
256     list($type, $bundle) = explode('.', $config_id);
257
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())
264       ->method('load')
265       ->with($config_id)
266       ->will($this->returnValue($existing_config));
267     $this->configEntityStorageInterface
268       ->expects($this->any())
269       ->method('create')
270       ->will($this->returnValue($nullConfig));
271
272     $this->entityTypeManager
273       ->expects($this->any())
274       ->method('getStorage')
275       ->with('language_content_settings')
276       ->will($this->returnValue($this->configEntityStorageInterface));
277
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');
283
284     \Drupal::getContainer()->set('entity_type.repository', $entity_type_repository);
285
286     $config = ContentLanguageSettings::loadByEntityTypeBundle($type, $bundle);
287
288     $this->assertSame($expected_langcode, $config->getDefaultLangcode());
289     $this->assertSame($expected_language_alterable, $config->isLanguageAlterable());
290   }
291
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);
298
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);
305
306     $defaultConfig = new ContentLanguageSettings([
307       'target_entity_type_id' => 'test_entity_type',
308       'target_bundle' => 'test_default_language_bundle',
309     ], 'language_content_settings');
310
311     return [
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],
316     ];
317   }
318
319 }