public function EntityDefinitionUpdateTest::testBaseFieldCreateDeleteWithExistingEntities in Drupal 9
Same name and namespace in other branches
- 8 core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php \Drupal\KernelTests\Core\Entity\EntityDefinitionUpdateTest::testBaseFieldCreateDeleteWithExistingEntities()
- 10 core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php \Drupal\KernelTests\Core\Entity\EntityDefinitionUpdateTest::testBaseFieldCreateDeleteWithExistingEntities()
Tests creating and deleting a base field if entities exist.
This tests deletion when there are existing entities, but non-existent data for the field being deleted.
See also
testBaseFieldDeleteWithExistingData()
File
- core/
tests/ Drupal/ KernelTests/ Core/ Entity/ EntityDefinitionUpdateTest.php, line 383
Class
- EntityDefinitionUpdateTest
- Tests EntityDefinitionUpdateManager functionality.
Namespace
Drupal\KernelTests\Core\EntityCode
public function testBaseFieldCreateDeleteWithExistingEntities() {
// Save an entity.
$name = $this
->randomString();
$storage = $this->entityTypeManager
->getStorage('entity_test_update');
$entity = $storage
->create([
'name' => $name,
]);
$entity
->save();
// Add a base field and run the update. Ensure the base field's column is
// created and the prior saved entity data is still there.
$this
->addBaseField();
$this
->applyEntityUpdates();
$schema_handler = $this->database
->schema();
$this
->assertTrue($schema_handler
->fieldExists('entity_test_update', 'new_base_field'), 'Column created in shared table for new_base_field.');
$entity = $this->entityTypeManager
->getStorage('entity_test_update')
->load($entity
->id());
$this
->assertSame($name, $entity->name->value, 'Entity data preserved during field creation.');
// Remove the base field and run the update. Ensure the base field's column
// is deleted and the prior saved entity data is still there.
$this
->removeBaseField();
$this
->applyEntityUpdates();
$this
->assertFalse($schema_handler
->fieldExists('entity_test_update', 'new_base_field'), 'Column deleted from shared table for new_base_field.');
$entity = $this->entityTypeManager
->getStorage('entity_test_update')
->load($entity
->id());
$this
->assertSame($name, $entity->name->value, 'Entity data preserved during field deletion.');
// Add a base field with a required property and run the update. Ensure
// 'not null' is not applied and thus no exception is thrown.
$this
->addBaseField('shape_required');
$this
->applyEntityUpdates();
$assert = $schema_handler
->fieldExists('entity_test_update', 'new_base_field__shape') && $schema_handler
->fieldExists('entity_test_update', 'new_base_field__color');
$this
->assertTrue($assert, 'Columns created in shared table for new_base_field.');
// Recreate the field after emptying the base table and check that its
// columns are not 'not null'.
// @todo Revisit this test when allowing for required storage field
// definitions. See https://www.drupal.org/node/2390495.
$entity
->delete();
$this
->removeBaseField();
$this
->applyEntityUpdates();
$this
->assertFalse($schema_handler
->fieldExists('entity_test_update', 'new_base_field__shape'), 'Shape column should be removed from the shared table for new_base_field.');
$this
->assertFalse($schema_handler
->fieldExists('entity_test_update', 'new_base_field__color'), 'Color column should be removed from the shared table for new_base_field.');
$this
->addBaseField('shape_required');
$this
->applyEntityUpdates();
$assert = $schema_handler
->fieldExists('entity_test_update', 'new_base_field__shape') && $schema_handler
->fieldExists('entity_test_update', 'new_base_field__color');
$this
->assertTrue($assert, 'Columns created again in shared table for new_base_field.');
$entity = $storage
->create([
'name' => $name,
]);
$entity
->save();
}