public function SqlContentEntityStorageSchemaTest::testGetSchemaBase in Drupal 8
Tests the schema for non-revisionable, non-translatable entities.
@covers ::__construct @covers ::getEntitySchemaTables @covers ::initializeBaseTable @covers ::addTableDefaults @covers ::getEntityIndexName @covers ::getFieldIndexes @covers ::getFieldUniqueKeys @covers ::getFieldForeignKeys @covers ::getFieldSchemaData @covers ::processBaseTable @covers ::processIdentifierSchema
File
- core/
tests/ Drupal/ Tests/ Core/ Entity/ Sql/ SqlContentEntityStorageSchemaTest.php, line 117
Class
- SqlContentEntityStorageSchemaTest
- @coversDefaultClass \Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema @group Entity
Namespace
Drupal\Tests\Core\Entity\SqlCode
public function testGetSchemaBase() {
$this->entityType = new ContentEntityType([
'id' => 'entity_test',
'entity_keys' => [
'id' => 'id',
],
]);
// Add a field with a 'length' constraint.
$this
->setUpStorageDefinition('name', [
'columns' => [
'value' => [
'type' => 'varchar',
'length' => 255,
],
],
]);
// Add a multi-column field.
$this
->setUpStorageDefinition('description', [
'columns' => [
'value' => [
'type' => 'text',
],
'format' => [
'type' => 'varchar',
],
],
]);
// Add a field with a unique key.
$this
->setUpStorageDefinition('uuid', [
'columns' => [
'value' => [
'type' => 'varchar',
'length' => 128,
],
],
'unique keys' => [
'value' => [
'value',
],
],
]);
// Add a field with a unique key, specified as column name and length.
$this
->setUpStorageDefinition('hash', [
'columns' => [
'value' => [
'type' => 'varchar',
'length' => 20,
],
],
'unique keys' => [
'value' => [
[
'value',
10,
],
],
],
]);
// Add a field with a multi-column unique key.
$this
->setUpStorageDefinition('email', [
'columns' => [
'username' => [
'type' => 'varchar',
],
'hostname' => [
'type' => 'varchar',
],
'domain' => [
'type' => 'varchar',
],
],
'unique keys' => [
'email' => [
'username',
'hostname',
[
'domain',
3,
],
],
],
]);
// Add a field with an index.
$this
->setUpStorageDefinition('owner', [
'columns' => [
'target_id' => [
'type' => 'int',
],
],
'indexes' => [
'target_id' => [
'target_id',
],
],
]);
// Add a field with an index, specified as column name and length.
$this
->setUpStorageDefinition('translator', [
'columns' => [
'target_id' => [
'type' => 'int',
],
],
'indexes' => [
'target_id' => [
[
'target_id',
10,
],
],
],
]);
// Add a field with a multi-column index.
$this
->setUpStorageDefinition('location', [
'columns' => [
'country' => [
'type' => 'varchar',
],
'state' => [
'type' => 'varchar',
],
'city' => [
'type' => 'varchar',
],
],
'indexes' => [
'country_state_city' => [
'country',
'state',
[
'city',
10,
],
],
],
]);
// Add a field with a foreign key.
$this
->setUpStorageDefinition('editor', [
'columns' => [
'target_id' => [
'type' => 'int',
],
],
'foreign keys' => [
'user_id' => [
'table' => 'users',
'columns' => [
'target_id' => 'uid',
],
],
],
]);
// Add a multi-column field with a foreign key.
$this
->setUpStorageDefinition('editor_revision', [
'columns' => [
'target_id' => [
'type' => 'int',
],
'target_revision_id' => [
'type' => 'int',
],
],
'foreign keys' => [
'user_id' => [
'table' => 'users',
'columns' => [
'target_id' => 'uid',
],
],
],
]);
// Add a field with a really long index.
$this
->setUpStorageDefinition('long_index_name', [
'columns' => [
'long_index_name' => [
'type' => 'int',
],
],
'indexes' => [
'long_index_name_really_long_long_name' => [
[
'long_index_name',
10,
],
],
],
]);
$expected = [
'entity_test' => [
'description' => 'The base table for entity_test entities.',
'fields' => [
'id' => [
'type' => 'serial',
'not null' => TRUE,
],
'name' => [
'type' => 'varchar',
'length' => 255,
'not null' => FALSE,
],
'description__value' => [
'type' => 'text',
'not null' => FALSE,
],
'description__format' => [
'type' => 'varchar',
'not null' => FALSE,
],
'uuid' => [
'type' => 'varchar',
'length' => 128,
'not null' => FALSE,
],
'hash' => [
'type' => 'varchar',
'length' => 20,
'not null' => FALSE,
],
'email__username' => [
'type' => 'varchar',
'not null' => FALSE,
],
'email__hostname' => [
'type' => 'varchar',
'not null' => FALSE,
],
'email__domain' => [
'type' => 'varchar',
'not null' => FALSE,
],
'owner' => [
'type' => 'int',
'not null' => FALSE,
],
'translator' => [
'type' => 'int',
'not null' => FALSE,
],
'location__country' => [
'type' => 'varchar',
'not null' => FALSE,
],
'location__state' => [
'type' => 'varchar',
'not null' => FALSE,
],
'location__city' => [
'type' => 'varchar',
'not null' => FALSE,
],
'editor' => [
'type' => 'int',
'not null' => FALSE,
],
'editor_revision__target_id' => [
'type' => 'int',
'not null' => FALSE,
],
'editor_revision__target_revision_id' => [
'type' => 'int',
'not null' => FALSE,
],
'long_index_name' => [
'type' => 'int',
'not null' => FALSE,
],
],
'primary key' => [
'id',
],
'unique keys' => [
'entity_test_field__uuid__value' => [
'uuid',
],
'entity_test_field__hash__value' => [
[
'hash',
10,
],
],
'entity_test_field__email__email' => [
'email__username',
'email__hostname',
[
'email__domain',
3,
],
],
],
'indexes' => [
'entity_test_field__owner__target_id' => [
'owner',
],
'entity_test_field__translator__target_id' => [
[
'translator',
10,
],
],
'entity_test_field__location__country_state_city' => [
'location__country',
'location__state',
[
'location__city',
10,
],
],
'entity_test__b588603cb9' => [
[
'long_index_name',
10,
],
],
],
'foreign keys' => [
'entity_test_field__editor__user_id' => [
'table' => 'users',
'columns' => [
'editor' => 'uid',
],
],
'entity_test_field__editor_revision__user_id' => [
'table' => 'users',
'columns' => [
'editor_revision__target_id' => 'uid',
],
],
],
],
];
$this
->setUpStorageSchema($expected);
$table_mapping = new TestSqlContentDefaultTableMapping($this->entityType, $this->storageDefinitions);
$table_mapping
->setFieldNames('entity_test', array_keys($this->storageDefinitions));
$table_mapping
->setExtraColumns('entity_test', [
'default_langcode',
]);
$this->storageSchema
->expects($this
->any())
->method('getTableMapping')
->will($this
->returnValue($table_mapping));
$this
->assertNull($this->storageSchema
->onEntityTypeCreate($this->entityType));
}