/** * Tests fields on the data table. */ public function testDataTableFields() { $entity_type = $this->baseEntityType->set('data_table', 'entity_test_mul_property_data')->set('base_table', 'entity_test_mul')->set('id', 'entity_test_mul')->setKey('bundle', 'type'); $base_field_definitions = $this->setupBaseFields(EntityTestMul::baseFieldDefinitions($this->baseEntityType)); $base_field_definitions['type'] = BaseFieldDefinition::create('entity_reference')->setLabel('entity test type')->setSetting('target_type', 'entity_test_bundle')->setTranslatable(TRUE); $base_field_definitions = $this->setupBaseFields($base_field_definitions); $user_base_field_definitions = ['uid' => BaseFieldDefinition::create('integer')->setLabel('ID')->setDescription('The ID of the user entity.')->setReadOnly(TRUE)->setSetting('unsigned', TRUE)]; $entity_test_type = new ConfigEntityType(['id' => 'entity_test_bundle']); $this->entityManager->expects($this->any())->method('getBaseFieldDefinitions')->will($this->returnValueMap([['user', $user_base_field_definitions], ['entity_test_mul', $base_field_definitions]])); $this->viewsData->setEntityType($entity_type); // Setup the table mapping. $table_mapping = $this->getMock('Drupal\\Core\\Entity\\Sql\\TableMappingInterface'); $table_mapping->expects($this->any())->method('getTableNames')->willReturn(['entity_test_mul', 'entity_test_mul_property_data']); $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']]]); $table_mapping->expects($this->any())->method('getFieldNames')->willReturnMap([['entity_test_mul', ['uuid']], ['entity_test_mul_property_data', ['id', 'type', 'langcode', 'name', 'description', 'homepage', 'user_id']]]); $table_mapping->expects($this->any())->method('getFieldTableName')->willReturnCallback(function ($field) { if ($field == 'uuid') { return 'entity_test_mul'; } return 'entity_test_mul_property_data'; }); $this->entityStorage->expects($this->once())->method('getTableMapping')->willReturn($table_mapping); $this->setupFieldStorageDefinition(); $user_entity_type = static::userEntityInfo(); $this->entityManager->expects($this->any())->method('getDefinition')->will($this->returnValueMap([['user', TRUE, $user_entity_type], ['entity_test_bundle', TRUE, $entity_test_type]])); $data = $this->viewsData->getViewsData(); // Check the base fields. $this->assertFalse(isset($data['entity_test_mul']['id'])); $this->assertFalse(isset($data['entity_test_mul']['type'])); $this->assertUuidField($data['entity_test_mul']['uuid']); $this->assertField($data['entity_test_mul']['uuid'], 'uuid'); $this->assertFalse(isset($data['entity_test_mul']['type']['relationship'])); // Also ensure that field_data only fields don't appear on the base table. $this->assertFalse(isset($data['entity_test_mul']['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']['user_id'])); $this->assertFalse(isset($data['entity_test_mul']['homepage'])); // Check the data fields. $this->assertNumericField($data['entity_test_mul_property_data']['id']); $this->assertField($data['entity_test_mul_property_data']['id'], 'id'); $this->assertBundleField($data['entity_test_mul_property_data']['type']); $this->assertField($data['entity_test_mul_property_data']['type'], 'type'); $this->assertLanguageField($data['entity_test_mul_property_data']['langcode']); $this->assertField($data['entity_test_mul_property_data']['langcode'], 'langcode'); $this->assertEquals('Translation language', $data['entity_test_mul_property_data']['langcode']['title']); $this->assertStringField($data['entity_test_mul_property_data']['name']); $this->assertField($data['entity_test_mul_property_data']['name'], 'name'); $this->assertLongTextField($data['entity_test_mul_property_data'], 'description'); $this->assertField($data['entity_test_mul_property_data']['description__value'], 'description'); $this->assertField($data['entity_test_mul_property_data']['description__format'], 'description'); $this->assertUriField($data['entity_test_mul_property_data']['homepage']); $this->assertField($data['entity_test_mul_property_data']['homepage'], 'homepage'); $this->assertEntityReferenceField($data['entity_test_mul_property_data']['user_id']); $this->assertField($data['entity_test_mul_property_data']['user_id'], 'user_id'); $relationship = $data['entity_test_mul_property_data']['user_id']['relationship']; $this->assertEquals('users_field_data', $relationship['base']); $this->assertEquals('uid', $relationship['base field']); }
/** * {@inheritdoc} */ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { $fields = parent::baseFieldDefinitions($entity_type); $fields['parent_type'] = BaseFieldDefinition::create('string')->setLabel(t('Parent type'))->setDescription(t('The entity parent type to which this entity is referenced.')); return $fields; }