You are here

public function EntityEmbedDetectorTest::testRunExtract in Lingotek Translation 4.0.x

Same name and namespace in other branches
  1. 3.5.x tests/src/Unit/Plugin/RelatedEntitiesDetector/EntityEmbedDetectorTest.php \Drupal\Tests\lingotek\Unit\Plugin\RelatedEntitiesDetector\EntityEmbedDetectorTest::testRunExtract()
  2. 3.6.x tests/src/Unit/Plugin/RelatedEntitiesDetector/EntityEmbedDetectorTest.php \Drupal\Tests\lingotek\Unit\Plugin\RelatedEntitiesDetector\EntityEmbedDetectorTest::testRunExtract()
  3. 3.7.x tests/src/Unit/Plugin/RelatedEntitiesDetector/EntityEmbedDetectorTest.php \Drupal\Tests\lingotek\Unit\Plugin\RelatedEntitiesDetector\EntityEmbedDetectorTest::testRunExtract()
  4. 3.8.x tests/src/Unit/Plugin/RelatedEntitiesDetector/EntityEmbedDetectorTest.php \Drupal\Tests\lingotek\Unit\Plugin\RelatedEntitiesDetector\EntityEmbedDetectorTest::testRunExtract()

@covers ::extract @dataProvider dataProviderFieldTypes

File

tests/src/Unit/Plugin/RelatedEntitiesDetector/EntityEmbedDetectorTest.php, line 157

Class

EntityEmbedDetectorTest
Unit test for the entity_embed entity detector plugin.

Namespace

Drupal\Tests\lingotek\Unit\Plugin\RelatedEntitiesDetector

Code

public function testRunExtract($fieldType, $hasSummary) {
  $this->lingotekConfiguration
    ->expects($this
    ->exactly(3))
    ->method('isEnabled')
    ->withConsecutive([
    'the_first_type',
    'first_bundle',
  ], [
    'entity_id',
    'second_bundle',
  ], [
    'third_entity_type',
    'third_bundle',
  ])
    ->willReturnOnConsecutiveCalls(TRUE, TRUE, FALSE);
  $titleFieldDefinition = $this
    ->createMock(BaseFieldDefinition::class);
  $titleFieldDefinition
    ->expects($this
    ->once())
    ->method('getType')
    ->willReturn($fieldType);
  $titleFieldDefinition
    ->expects($this
    ->any())
    ->method('getName')
    ->willReturn('Title');
  $this->entityFieldManager
    ->expects($this
    ->any())
    ->method('getFieldDefinitions')
    ->willReturn([
    'title' => $titleFieldDefinition,
  ]);
  $entity = $this
    ->createMock(ContentEntityInterface::class);
  $entity
    ->expects($this
    ->any())
    ->method('getEntityTypeId')
    ->willReturn($this->entityType
    ->getBundleEntityType());
  $entity
    ->expects($this
    ->any())
    ->method('id')
    ->willReturn(1);
  $entity
    ->expects($this
    ->any())
    ->method('uuid')
    ->willReturn('this-is-my-uuid');
  $entity
    ->expects($this
    ->any())
    ->method('bundle')
    ->willReturn($this->entityType
    ->id());
  $entity
    ->expects($this
    ->once())
    ->method('getUntranslated')
    ->willReturnSelf();
  $firstEntity = $this
    ->createMock(ContentEntityInterface::class);
  $firstEntity
    ->expects($this
    ->any())
    ->method('getEntityTypeId')
    ->willReturn('the_first_type');
  $firstEntity
    ->expects($this
    ->any())
    ->method('id')
    ->willReturn(8);
  $firstEntity
    ->expects($this
    ->any())
    ->method('uuid')
    ->willReturn('the-first-entity-uuid');
  $firstEntity
    ->expects($this
    ->any())
    ->method('bundle')
    ->willReturn('first_bundle');
  $firstEntity
    ->expects($this
    ->once())
    ->method('isTranslatable')
    ->willReturn(TRUE);
  $firstEntity
    ->expects($this
    ->exactly(2))
    ->method('getUntranslated')
    ->willReturnSelf();
  $secondEntity = $this
    ->createMock(ContentEntityInterface::class);
  $secondEntity
    ->expects($this
    ->any())
    ->method('getEntityTypeId')
    ->willReturn('entity_id');
  $secondEntity
    ->expects($this
    ->any())
    ->method('id')
    ->willReturn(2);
  $secondEntity
    ->expects($this
    ->any())
    ->method('uuid')
    ->willReturn('the-second-entity-uuid');
  $secondEntity
    ->expects($this
    ->any())
    ->method('bundle')
    ->willReturn('second_bundle');
  $secondEntity
    ->expects($this
    ->once())
    ->method('isTranslatable')
    ->willReturn(TRUE);
  $secondEntity
    ->expects($this
    ->exactly(2))
    ->method('getUntranslated')
    ->willReturnSelf();
  $thirdEntity = $this
    ->createMock(ContentEntityInterface::class);
  $thirdEntity
    ->expects($this
    ->any())
    ->method('getEntityTypeId')
    ->willReturn('third_entity_type');
  $thirdEntity
    ->expects($this
    ->any())
    ->method('id')
    ->willReturn(2);
  $thirdEntity
    ->expects($this
    ->any())
    ->method('uuid')
    ->willReturn('the-third-entity-uuid');
  $thirdEntity
    ->expects($this
    ->any())
    ->method('bundle')
    ->willReturn('third_bundle');
  $thirdEntity
    ->expects($this
    ->once())
    ->method('isTranslatable')
    ->willReturn(TRUE);
  $thirdEntity
    ->expects($this
    ->never())
    ->method('getUntranslated')
    ->willReturnSelf();
  $this->entityRepository
    ->expects($this
    ->exactly(3))
    ->method('loadEntityByUuid')
    ->withConsecutive([
    'the_first_type',
    'the-first-entity-uuid',
  ], [
    'entity_id',
    'the-second-entity-uuid',
  ], [
    'third_entity_type',
    'the-third-entity-uuid',
  ])
    ->willReturnOnConsecutiveCalls($firstEntity, $secondEntity, $thirdEntity);
  $data = [
    (object) [
      'value' => '<p>This is a text with an entity embed <drupal-entity data-embed-button="node" data-entity-embed-display="view_mode:node.card"  data-entity-type="the_first_type" data-entity-uuid="the-first-entity-uuid" data-langcode="en"></drupal-entity> </p>',
    ],
    (object) [
      'value' => '<p>This is a text with an entity embed <drupal-entity data-embed-button="node" data-entity-embed-display="view_mode:node.card"  data-entity-type="entity_id" data-entity-uuid="the-second-entity-uuid" data-langcode="en"></drupal-entity> </p>' . '<drupal-entity data-embed-button="node" data-entity-embed-display="view_mode:node.card"  data-entity-type="third_entity_type" data-entity-uuid="the-third-entity-uuid" data-langcode="en"></drupal-entity>',
    ],
  ];
  if ($hasSummary) {
    $data = [
      (object) [
        'value' => 'No link',
        'summary' => '<p>This is a text with an entity embed <drupal-entity data-embed-button="node" data-entity-embed-display="view_mode:node.card"  data-entity-type="the_first_type" data-entity-uuid="the-first-entity-uuid" data-langcode="en"></drupal-entity> </p>',
      ],
      (object) [
        'value' => '<p>This is a text with an entity embed <drupal-entity data-embed-button="node" data-entity-embed-display="view_mode:node.card"  data-entity-type="entity_id" data-entity-uuid="the-second-entity-uuid" data-langcode="en"></drupal-entity> </p>',
        'summary' => '<drupal-entity data-embed-button="node" data-entity-embed-display="view_mode:node.card"  data-entity-type="third_entity_type" data-entity-uuid="the-third-entity-uuid" data-langcode="en"></drupal-entity>',
      ],
    ];
  }
  $entity
    ->expects($this
    ->once())
    ->method('get')
    ->with('title')
    ->willReturn($data);
  $entities = [];
  $related = [];
  $visited = [];
  $this
    ->assertEmpty($entities);
  $this->detector
    ->extract($entity, $entities, $related, 1, $visited);

  // Entities from 2 different entity types.
  $this
    ->assertCount(2, $entities);

  // Total of three entities.
  $this
    ->assertCount(2, $entities['entity_id']);
  $this
    ->assertCount(1, $entities['the_first_type']);
  $this
    ->assertEquals($entities['entity_id'][1], $entity);
  $this
    ->assertEquals($entities['entity_id'][2], $secondEntity);
  $this
    ->assertEquals($entities['the_first_type'][8], $firstEntity);
}