function EntityDefinitionUpdateTest::testBaseFieldEntityKeyUpdateWithExistingData
Same name in other branches
- 9 core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php \Drupal\KernelTests\Core\Entity\EntityDefinitionUpdateTest::testBaseFieldEntityKeyUpdateWithExistingData()
- 8.9.x core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php \Drupal\KernelTests\Core\Entity\EntityDefinitionUpdateTest::testBaseFieldEntityKeyUpdateWithExistingData()
- 10 core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php \Drupal\KernelTests\Core\Entity\EntityDefinitionUpdateTest::testBaseFieldEntityKeyUpdateWithExistingData()
Tests updating a base field when it has existing data.
File
-
core/
tests/ Drupal/ KernelTests/ Core/ Entity/ EntityDefinitionUpdateTest.php, line 930
Class
- EntityDefinitionUpdateTest
- Tests EntityDefinitionUpdateManager functionality.
Namespace
Drupal\KernelTests\Core\EntityCode
public function testBaseFieldEntityKeyUpdateWithExistingData() : void {
// Add the base field and run the update.
$this->addBaseField();
$this->applyEntityUpdates();
// Save an entity with the base field populated.
$this->entityTypeManager
->getStorage('entity_test_update')
->create([
'new_base_field' => $this->randomString(),
])
->save();
// Save an entity with the base field not populated.
/** @var \Drupal\entity_test\Entity\EntityTestUpdate $entity */
$entity = $this->entityTypeManager
->getStorage('entity_test_update')
->create();
$entity->save();
// Promote the base field to an entity key. This will trigger the addition
// of a NOT NULL constraint.
$this->makeBaseFieldEntityKey();
// Field storage CRUD operations use the last installed entity type
// definition so we need to update it before doing any other field storage
// updates.
$this->entityDefinitionUpdateManager
->updateEntityType($this->state
->get('entity_test_update.entity_type'));
// Try to apply the update and verify they fail since we have a NULL value.
$message = 'An error occurs when trying to enabling NOT NULL constraints with NULL data.';
try {
$this->applyEntityUpdates();
$this->fail($message);
} catch (EntityStorageException) {
// Expected exception; just continue testing.
}
// Check that the update is correctly applied when no NULL data is left.
$entity->set('new_base_field', $this->randomString());
$entity->save();
$this->applyEntityUpdates();
// Check that the update actually applied a NOT NULL constraint.
$entity->set('new_base_field', NULL);
$message = 'The NOT NULL constraint was correctly applied.';
try {
$entity->save();
$this->fail($message);
} catch (EntityStorageException) {
// Expected exception; just continue testing.
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.