function FieldAttachStorageTest::testFieldAttachDelete

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

Tests entity deletion.

File

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

Class

FieldAttachStorageTest
Tests storage-related Field Attach API functions.

Namespace

Drupal\Tests\field\Kernel

Code

public function testFieldAttachDelete() : void {
  $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();
  /** @var \Drupal\Core\Entity\RevisionableStorageInterface $controller */
  $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->assertCount($cardinality, $revision->{$this->fieldTestData->field_name}, "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->assertCount($cardinality, $revision->{$this->fieldTestData->field_name}, "The test entity revision {$vid} has {$cardinality} values.");
  }
  // Confirm the current revision still loads
  $controller->resetCache();
  $current = $controller->load($entity->id());
  $this->assertCount($cardinality, $current->{$this->fieldTestData->field_name}, "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()));
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.