public function ContentEntitySourceTranslatableEntityTest::testTranslatableEntityReferences

Tests that the referenced entities are always embedded.

File

sources/content/tests/src/Functional/ContentEntitySourceTranslatableEntityTest.php, line 55

Class

ContentEntitySourceTranslatableEntityTest
Tests always embedded entity reference fields.

Namespace

Drupal\Tests\tmgmt_content\Functional

Code

public function testTranslatableEntityReferences() {

  // Assert there is NO embedded references yet.
  $this
    ->drupalGet('/admin/tmgmt/settings');
  $xpath = '//*[@id="edit-content"]';
  $embedded_entity = '<label for="edit-always-embedded">Always embedded</label>';
  $embedded_node = '<span class="fieldset-legend">Content</span>';
  $this
    ->assertSession()
    ->pageTextNotContains('Authored by (User)');
  $this
    ->assertStringNotContainsString($embedded_entity, $this
    ->xpath($xpath)[0]
    ->getOuterHtml());
  $this
    ->assertStringNotContainsString($embedded_node, $this
    ->xpath($xpath)[0]
    ->getOuterHtml());

  // Create the reference field to the composite entity test.
  $this
    ->createEntityReferenceField('node', 'article', 'entity_test_composite', 'entity_test_composite', 'entity_test_composite');
  FieldConfig::loadByName('node', 'article', 'entity_test_composite')
    ->setTranslatable(FALSE)
    ->save();

  // Assert there IS the entity_test_composite as entity embedded now.
  $this
    ->drupalGet('/admin/tmgmt/settings');
  $this
    ->assertSession()
    ->pageTextContains('Content: entity_test_composite');
  $this
    ->assertStringContainsString($embedded_entity, $this
    ->xpath($xpath)[0]
    ->getOuterHtml());

  // Create the composite entity test.
  $composite = EntityTestComposite::create(array(
    'name' => 'composite name',
  ));
  $composite
    ->save();

  // Create a node with a reference to the composite entity test.
  $node = $this
    ->createNode(array(
    'title' => 'node title',
    'type' => 'article',
    'entity_test_composite' => $composite,
  ));

  // Create a job and job item for the node.
  $job = $this
    ->createJob();
  $job
    ->save();
  $job_item = tmgmt_job_item_create('content', $node
    ->getEntityTypeId(), $node
    ->id(), [
    'tjid' => $job
      ->id(),
  ]);
  $job_item
    ->save();

  // Get the data and check it contains the data for the composite entity.
  $data = $job_item
    ->getData();
  $this
    ->assertTrue(isset($data['entity_test_composite']));
  $this
    ->assertEquals('entity_test_composite', $data['entity_test_composite']['#label']);
  $this
    ->assertFalse(isset($data['entity_test_composite'][0]['#label']));
  $this
    ->assertEquals('Name', $data['entity_test_composite'][0]['entity']['name']['#label']);
  $this
    ->assertEquals('composite name', $data['entity_test_composite'][0]['entity']['name'][0]['value']['#text']);

  // Ensure that only Content is shown in the source select form.
  $this
    ->drupalGet('/admin/tmgmt/sources');
  $this
    ->assertSession()
    ->optionExists('edit-source', 'content:node');
  $this
    ->assertSession()
    ->optionNotExists('edit-source', 'content:entity_test_composite');

  // Now request a translation and save it back.
  $job->translator = $this->default_translator
    ->id();
  $job
    ->requestTranslation();
  $items = $job
    ->getItems();
  $item = reset($items);
  $item
    ->acceptTranslation();

  // Load existing node and test translating
  $node = Node::load($node
    ->id());
  $translation = $node
    ->getTranslation('de');

  // The IDs of the composite entities did not change.
  $this
    ->assertEquals($node
    ->get('entity_test_composite')->target_id, $translation
    ->get('entity_test_composite')->target_id);
  $composite = EntityTestComposite::load($translation
    ->get('entity_test_composite')->target_id);
  $composite = $composite
    ->getTranslation('de');
  $this
    ->assertEquals('de(de-ch): composite name', $composite
    ->label());
}