Security update for Core, with self-updated composer
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Entity / EntityRepositoryTest.php
1 <?php
2
3 namespace Drupal\Tests\Core\Entity;
4
5 use Drupal\Core\Entity\ContentEntityInterface;
6 use Drupal\Core\Entity\EntityRepository;
7 use Drupal\Core\Entity\EntityTypeManagerInterface;
8 use Drupal\Core\Language\Language;
9 use Drupal\Core\Language\LanguageInterface;
10 use Drupal\Core\Language\LanguageManagerInterface;
11 use Drupal\Tests\UnitTestCase;
12 use Prophecy\Argument;
13
14 /**
15  * @coversDefaultClass \Drupal\Core\Entity\EntityManager
16  * @group Entity
17  */
18 class EntityRepositoryTest extends UnitTestCase {
19
20   /**
21    * The entity type manager.
22    *
23    * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\Prophecy\Prophecy\ProphecyInterface
24    */
25   protected $entityTypeManager;
26
27   /**
28    * The language manager.
29    *
30    * @var \Drupal\Core\Language\LanguageManagerInterface|\Prophecy\Prophecy\ProphecyInterface
31    */
32   protected $languageManager;
33
34   /**
35    * The entity repository under test.
36    *
37    * @var \Drupal\Core\Entity\EntityRepository
38    */
39   protected $entityRepository;
40
41   /**
42    * {@inheritdoc}
43    */
44   protected function setUp() {
45     parent::setUp();
46
47     $this->entityTypeManager = $this->prophesize(EntityTypeManagerInterface::class);
48     $this->languageManager = $this->prophesize(LanguageManagerInterface::class);
49
50     $this->entityRepository = new EntityRepository($this->entityTypeManager->reveal(), $this->languageManager->reveal());
51   }
52
53   /**
54    * Tests the getTranslationFromContext() method.
55    *
56    * @covers ::getTranslationFromContext
57    */
58   public function testGetTranslationFromContext() {
59     $language = new Language(['id' => 'en']);
60     $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
61       ->willReturn($language)
62       ->shouldBeCalledTimes(1);
63     $this->languageManager->getFallbackCandidates(Argument::type('array'))
64       ->will(function ($args) {
65         $context = $args[0];
66         $candidates = [];
67         if (!empty($context['langcode'])) {
68           $candidates[$context['langcode']] = $context['langcode'];
69         }
70         return $candidates;
71       })
72       ->shouldBeCalledTimes(1);
73
74     $translated_entity = $this->prophesize(ContentEntityInterface::class);
75
76     $entity = $this->prophesize(ContentEntityInterface::class);
77     $entity->getUntranslated()->willReturn($entity);
78     $entity->language()->willReturn($language);
79     $entity->hasTranslation(LanguageInterface::LANGCODE_DEFAULT)->willReturn(FALSE);
80     $entity->hasTranslation('custom_langcode')->willReturn(TRUE);
81     $entity->getTranslation('custom_langcode')->willReturn($translated_entity->reveal());
82     $entity->getTranslationLanguages()->willReturn([new Language(['id' => 'en']), new Language(['id' => 'custom_langcode'])]);
83     $entity->addCacheContexts(['languages:language_content'])->shouldBeCalled();
84
85     $this->assertSame($entity->reveal(), $this->entityRepository->getTranslationFromContext($entity->reveal()));
86     $this->assertSame($translated_entity->reveal(), $this->entityRepository->getTranslationFromContext($entity->reveal(), 'custom_langcode'));
87   }
88
89 }