function FieldableEntityDefinitionUpdateTest::testFieldableEntityTypeUpdates
Same name in other branches
- 9 core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php \Drupal\KernelTests\Core\Entity\FieldableEntityDefinitionUpdateTest::testFieldableEntityTypeUpdates()
@covers ::updateFieldableEntityType @dataProvider providerTestFieldableEntityTypeUpdates
File
-
core/
tests/ Drupal/ KernelTests/ Core/ Entity/ FieldableEntityDefinitionUpdateTest.php, line 132
Class
- FieldableEntityDefinitionUpdateTest
- Tests EntityDefinitionUpdateManager's fieldable entity update functionality.
Namespace
Drupal\KernelTests\Core\EntityCode
public function testFieldableEntityTypeUpdates($initial_rev, $initial_mul, $new_rev, $new_mul, $data_migration_supported) {
// The 'entity_test_update' entity type is neither revisionable nor
// translatable by default, so we need to get it into the initial testing
// state. This also covers the "no existing data" scenario for fieldable
// entity type updates.
if ($initial_rev || $initial_mul) {
$entity_type = $this->getUpdatedEntityTypeDefinition($initial_rev, $initial_mul);
$field_storage_definitions = $this->getUpdatedFieldStorageDefinitions($initial_rev, $initial_mul);
$this->entityDefinitionUpdateManager
->updateFieldableEntityType($entity_type, $field_storage_definitions);
$this->assertEntityTypeSchema($initial_rev, $initial_mul);
}
// Add a few entities so we can test the data copying step.
$this->insertData($initial_rev, $initial_mul);
$updated_entity_type = $this->getUpdatedEntityTypeDefinition($new_rev, $new_mul);
$updated_field_storage_definitions = $this->getUpdatedFieldStorageDefinitions($new_rev, $new_mul);
if (!$data_migration_supported) {
$this->expectException(EntityStorageException::class);
$this->expectExceptionMessage('Converting an entity type from revisionable to non-revisionable or from translatable to non-translatable is not supported.');
}
// Check that existing data can be retrieved from the storage before the
// entity schema is updated.
if ($data_migration_supported) {
$this->assertEntityData($initial_rev, $initial_mul);
}
// Enable the creation of a new base field during a fieldable entity type
// update.
$this->state
->set('entity_test_update.install_new_base_field_during_update', TRUE);
// Simulate a batch run since we are converting the entities one by one.
$sandbox = [];
do {
$this->entityDefinitionUpdateManager
->updateFieldableEntityType($updated_entity_type, $updated_field_storage_definitions, $sandbox);
} while ($sandbox['#finished'] != 1);
$this->assertEntityTypeSchema($new_rev, $new_mul, TRUE);
$this->assertEntityData($initial_rev, $initial_mul);
$change_list = $this->entityDefinitionUpdateManager
->getChangeList();
$this->assertArrayNotHasKey('entity_test_update', $change_list, "There are no remaining updates for the 'entity_test_update' entity type.");
// Check that we can still save new entities after the schema has been
// updated.
$this->insertData($new_rev, $new_mul);
// Check that the backup tables have been kept in place.
$this->assertBackupTables();
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.