public function FieldSqlStorageTest::testTableNames in Drupal 8
Same name and namespace in other branches
- 9 core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php \Drupal\KernelTests\Core\Entity\FieldSqlStorageTest::testTableNames()
Tests table name generation.
File
- core/
tests/ Drupal/ KernelTests/ Core/ Entity/ FieldSqlStorageTest.php, line 479
Class
- FieldSqlStorageTest
- Tests Field SQL Storage .
Namespace
Drupal\KernelTests\Core\EntityCode
public function testTableNames() {
// Note: we need to test entity types with long names. We therefore use
// fields on imaginary entity types (works as long as we don't actually save
// them), and just check the generated table names.
// Short entity type and field name.
$entity_type = 'short_entity_type';
$field_name = 'short_field_name';
$field_storage = FieldStorageConfig::create([
'entity_type' => $entity_type,
'field_name' => $field_name,
'type' => 'test_field',
]);
$expected = 'short_entity_type__short_field_name';
$this
->assertEqual($this->tableMapping
->getDedicatedDataTableName($field_storage), $expected);
$expected = 'short_entity_type_revision__short_field_name';
$this
->assertEqual($this->tableMapping
->getDedicatedRevisionTableName($field_storage), $expected);
// Short entity type, long field name
$entity_type = 'short_entity_type';
$field_name = 'long_field_name_abcdefghijklmnopqrstuvwxyz';
$field_storage = FieldStorageConfig::create([
'entity_type' => $entity_type,
'field_name' => $field_name,
'type' => 'test_field',
]);
$expected = 'short_entity_type__' . substr(hash('sha256', $field_storage
->uuid()), 0, 10);
$this
->assertEqual($this->tableMapping
->getDedicatedDataTableName($field_storage), $expected);
$expected = 'short_entity_type_r__' . substr(hash('sha256', $field_storage
->uuid()), 0, 10);
$this
->assertEqual($this->tableMapping
->getDedicatedRevisionTableName($field_storage), $expected);
// Long entity type, short field name
$entity_type = 'long_entity_type_abcdefghijklmnopqrstuvwxyz';
$field_name = 'short_field_name';
$field_storage = FieldStorageConfig::create([
'entity_type' => $entity_type,
'field_name' => $field_name,
'type' => 'test_field',
]);
$expected = 'long_entity_type_abcdefghijklmno__' . substr(hash('sha256', $field_storage
->uuid()), 0, 10);
$this
->assertEqual($this->tableMapping
->getDedicatedDataTableName($field_storage), $expected);
$expected = 'long_entity_type_abcdefghijklmno_r__' . substr(hash('sha256', $field_storage
->uuid()), 0, 10);
$this
->assertEqual($this->tableMapping
->getDedicatedRevisionTableName($field_storage), $expected);
// Long entity type and field name.
$entity_type = 'long_entity_type_abcdefghijklmnopqrstuvwxyz';
$field_name = 'long_field_name_abcdefghijklmnopqrstuvwxyz';
$field_storage = FieldStorageConfig::create([
'entity_type' => $entity_type,
'field_name' => $field_name,
'type' => 'test_field',
]);
$expected = 'long_entity_type_abcdefghijklmno__' . substr(hash('sha256', $field_storage
->uuid()), 0, 10);
$this
->assertEqual($this->tableMapping
->getDedicatedDataTableName($field_storage), $expected);
$expected = 'long_entity_type_abcdefghijklmno_r__' . substr(hash('sha256', $field_storage
->uuid()), 0, 10);
$this
->assertEqual($this->tableMapping
->getDedicatedRevisionTableName($field_storage), $expected);
// Try creating a second field and check there are no clashes.
$field_storage2 = FieldStorageConfig::create([
'entity_type' => $entity_type,
'field_name' => $field_name . '2',
'type' => 'test_field',
]);
$this
->assertNotEqual($this->tableMapping
->getDedicatedDataTableName($field_storage), $this->tableMapping
->getDedicatedDataTableName($field_storage2));
$this
->assertNotEqual($this->tableMapping
->getDedicatedRevisionTableName($field_storage), $this->tableMapping
->getDedicatedRevisionTableName($field_storage2));
// Deleted field.
$field_storage = FieldStorageConfig::create([
'entity_type' => 'some_entity_type',
'field_name' => 'some_field_name',
'type' => 'test_field',
'deleted' => TRUE,
]);
$expected = 'field_deleted_data_' . substr(hash('sha256', $field_storage
->uuid()), 0, 10);
$this
->assertEqual($this->tableMapping
->getDedicatedDataTableName($field_storage, TRUE), $expected);
$expected = 'field_deleted_revision_' . substr(hash('sha256', $field_storage
->uuid()), 0, 10);
$this
->assertEqual($this->tableMapping
->getDedicatedRevisionTableName($field_storage, TRUE), $expected);
// Check that the table mapping is kept up-to-date in a request where a new
// field storage definition is added. Since the cardinality of the field is
// greater than 1, the table name retrieved from getFieldTableName() should
// be the dedicated table.
$field_storage = FieldStorageConfig::create([
'entity_type' => 'entity_test_rev',
'field_name' => 'some_field_name',
'type' => 'test_field',
'cardinality' => 2,
]);
$field_storage
->save();
$table_mapping = \Drupal::entityTypeManager()
->getStorage('entity_test_rev')
->getTableMapping();
$this
->assertEquals($table_mapping
->getDedicatedDataTableName($field_storage), $table_mapping
->getFieldTableName('some_field_name'));
}