function EntityViewsDataTest::testRevisionTableFields
Same name in other branches
- 9 core/modules/views/tests/src/Kernel/Entity/EntityViewsDataTest.php \Drupal\Tests\views\Kernel\Entity\EntityViewsDataTest::testRevisionTableFields()
- 10 core/modules/views/tests/src/Kernel/Entity/EntityViewsDataTest.php \Drupal\Tests\views\Kernel\Entity\EntityViewsDataTest::testRevisionTableFields()
- 11.x core/modules/views/tests/src/Kernel/Entity/EntityViewsDataTest.php \Drupal\Tests\views\Kernel\Entity\EntityViewsDataTest::testRevisionTableFields()
Tests fields on the revision table.
File
-
core/
modules/ views/ tests/ src/ Unit/ EntityViewsDataTest.php, line 749
Class
- EntityViewsDataTest
- @coversDefaultClass \Drupal\views\EntityViewsData @group Views
Namespace
Drupal\Tests\views\UnitCode
public function testRevisionTableFields() {
$entity_type = $this->baseEntityType
->set('base_table', 'entity_test_mulrev')
->set('revision_table', 'entity_test_mulrev_revision')
->set('data_table', 'entity_test_mulrev_property_data')
->set('revision_data_table', 'entity_test_mulrev_property_revision')
->set('id', 'entity_test_mulrev')
->set('translatable', TRUE);
$base_field_definitions = $this->setupBaseFields(EntityTestMulRev::baseFieldDefinitions($this->baseEntityType));
$user_base_field_definitions = [
'uid' => BaseFieldDefinition::create('integer')->setLabel('ID')
->setDescription('The ID of the user entity.')
->setReadOnly(TRUE)
->setSetting('unsigned', TRUE),
];
$this->entityFieldManager
->expects($this->any())
->method('getBaseFieldDefinitions')
->will($this->returnValueMap([
[
'user',
$user_base_field_definitions,
],
[
'entity_test_mulrev',
$base_field_definitions,
],
]));
$this->entityFieldManager
->expects($this->any())
->method('getBaseFieldDefinitions')
->will($this->returnValueMap([
[
'user',
$user_base_field_definitions,
],
[
'entity_test_mulrev',
$base_field_definitions,
],
]));
$this->viewsData
->setEntityType($entity_type);
// Setup the table mapping.
$table_mapping = $this->getMockBuilder(DefaultTableMapping::class)
->disableOriginalConstructor()
->getMock();
$table_mapping->expects($this->any())
->method('getTableNames')
->willReturn([
'entity_test_mulrev',
'entity_test_mulrev_revision',
'entity_test_mulrev_property_data',
'entity_test_mulrev_property_revision',
'entity_test_mulrev__string',
'entity_test_mulrev_revision__string',
]);
$table_mapping->expects($this->any())
->method('getColumnNames')
->willReturnMap([
[
'id',
[
'value' => 'id',
],
],
[
'uuid',
[
'value' => 'uuid',
],
],
[
'type',
[
'value' => 'type',
],
],
[
'langcode',
[
'value' => 'langcode',
],
],
[
'name',
[
'value' => 'name',
],
],
[
'description',
[
'value' => 'description__value',
'format' => 'description__format',
],
],
[
'homepage',
[
'value' => 'homepage',
],
],
[
'user_id',
[
'target_id' => 'user_id',
],
],
[
'revision_id',
[
'value' => 'revision_id',
],
],
[
'string',
[
'value' => 'string_value',
],
],
]);
$table_mapping->expects($this->any())
->method('getFieldNames')
->willReturnMap([
[
'entity_test_mulrev',
[
'id',
'revision_id',
'uuid',
'type',
],
],
[
'entity_test_mulrev_revision',
[
'id',
'revision_id',
'langcode',
],
],
[
'entity_test_mulrev_property_data',
[
'id',
'revision_id',
'langcode',
'name',
'description',
'homepage',
'user_id',
],
],
[
'entity_test_mulrev_property_revision',
[
'id',
'revision_id',
'langcode',
'name',
'description',
'homepage',
'user_id',
],
],
[
'entity_test_mulrev__string',
[
'string',
],
],
[
'entity_test_mulrev_revision__string',
[
'string',
],
],
]);
$table_mapping->expects($this->any())
->method('requiresDedicatedTableStorage')
->willReturnCallback(function (BaseFieldDefinition $base_field) {
return $base_field->getName() === 'string';
});
$table_mapping->expects($this->any())
->method('getDedicatedDataTableName')
->willReturnCallback(function (BaseFieldDefinition $base_field) {
if ($base_field->getName() === 'string') {
return 'entity_test_mulrev__string';
}
});
$table_mapping->expects($this->any())
->method('getDedicatedRevisionTableName')
->willReturnCallback(function (BaseFieldDefinition $base_field) {
if ($base_field->getName() === 'string') {
return 'entity_test_mulrev_revision__string';
}
});
$table_mapping->expects($this->any())
->method('getFieldTableName')
->willReturnCallback(function ($field) {
if ($field == 'uuid') {
return 'entity_test_mulrev';
}
return 'entity_test_mulrev_property_data';
});
$this->entityStorage
->expects($this->once())
->method('getTableMapping')
->willReturn($table_mapping);
$this->setupFieldStorageDefinition();
$data = $this->viewsData
->getViewsData();
// Check the base fields.
$this->assertFalse(isset($data['entity_test_mulrev']['id']));
$this->assertFalse(isset($data['entity_test_mulrev']['type']));
$this->assertFalse(isset($data['entity_test_mulrev']['revision_id']));
$this->assertUuidField($data['entity_test_mulrev']['uuid']);
$this->assertField($data['entity_test_mulrev']['uuid'], 'uuid');
// Also ensure that field_data only fields don't appear on the base table.
$this->assertFalse(isset($data['entity_test_mulrev']['name']));
$this->assertFalse(isset($data['entity_test_mul']['description']));
$this->assertFalse(isset($data['entity_test_mul']['description__value']));
$this->assertFalse(isset($data['entity_test_mul']['description__format']));
$this->assertFalse(isset($data['entity_test_mul']['homepage']));
$this->assertFalse(isset($data['entity_test_mulrev']['langcode']));
$this->assertFalse(isset($data['entity_test_mulrev']['user_id']));
// Check the revision fields. The revision ID should only appear in the data
// table.
$this->assertFalse(isset($data['entity_test_mulrev_revision']['revision_id']));
// Also ensure that field_data only fields don't appear on the revision table.
$this->assertFalse(isset($data['entity_test_mulrev_revision']['id']));
$this->assertFalse(isset($data['entity_test_mulrev_revision']['name']));
$this->assertFalse(isset($data['entity_test_mulrev_revision']['description']));
$this->assertFalse(isset($data['entity_test_mulrev_revision']['description__value']));
$this->assertFalse(isset($data['entity_test_mulrev_revision']['description__format']));
$this->assertFalse(isset($data['entity_test_mulrev_revision']['homepage']));
$this->assertFalse(isset($data['entity_test_mulrev_revision']['user_id']));
// Check the data fields.
$this->assertNumericField($data['entity_test_mulrev_property_data']['id']);
$this->assertField($data['entity_test_mulrev_property_data']['id'], 'id');
$this->assertNumericField($data['entity_test_mulrev_property_data']['revision_id']);
$this->assertField($data['entity_test_mulrev_property_data']['revision_id'], 'revision_id');
$this->assertLanguageField($data['entity_test_mulrev_property_data']['langcode']);
$this->assertField($data['entity_test_mulrev_property_data']['langcode'], 'langcode');
$this->assertStringField($data['entity_test_mulrev_property_data']['name']);
$this->assertField($data['entity_test_mulrev_property_data']['name'], 'name');
$this->assertLongTextField($data['entity_test_mulrev_property_data'], 'description');
$this->assertField($data['entity_test_mulrev_property_data']['description__value'], 'description');
$this->assertField($data['entity_test_mulrev_property_data']['description__format'], 'description');
$this->assertUriField($data['entity_test_mulrev_property_data']['homepage']);
$this->assertField($data['entity_test_mulrev_property_data']['homepage'], 'homepage');
$this->assertEntityReferenceField($data['entity_test_mulrev_property_data']['user_id']);
$this->assertField($data['entity_test_mulrev_property_data']['user_id'], 'user_id');
$relationship = $data['entity_test_mulrev_property_data']['user_id']['relationship'];
$this->assertEquals('users_field_data', $relationship['base']);
$this->assertEquals('uid', $relationship['base field']);
// Check the property data fields.
$this->assertNumericField($data['entity_test_mulrev_property_revision']['id']);
$this->assertField($data['entity_test_mulrev_property_revision']['id'], 'id');
$this->assertLanguageField($data['entity_test_mulrev_property_revision']['langcode']);
$this->assertField($data['entity_test_mulrev_property_revision']['langcode'], 'langcode');
$this->assertEquals('Translation language', $data['entity_test_mulrev_property_revision']['langcode']['title']);
$this->assertStringField($data['entity_test_mulrev_property_revision']['name']);
$this->assertField($data['entity_test_mulrev_property_revision']['name'], 'name');
$this->assertLongTextField($data['entity_test_mulrev_property_revision'], 'description');
$this->assertField($data['entity_test_mulrev_property_revision']['description__value'], 'description');
$this->assertField($data['entity_test_mulrev_property_revision']['description__format'], 'description');
$this->assertUriField($data['entity_test_mulrev_property_revision']['homepage']);
$this->assertField($data['entity_test_mulrev_property_revision']['homepage'], 'homepage');
$this->assertEntityReferenceField($data['entity_test_mulrev_property_revision']['user_id']);
$this->assertField($data['entity_test_mulrev_property_revision']['user_id'], 'user_id');
$relationship = $data['entity_test_mulrev_property_revision']['user_id']['relationship'];
$this->assertEquals('users_field_data', $relationship['base']);
$this->assertEquals('uid', $relationship['base field']);
$this->assertStringField($data['entity_test_mulrev__string']['string_value']);
$this->assertField($data['entity_test_mulrev__string']['string_value'], 'string');
$this->assertEquals([
'left_field' => 'id',
'field' => 'entity_id',
'extra' => [
[
'field' => 'deleted',
'value' => 0,
'numeric' => TRUE,
],
],
], $data['entity_test_mulrev__string']['table']['join']['entity_test_mulrev_property_data']);
$this->assertStringField($data['entity_test_mulrev_revision__string']['string_value']);
$this->assertField($data['entity_test_mulrev_revision__string']['string_value'], 'string');
$this->assertEquals([
'left_field' => 'revision_id',
'field' => 'entity_id',
'extra' => [
[
'field' => 'deleted',
'value' => 0,
'numeric' => TRUE,
],
],
], $data['entity_test_mulrev_revision__string']['table']['join']['entity_test_mulrev_property_revision']);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.