EntityRepositoryTest.php 3.3 KB

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