3 namespace Drupal\Tests\Core\Entity;
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;
15 * @coversDefaultClass \Drupal\Core\Entity\EntityManager
18 class EntityRepositoryTest extends UnitTestCase {
21 * The entity type manager.
23 * @var \Drupal\Core\Entity\EntityTypeManagerInterface|\Prophecy\Prophecy\ProphecyInterface
25 protected $entityTypeManager;
28 * The language manager.
30 * @var \Drupal\Core\Language\LanguageManagerInterface|\Prophecy\Prophecy\ProphecyInterface
32 protected $languageManager;
35 * The entity repository under test.
37 * @var \Drupal\Core\Entity\EntityRepository
39 protected $entityRepository;
44 protected function setUp() {
47 $this->entityTypeManager = $this->prophesize(EntityTypeManagerInterface::class);
48 $this->languageManager = $this->prophesize(LanguageManagerInterface::class);
50 $this->entityRepository = new EntityRepository($this->entityTypeManager->reveal(), $this->languageManager->reveal());
54 * Tests the getTranslationFromContext() method.
56 * @covers ::getTranslationFromContext
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) {
67 if (!empty($context['langcode'])) {
68 $candidates[$context['langcode']] = $context['langcode'];
72 ->shouldBeCalledTimes(1);
74 $translated_entity = $this->prophesize(ContentEntityInterface::class);
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();
85 $this->assertSame($entity->reveal(), $this->entityRepository->getTranslationFromContext($entity->reveal()));
86 $this->assertSame($translated_entity->reveal(), $this->entityRepository->getTranslationFromContext($entity->reveal(), 'custom_langcode'));