You are here

public function FieldAttachStorageTest::testFieldAttachDelete in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/field/tests/src/Kernel/FieldAttachStorageTest.php \Drupal\Tests\field\Kernel\FieldAttachStorageTest::testFieldAttachDelete()

Test entity deletion.

File

core/modules/field/tests/src/Kernel/FieldAttachStorageTest.php, line 229

Class

FieldAttachStorageTest
Tests storage-related Field Attach API functions.

Namespace

Drupal\Tests\field\Kernel

Code

public function testFieldAttachDelete() {
  $entity_type = 'entity_test_rev';
  $this
    ->createFieldWithStorage('', $entity_type);
  $cardinality = $this->fieldTestData->field_storage
    ->getCardinality();
  $entity = $this->container
    ->get('entity_type.manager')
    ->getStorage($entity_type)
    ->create([
    'type' => $this->fieldTestData->field
      ->getTargetBundle(),
  ]);
  $vids = [];

  // Create revision 0
  $values = $this
    ->_generateTestFieldValues($cardinality);
  $entity->{$this->fieldTestData->field_name} = $values;
  $entity
    ->save();
  $vids[] = $entity
    ->getRevisionId();

  // Create revision 1
  $entity
    ->setNewRevision();
  $entity
    ->save();
  $vids[] = $entity
    ->getRevisionId();

  // Create revision 2
  $entity
    ->setNewRevision();
  $entity
    ->save();
  $vids[] = $entity
    ->getRevisionId();
  $controller = $this->container
    ->get('entity_type.manager')
    ->getStorage($entity
    ->getEntityTypeId());
  $controller
    ->resetCache();

  // Confirm each revision loads
  foreach ($vids as $vid) {
    $revision = $controller
      ->loadRevision($vid);
    $this
      ->assertEqual(count($revision->{$this->fieldTestData->field_name}), $cardinality, "The test entity revision {$vid} has {$cardinality} values.");
  }

  // Delete revision 1, confirm the other two still load.
  $controller
    ->deleteRevision($vids[1]);
  $controller
    ->resetCache();
  foreach ([
    0,
    2,
  ] as $key) {
    $vid = $vids[$key];
    $revision = $controller
      ->loadRevision($vid);
    $this
      ->assertEqual(count($revision->{$this->fieldTestData->field_name}), $cardinality, "The test entity revision {$vid} has {$cardinality} values.");
  }

  // Confirm the current revision still loads
  $controller
    ->resetCache();
  $current = $controller
    ->load($entity
    ->id());
  $this
    ->assertEqual(count($current->{$this->fieldTestData->field_name}), $cardinality, "The test entity current revision has {$cardinality} values.");

  // Delete all field data, confirm nothing loads
  $entity
    ->delete();
  $controller
    ->resetCache();
  foreach ([
    0,
    1,
    2,
  ] as $vid) {
    $revision = $controller
      ->loadRevision($vid);
    $this
      ->assertNull($revision);
  }
  $this
    ->assertNull($controller
    ->load($entity
    ->id()));
}