You are here

public function EntityReferenceItemTest::testConfigEntityReferenceItem in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/field/src/Tests/EntityReference/EntityReferenceItemTest.php \Drupal\field\Tests\EntityReference\EntityReferenceItemTest::testConfigEntityReferenceItem()

Tests the entity reference field type for referencing config entities.

File

core/modules/field/src/Tests/EntityReference/EntityReferenceItemTest.php, line 208
Contains \Drupal\field\Tests\EntityReference\EntityReferenceItemTest.

Class

EntityReferenceItemTest
Tests the new entity API for the entity reference field type.

Namespace

Drupal\field\Tests\EntityReference

Code

public function testConfigEntityReferenceItem() {
  $referenced_entity_id = $this->vocabulary
    ->id();

  // Just being able to create the entity like this verifies a lot of code.
  $entity = entity_create('entity_test');
  $entity->field_test_taxonomy_vocabulary->target_id = $referenced_entity_id;
  $entity->name->value = $this
    ->randomMachineName();
  $entity
    ->save();
  $entity = entity_load('entity_test', $entity
    ->id());
  $this
    ->assertTrue($entity->field_test_taxonomy_vocabulary instanceof FieldItemListInterface, 'Field implements interface.');
  $this
    ->assertTrue($entity->field_test_taxonomy_vocabulary[0] instanceof FieldItemInterface, 'Field item implements interface.');
  $this
    ->assertEqual($entity->field_test_taxonomy_vocabulary->target_id, $referenced_entity_id);
  $this
    ->assertEqual($entity->field_test_taxonomy_vocabulary->entity
    ->label(), $this->vocabulary
    ->label());
  $this
    ->assertEqual($entity->field_test_taxonomy_vocabulary->entity
    ->id(), $referenced_entity_id);
  $this
    ->assertEqual($entity->field_test_taxonomy_vocabulary->entity
    ->uuid(), $this->vocabulary
    ->uuid());

  // Change the name of the term via the reference.
  $new_name = $this
    ->randomMachineName();
  $entity->field_test_taxonomy_vocabulary->entity
    ->set('name', $new_name);
  $entity->field_test_taxonomy_vocabulary->entity
    ->save();

  // Verify it is the correct name.
  $vocabulary = Vocabulary::load($referenced_entity_id);
  $this
    ->assertEqual($vocabulary
    ->label(), $new_name);

  // Make sure the computed term reflects updates to the term id.
  $vocabulary2 = entity_create('taxonomy_vocabulary', array(
    'name' => $this
      ->randomMachineName(),
    'vid' => Unicode::strtolower($this
      ->randomMachineName()),
    'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
  ));
  $vocabulary2
    ->save();
  $entity->field_test_taxonomy_vocabulary->target_id = $vocabulary2
    ->id();
  $this
    ->assertEqual($entity->field_test_taxonomy_vocabulary->entity
    ->id(), $vocabulary2
    ->id());
  $this
    ->assertEqual($entity->field_test_taxonomy_vocabulary->entity
    ->label(), $vocabulary2
    ->label());

  // Delete terms so we have nothing to reference and try again
  $this->vocabulary
    ->delete();
  $vocabulary2
    ->delete();
  $entity = entity_create('entity_test', array(
    'name' => $this
      ->randomMachineName(),
  ));
  $entity
    ->save();
}