Chris@0: entityStorage = $this->getMockBuilder('Drupal\Core\Entity\Sql\SqlContentEntityStorage') Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $this->entityManager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface'); Chris@0: Chris@0: $typed_data_manager = $this->getMock(TypedDataManagerInterface::class); Chris@0: $typed_data_manager->expects($this->any()) Chris@0: ->method('createDataDefinition') Chris@0: ->willReturn($this->getMock('Drupal\Core\TypedData\DataDefinitionInterface')); Chris@0: Chris@0: $typed_data_manager->expects($this->any()) Chris@0: ->method('getDefinition') Chris@14: ->will($this->returnValueMap([ Chris@14: 'entity:user' => ['class' => '\Drupal\Core\TypedData\DataDefinitionInterface'], Chris@14: 'field_item:string_long' => ['class' => '\Drupal\Core\Field\Plugin\Field\FieldType\StringLongItem'], Chris@14: ])); Chris@0: Chris@0: $this->baseEntityType = new TestEntityType([ Chris@0: 'base_table' => 'entity_test', Chris@0: 'id' => 'entity_test', Chris@0: 'label' => 'Entity test', Chris@0: 'entity_keys' => [ Chris@0: 'uuid' => 'uuid', Chris@0: 'id' => 'id', Chris@0: 'langcode' => 'langcode', Chris@0: 'bundle' => 'type', Chris@0: 'revision' => 'revision_id', Chris@0: ], Chris@0: 'provider' => 'entity_test', Chris@0: 'list_cache_contexts' => ['entity_test_list_cache_context'], Chris@0: ]); Chris@0: Chris@0: $this->translationManager = $this->getStringTranslationStub(); Chris@14: $this->baseEntityType->setStringTranslation($this->translationManager); Chris@0: $this->moduleHandler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface'); Chris@0: Chris@0: $this->viewsData = new TestEntityViewsData($this->baseEntityType, $this->entityStorage, $this->entityManager, $this->moduleHandler, $this->translationManager); Chris@0: Chris@0: $field_type_manager = $this->getMockBuilder('Drupal\Core\Field\FieldTypePluginManager') Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $field_type_manager->expects($this->any()) Chris@0: ->method('getDefaultStorageSettings') Chris@0: ->willReturn([]); Chris@0: $field_type_manager->expects($this->any()) Chris@0: ->method('getDefaultFieldSettings') Chris@0: ->willReturn([]); Chris@0: Chris@14: $state = $this->prophesize(StateInterface::class); Chris@14: $state->get(Argument::any(), [])->willReturn([]); Chris@14: Chris@0: $container = new ContainerBuilder(); Chris@0: $container->set('plugin.manager.field.field_type', $field_type_manager); Chris@0: $container->set('entity.manager', $this->entityManager); Chris@0: $container->set('typed_data_manager', $typed_data_manager); Chris@14: $container->set('state', $state->reveal()); Chris@0: \Drupal::setContainer($container); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Helper method to setup base fields. Chris@0: * Chris@0: * @param \Drupal\Core\Field\BaseFieldDefinition[] $base_fields Chris@0: * The base fields which are adapted. Chris@0: * Chris@0: * @return \Drupal\Core\Field\BaseFieldDefinition[] Chris@0: * The setup base fields. Chris@0: */ Chris@0: protected function setupBaseFields(array $base_fields) { Chris@0: // Add a description field to the fields supplied by the EntityTest Chris@0: // classes. This example comes from the taxonomy Term entity. Chris@0: $base_fields['description'] = BaseFieldDefinition::create('text_long') Chris@0: ->setLabel('Description') Chris@0: ->setDescription('A description of the term.') Chris@0: ->setTranslatable(TRUE) Chris@0: ->setDisplayOptions('view', [ Chris@0: 'label' => 'hidden', Chris@0: 'type' => 'text_default', Chris@0: 'weight' => 0, Chris@0: ]) Chris@0: ->setDisplayConfigurable('view', TRUE) Chris@0: ->setDisplayOptions('form', [ Chris@0: 'type' => 'text_textfield', Chris@0: 'weight' => 0, Chris@0: ]) Chris@0: ->setDisplayConfigurable('form', TRUE); Chris@0: Chris@0: // Add a URL field; this example is from the Comment entity. Chris@0: $base_fields['homepage'] = BaseFieldDefinition::create('uri') Chris@0: ->setLabel('Homepage') Chris@0: ->setDescription("The comment author's home page address.") Chris@0: ->setTranslatable(TRUE) Chris@0: ->setSetting('max_length', 255); Chris@0: Chris@0: // A base field with cardinality > 1 Chris@17: $base_fields['string'] = BaseFieldDefinition::create('string') Chris@0: ->setLabel('Strong') Chris@0: ->setTranslatable(TRUE) Chris@0: ->setCardinality(2); Chris@0: Chris@0: foreach ($base_fields as $name => $base_field) { Chris@0: $base_field->setName($name); Chris@0: } Chris@0: return $base_fields; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests base tables. Chris@0: */ Chris@0: public function testBaseTables() { Chris@0: $data = $this->viewsData->getViewsData(); Chris@0: Chris@0: $this->assertEquals('entity_test', $data['entity_test']['table']['entity type']); Chris@0: $this->assertEquals(FALSE, $data['entity_test']['table']['entity revision']); Chris@0: $this->assertEquals('Entity test', $data['entity_test']['table']['group']); Chris@0: $this->assertEquals('entity_test', $data['entity_test']['table']['provider']); Chris@0: Chris@0: $this->assertEquals('id', $data['entity_test']['table']['base']['field']); Chris@0: $this->assertEquals(['entity_test_list_cache_context'], $data['entity_test']['table']['base']['cache_contexts']); Chris@0: $this->assertEquals('Entity test', $data['entity_test']['table']['base']['title']); Chris@0: Chris@0: $this->assertFalse(isset($data['entity_test']['table']['defaults'])); Chris@0: Chris@0: $this->assertFalse(isset($data['entity_test_mul_property_data'])); Chris@0: $this->assertFalse(isset($data['revision_table'])); Chris@0: $this->assertFalse(isset($data['revision_data_table'])); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests data_table support. Chris@0: */ Chris@0: public function testDataTable() { Chris@0: $entity_type = $this->baseEntityType Chris@0: ->set('data_table', 'entity_test_mul_property_data') Chris@0: ->set('id', 'entity_test_mul') Chris@0: ->set('translatable', TRUE) Chris@0: ->setKey('label', 'label'); Chris@0: Chris@0: $this->viewsData->setEntityType($entity_type); Chris@0: Chris@0: // Tests the join definition between the base and the data table. Chris@0: $data = $this->viewsData->getViewsData(); Chris@0: $base_views_data = $data['entity_test']; Chris@0: Chris@0: // Ensure that the base table is set to the data table. Chris@0: $this->assertEquals('id', $data['entity_test_mul_property_data']['table']['base']['field']); Chris@0: $this->assertEquals('Entity test', $data['entity_test_mul_property_data']['table']['base']['title']); Chris@0: $this->assertFalse(isset($data['entity_test']['table']['base'])); Chris@0: Chris@0: $this->assertEquals('entity_test_mul', $data['entity_test_mul_property_data']['table']['entity type']); Chris@0: $this->assertEquals(FALSE, $data['entity_test_mul_property_data']['table']['entity revision']); Chris@0: $this->assertEquals('Entity test', $data['entity_test_mul_property_data']['table']['group']); Chris@0: $this->assertEquals('entity_test', $data['entity_test']['table']['provider']); Chris@0: $this->assertEquals(['field' => 'label', 'table' => 'entity_test_mul_property_data'], $data['entity_test_mul_property_data']['table']['base']['defaults']); Chris@0: Chris@0: // Ensure the join information is set up properly. Chris@0: $this->assertCount(1, $base_views_data['table']['join']); Chris@0: $this->assertEquals(['entity_test_mul_property_data' => ['left_field' => 'id', 'field' => 'id', 'type' => 'INNER']], $base_views_data['table']['join']); Chris@0: $this->assertFalse(isset($data['revision_table'])); Chris@0: $this->assertFalse(isset($data['revision_data_table'])); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests revision table without data table support. Chris@0: */ Chris@0: public function testRevisionTableWithoutDataTable() { Chris@0: $entity_type = $this->baseEntityType Chris@0: ->set('revision_table', 'entity_test_mulrev_revision') Chris@0: ->set('revision_data_table', NULL) Chris@0: ->set('id', 'entity_test_mulrev') Chris@0: ->setKey('revision', 'revision_id'); Chris@0: $this->viewsData->setEntityType($entity_type); Chris@0: Chris@0: $data = $this->viewsData->getViewsData(); Chris@0: Chris@0: $this->assertEquals('Entity test revisions', $data['entity_test_mulrev_revision']['table']['base']['title']); Chris@0: $this->assertEquals('revision_id', $data['entity_test_mulrev_revision']['table']['base']['field']); Chris@0: Chris@0: $this->assertEquals(FALSE, $data['entity_test']['table']['entity revision']); Chris@0: $this->assertEquals('entity_test_mulrev', $data['entity_test_mulrev_revision']['table']['entity type']); Chris@0: $this->assertEquals(TRUE, $data['entity_test_mulrev_revision']['table']['entity revision']); Chris@0: $this->assertEquals('entity_test_mulrev', $data['entity_test_mulrev_revision']['table']['entity type']); Chris@0: $this->assertEquals(TRUE, $data['entity_test_mulrev_revision']['table']['entity revision']); Chris@0: Chris@0: $this->assertEquals('Entity test revision', $data['entity_test_mulrev_revision']['table']['group']); Chris@0: $this->assertEquals('entity_test', $data['entity_test']['table']['provider']); Chris@0: Chris@0: // Ensure the join information is set up properly. Chris@0: // Tests the join definition between the base and the revision table. Chris@0: $revision_data = $data['entity_test_mulrev_revision']; Chris@0: $this->assertCount(1, $revision_data['table']['join']); Chris@0: $this->assertEquals(['entity_test' => ['left_field' => 'revision_id', 'field' => 'revision_id', 'type' => 'INNER']], $revision_data['table']['join']); Chris@0: $this->assertFalse(isset($data['data_table'])); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests revision table with data table support. Chris@0: */ Chris@0: public function testRevisionTableWithRevisionDataTableAndDataTable() { Chris@0: $entity_type = $this->baseEntityType Chris@0: ->set('data_table', 'entity_test_mul_property_data') Chris@0: ->set('revision_table', 'entity_test_mulrev_revision') Chris@0: ->set('revision_data_table', 'entity_test_mulrev_property_revision') Chris@0: ->set('id', 'entity_test_mulrev') Chris@0: ->set('translatable', TRUE) Chris@0: ->setKey('revision', 'revision_id'); Chris@0: $this->viewsData->setEntityType($entity_type); Chris@0: Chris@0: $data = $this->viewsData->getViewsData(); Chris@0: Chris@0: $this->assertEquals('Entity test revisions', $data['entity_test_mulrev_property_revision']['table']['base']['title']); Chris@0: $this->assertEquals('revision_id', $data['entity_test_mulrev_property_revision']['table']['base']['field']); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev_revision']['table']['base'])); Chris@0: Chris@0: $this->assertEquals('entity_test_mulrev', $data['entity_test_mulrev_property_revision']['table']['entity type']); Chris@0: $this->assertEquals('Entity test revision', $data['entity_test_mulrev_revision']['table']['group']); Chris@0: $this->assertEquals('entity_test', $data['entity_test']['table']['provider']); Chris@0: Chris@0: // Ensure the join information is set up properly. Chris@0: // Tests the join definition between the base and the revision table. Chris@0: $revision_field_data = $data['entity_test_mulrev_property_revision']; Chris@0: $this->assertCount(1, $revision_field_data['table']['join']); Chris@0: $this->assertEquals([ Chris@0: 'entity_test_mul_property_data' => [ Chris@0: 'left_field' => 'revision_id', Chris@0: 'field' => 'revision_id', Chris@0: 'type' => 'INNER', Chris@0: ], Chris@0: ], $revision_field_data['table']['join']); Chris@0: Chris@0: $revision_base_data = $data['entity_test_mulrev_revision']; Chris@0: $this->assertCount(1, $revision_base_data['table']['join']); Chris@0: $this->assertEquals([ Chris@0: 'entity_test_mulrev_property_revision' => [ Chris@0: 'left_field' => 'revision_id', Chris@0: 'field' => 'revision_id', Chris@0: 'type' => 'INNER', Chris@0: ], Chris@0: ], $revision_base_data['table']['join']); Chris@0: Chris@0: $this->assertFalse(isset($data['data_table'])); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests revision table with data table support. Chris@0: */ Chris@0: public function testRevisionTableWithRevisionDataTable() { Chris@0: $entity_type = $this->baseEntityType Chris@0: ->set('revision_table', 'entity_test_mulrev_revision') Chris@0: ->set('revision_data_table', 'entity_test_mulrev_property_revision') Chris@0: ->set('id', 'entity_test_mulrev') Chris@0: ->set('translatable', TRUE) Chris@0: ->setKey('revision', 'revision_id'); Chris@0: $this->viewsData->setEntityType($entity_type); Chris@0: Chris@0: $data = $this->viewsData->getViewsData(); Chris@0: Chris@0: $this->assertEquals('Entity test revisions', $data['entity_test_mulrev_property_revision']['table']['base']['title']); Chris@0: $this->assertEquals('revision_id', $data['entity_test_mulrev_property_revision']['table']['base']['field']); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev_revision']['table']['base'])); Chris@0: Chris@0: $this->assertEquals('entity_test_mulrev', $data['entity_test_mulrev_property_revision']['table']['entity type']); Chris@0: $this->assertEquals('Entity test revision', $data['entity_test_mulrev_revision']['table']['group']); Chris@0: $this->assertEquals('entity_test', $data['entity_test']['table']['provider']); Chris@0: Chris@0: // Ensure the join information is set up properly. Chris@0: // Tests the join definition between the base and the revision table. Chris@0: $revision_field_data = $data['entity_test_mulrev_property_revision']; Chris@0: $this->assertCount(1, $revision_field_data['table']['join']); Chris@0: $this->assertEquals([ Chris@0: 'entity_test_mulrev_field_data' => [ Chris@0: 'left_field' => 'revision_id', Chris@0: 'field' => 'revision_id', Chris@0: 'type' => 'INNER', Chris@0: ], Chris@0: ], $revision_field_data['table']['join']); Chris@0: Chris@0: $revision_base_data = $data['entity_test_mulrev_revision']; Chris@0: $this->assertCount(1, $revision_base_data['table']['join']); Chris@0: $this->assertEquals([ Chris@0: 'entity_test_mulrev_property_revision' => [ Chris@0: 'left_field' => 'revision_id', Chris@0: 'field' => 'revision_id', Chris@0: 'type' => 'INNER', Chris@0: ], Chris@0: ], $revision_base_data['table']['join']); Chris@0: $this->assertFalse(isset($data['data_table'])); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Helper method to mock all store definitions. Chris@0: */ Chris@0: protected function setupFieldStorageDefinition() { Chris@0: $id_field_storage_definition = $this->getMock('Drupal\Core\Field\FieldStorageDefinitionInterface'); Chris@0: $id_field_storage_definition->expects($this->any()) Chris@0: ->method('getSchema') Chris@0: ->willReturn(IntegerItem::schema($id_field_storage_definition)); Chris@0: $uuid_field_storage_definition = $this->getMock('Drupal\Core\Field\FieldStorageDefinitionInterface'); Chris@0: $uuid_field_storage_definition->expects($this->any()) Chris@0: ->method('getSchema') Chris@0: ->willReturn(UuidItem::schema($uuid_field_storage_definition)); Chris@0: $type_field_storage_definition = $this->getMock('Drupal\Core\Field\FieldStorageDefinitionInterface'); Chris@0: $type_field_storage_definition->expects($this->any()) Chris@0: ->method('getSchema') Chris@0: ->willReturn(StringItem::schema($type_field_storage_definition)); Chris@0: $langcode_field_storage_definition = $this->getMock('Drupal\Core\Field\FieldStorageDefinitionInterface'); Chris@0: $langcode_field_storage_definition->expects($this->any()) Chris@0: ->method('getSchema') Chris@0: ->willReturn(LanguageItem::schema($langcode_field_storage_definition)); Chris@0: $name_field_storage_definition = $this->getMock('Drupal\Core\Field\FieldStorageDefinitionInterface'); Chris@0: $name_field_storage_definition->expects($this->any()) Chris@0: ->method('getSchema') Chris@0: ->willReturn(StringItem::schema($name_field_storage_definition)); Chris@0: $description_field_storage_definition = $this->getMock('Drupal\Core\Field\FieldStorageDefinitionInterface'); Chris@0: $description_field_storage_definition->expects($this->any()) Chris@0: ->method('getSchema') Chris@0: ->willReturn(TextLongItem::schema($description_field_storage_definition)); Chris@0: $homepage_field_storage_definition = $this->getMock('Drupal\Core\Field\FieldStorageDefinitionInterface'); Chris@0: $homepage_field_storage_definition->expects($this->any()) Chris@0: ->method('getSchema') Chris@0: ->willReturn(UriItem::schema($homepage_field_storage_definition)); Chris@0: $string_field_storage_definition = $this->getMock('Drupal\Core\Field\FieldStorageDefinitionInterface'); Chris@0: $string_field_storage_definition->expects($this->any()) Chris@0: ->method('getSchema') Chris@0: ->willReturn(StringItem::schema($string_field_storage_definition)); Chris@0: Chris@0: // Setup the user_id entity reference field. Chris@0: $this->entityManager->expects($this->any()) Chris@0: ->method('getDefinition') Chris@0: ->willReturnMap([ Chris@0: ['user', TRUE, static::userEntityInfo()], Chris@0: ] Chris@0: ); Chris@0: $user_id_field_storage_definition = $this->getMock('Drupal\Core\Field\FieldStorageDefinitionInterface'); Chris@0: $user_id_field_storage_definition->expects($this->any()) Chris@0: ->method('getSetting') Chris@0: ->with('target_type') Chris@0: ->willReturn('user'); Chris@0: $user_id_field_storage_definition->expects($this->any()) Chris@0: ->method('getSettings') Chris@0: ->willReturn(['target_type' => 'user']); Chris@0: $user_id_field_storage_definition->expects($this->any()) Chris@0: ->method('getSchema') Chris@0: ->willReturn(EntityReferenceItem::schema($user_id_field_storage_definition)); Chris@0: Chris@0: $revision_id_field_storage_definition = $this->getMock('Drupal\Core\Field\FieldStorageDefinitionInterface'); Chris@0: $revision_id_field_storage_definition->expects($this->any()) Chris@0: ->method('getSchema') Chris@0: ->willReturn(IntegerItem::schema($revision_id_field_storage_definition)); Chris@0: Chris@0: $this->entityManager->expects($this->any()) Chris@0: ->method('getFieldStorageDefinitions') Chris@0: ->willReturn([ Chris@0: 'id' => $id_field_storage_definition, Chris@0: 'uuid' => $uuid_field_storage_definition, Chris@0: 'type' => $type_field_storage_definition, Chris@0: 'langcode' => $langcode_field_storage_definition, Chris@0: 'name' => $name_field_storage_definition, Chris@0: 'description' => $description_field_storage_definition, Chris@0: 'homepage' => $homepage_field_storage_definition, Chris@0: 'string' => $string_field_storage_definition, Chris@0: 'user_id' => $user_id_field_storage_definition, Chris@0: 'revision_id' => $revision_id_field_storage_definition, Chris@0: ]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests fields on the base table. Chris@0: */ Chris@0: public function testBaseTableFields() { Chris@0: $base_field_definitions = $this->setupBaseFields(EntityTest::baseFieldDefinitions($this->baseEntityType)); Chris@0: $user_base_field_definitions = [ Chris@0: 'uid' => BaseFieldDefinition::create('integer') Chris@0: ->setLabel('ID') Chris@0: ->setDescription('The ID of the user entity.') Chris@0: ->setReadOnly(TRUE) Chris@17: ->setSetting('unsigned', TRUE), Chris@0: ]; Chris@0: $this->entityManager->expects($this->any()) Chris@0: ->method('getBaseFieldDefinitions') Chris@0: ->will($this->returnValueMap([ Chris@0: ['user', $user_base_field_definitions], Chris@0: ['entity_test', $base_field_definitions], Chris@0: ])); Chris@0: // Setup the table mapping. Chris@0: $table_mapping = $this->getMockBuilder(DefaultTableMapping::class) Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getTableNames') Chris@0: ->willReturn(['entity_test', 'entity_test__string']); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getColumnNames') Chris@0: ->willReturnMap([ Chris@0: ['id', ['value' => 'id']], Chris@0: ['uuid', ['value' => 'uuid']], Chris@0: ['type', ['value' => 'type']], Chris@0: ['langcode', ['value' => 'langcode']], Chris@0: ['name', ['value' => 'name']], Chris@0: ['description', ['value' => 'description__value', 'format' => 'description__format']], Chris@0: ['homepage', ['value' => 'homepage']], Chris@0: ['user_id', ['target_id' => 'user_id']], Chris@14: ['string', ['value' => 'string_value']], Chris@0: ]); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getFieldNames') Chris@0: ->willReturnMap([ Chris@0: ['entity_test', ['id', 'uuid', 'type', 'langcode', 'name', 'description', 'homepage', 'user_id']], Chris@0: ['entity_test__string', ['string']], Chris@0: ]); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('requiresDedicatedTableStorage') Chris@0: ->willReturnCallback(function (BaseFieldDefinition $base_field) { Chris@0: return $base_field->getName() === 'string'; Chris@0: }); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getDedicatedDataTableName') Chris@0: ->willReturnCallback(function (BaseFieldDefinition $base_field) { Chris@0: if ($base_field->getName() === 'string') { Chris@0: return 'entity_test__string'; Chris@0: } Chris@0: }); Chris@0: Chris@0: $this->entityStorage->expects($this->once()) Chris@0: ->method('getTableMapping') Chris@0: ->willReturn($table_mapping); Chris@0: Chris@0: $this->setupFieldStorageDefinition(); Chris@0: Chris@0: $data = $this->viewsData->getViewsData(); Chris@0: Chris@0: $this->assertNumericField($data['entity_test']['id']); Chris@0: $this->assertField($data['entity_test']['id'], 'id'); Chris@0: $this->assertUuidField($data['entity_test']['uuid']); Chris@0: $this->assertField($data['entity_test']['uuid'], 'uuid'); Chris@0: $this->assertStringField($data['entity_test']['type']); Chris@0: $this->assertEquals('type', $data['entity_test']['type']['entity field']); Chris@0: Chris@0: $this->assertLanguageField($data['entity_test']['langcode']); Chris@0: $this->assertField($data['entity_test']['langcode'], 'langcode'); Chris@0: $this->assertEquals('Original language', $data['entity_test']['langcode']['title']); Chris@0: Chris@0: $this->assertStringField($data['entity_test']['name']); Chris@0: $this->assertField($data['entity_test']['name'], 'name'); Chris@0: Chris@0: $this->assertLongTextField($data['entity_test'], 'description'); Chris@0: $this->assertField($data['entity_test']['description__value'], 'description'); Chris@0: $this->assertField($data['entity_test']['description__format'], 'description'); Chris@0: Chris@0: $this->assertUriField($data['entity_test']['homepage']); Chris@0: $this->assertField($data['entity_test']['homepage'], 'homepage'); Chris@0: Chris@0: $this->assertEntityReferenceField($data['entity_test']['user_id']); Chris@0: $this->assertField($data['entity_test']['user_id'], 'user_id'); Chris@0: Chris@0: $relationship = $data['entity_test']['user_id']['relationship']; Chris@0: $this->assertEquals('users_field_data', $relationship['base']); Chris@0: $this->assertEquals('uid', $relationship['base field']); Chris@0: Chris@14: // The string field name should be used as the 'entity field' but the actual Chris@14: // field should reflect what the column mapping is using for multi-value Chris@14: // base fields NOT just the field name. The actual column name returned from Chris@14: // mappings in the test mocks is 'value'. Chris@14: $this->assertStringField($data['entity_test__string']['string_value']); Chris@14: $this->assertField($data['entity_test__string']['string_value'], 'string'); Chris@0: $this->assertEquals([ Chris@0: 'left_field' => 'id', Chris@0: 'field' => 'entity_id', Chris@0: 'extra' => [[ Chris@0: 'field' => 'deleted', Chris@0: 'value' => 0, Chris@0: 'numeric' => TRUE, Chris@0: ], Chris@0: ], Chris@0: ], $data['entity_test__string']['table']['join']['entity_test']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests fields on the data table. Chris@0: */ Chris@0: public function testDataTableFields() { Chris@0: $entity_type = $this->baseEntityType Chris@0: ->set('data_table', 'entity_test_mul_property_data') Chris@0: ->set('base_table', 'entity_test_mul') Chris@0: ->set('id', 'entity_test_mul') Chris@0: ->setKey('bundle', 'type'); Chris@0: $base_field_definitions = $this->setupBaseFields(EntityTestMul::baseFieldDefinitions($this->baseEntityType)); Chris@0: $base_field_definitions['type'] = BaseFieldDefinition::create('entity_reference') Chris@0: ->setLabel('entity test type') Chris@0: ->setSetting('target_type', 'entity_test_bundle') Chris@0: ->setTranslatable(TRUE); Chris@0: $base_field_definitions = $this->setupBaseFields($base_field_definitions); Chris@0: $user_base_field_definitions = [ Chris@0: 'uid' => BaseFieldDefinition::create('integer') Chris@0: ->setLabel('ID') Chris@0: ->setDescription('The ID of the user entity.') Chris@0: ->setReadOnly(TRUE) Chris@17: ->setSetting('unsigned', TRUE), Chris@0: ]; Chris@0: $entity_test_type = new ConfigEntityType(['id' => 'entity_test_bundle']); Chris@0: Chris@0: $this->entityManager->expects($this->any()) Chris@0: ->method('getBaseFieldDefinitions') Chris@0: ->will($this->returnValueMap([ Chris@0: ['user', $user_base_field_definitions], Chris@0: ['entity_test_mul', $base_field_definitions], Chris@0: ])); Chris@0: Chris@0: $this->viewsData->setEntityType($entity_type); Chris@0: Chris@0: // Setup the table mapping. Chris@0: $table_mapping = $this->getMockBuilder(DefaultTableMapping::class) Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getTableNames') Chris@0: ->willReturn(['entity_test_mul', 'entity_test_mul_property_data', 'entity_test_mul__string']); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getColumnNames') Chris@0: ->willReturnMap([ Chris@0: ['id', ['value' => 'id']], Chris@0: ['uuid', ['value' => 'uuid']], Chris@0: ['type', ['value' => 'type']], Chris@0: ['langcode', ['value' => 'langcode']], Chris@0: ['name', ['value' => 'name']], Chris@0: ['description', ['value' => 'description__value', 'format' => 'description__format']], Chris@0: ['homepage', ['value' => 'homepage']], Chris@0: ['user_id', ['target_id' => 'user_id']], Chris@14: ['string', ['value' => 'string_value']], Chris@0: ]); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getFieldNames') Chris@0: ->willReturnMap([ Chris@0: ['entity_test_mul', ['uuid']], Chris@0: ['entity_test_mul_property_data', ['id', 'type', 'langcode', 'name', 'description', 'homepage', 'user_id']], Chris@0: ['entity_test_mul__string', ['string']], Chris@0: ]); Chris@0: Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getFieldTableName') Chris@0: ->willReturnCallback(function ($field) { Chris@0: if ($field == 'uuid') { Chris@0: return 'entity_test_mul'; Chris@0: } Chris@0: return 'entity_test_mul_property_data'; Chris@0: }); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('requiresDedicatedTableStorage') Chris@0: ->willReturnCallback(function (BaseFieldDefinition $base_field) { Chris@0: return $base_field->getName() === 'string'; Chris@0: }); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getDedicatedDataTableName') Chris@0: ->willReturnCallback(function (BaseFieldDefinition $base_field) { Chris@0: if ($base_field->getName() === 'string') { Chris@0: return 'entity_test_mul__string'; Chris@0: } Chris@0: }); Chris@0: Chris@0: $this->entityStorage->expects($this->once()) Chris@0: ->method('getTableMapping') Chris@0: ->willReturn($table_mapping); Chris@0: Chris@0: $this->setupFieldStorageDefinition(); Chris@0: Chris@0: $user_entity_type = static::userEntityInfo(); Chris@0: $this->entityManager->expects($this->any()) Chris@0: ->method('getDefinition') Chris@0: ->will($this->returnValueMap([ Chris@0: ['user', TRUE, $user_entity_type], Chris@0: ['entity_test_bundle', TRUE, $entity_test_type], Chris@0: ])); Chris@0: Chris@0: $data = $this->viewsData->getViewsData(); Chris@0: Chris@0: // Check the base fields. Chris@0: $this->assertFalse(isset($data['entity_test_mul']['id'])); Chris@0: $this->assertFalse(isset($data['entity_test_mul']['type'])); Chris@0: $this->assertUuidField($data['entity_test_mul']['uuid']); Chris@0: $this->assertField($data['entity_test_mul']['uuid'], 'uuid'); Chris@0: Chris@0: $this->assertFalse(isset($data['entity_test_mul']['type']['relationship'])); Chris@0: Chris@0: // Also ensure that field_data only fields don't appear on the base table. Chris@0: $this->assertFalse(isset($data['entity_test_mul']['name'])); Chris@0: $this->assertFalse(isset($data['entity_test_mul']['description'])); Chris@0: $this->assertFalse(isset($data['entity_test_mul']['description__value'])); Chris@0: $this->assertFalse(isset($data['entity_test_mul']['description__format'])); Chris@0: $this->assertFalse(isset($data['entity_test_mul']['user_id'])); Chris@0: $this->assertFalse(isset($data['entity_test_mul']['homepage'])); Chris@0: Chris@0: // Check the data fields. Chris@0: $this->assertNumericField($data['entity_test_mul_property_data']['id']); Chris@0: $this->assertField($data['entity_test_mul_property_data']['id'], 'id'); Chris@0: Chris@0: $this->assertBundleField($data['entity_test_mul_property_data']['type']); Chris@0: $this->assertField($data['entity_test_mul_property_data']['type'], 'type'); Chris@0: Chris@0: $this->assertLanguageField($data['entity_test_mul_property_data']['langcode']); Chris@0: $this->assertField($data['entity_test_mul_property_data']['langcode'], 'langcode'); Chris@0: $this->assertEquals('Translation language', $data['entity_test_mul_property_data']['langcode']['title']); Chris@0: Chris@0: $this->assertStringField($data['entity_test_mul_property_data']['name']); Chris@0: $this->assertField($data['entity_test_mul_property_data']['name'], 'name'); Chris@0: Chris@0: $this->assertLongTextField($data['entity_test_mul_property_data'], 'description'); Chris@0: $this->assertField($data['entity_test_mul_property_data']['description__value'], 'description'); Chris@0: $this->assertField($data['entity_test_mul_property_data']['description__format'], 'description'); Chris@0: Chris@0: $this->assertUriField($data['entity_test_mul_property_data']['homepage']); Chris@0: $this->assertField($data['entity_test_mul_property_data']['homepage'], 'homepage'); Chris@0: Chris@0: $this->assertEntityReferenceField($data['entity_test_mul_property_data']['user_id']); Chris@0: $this->assertField($data['entity_test_mul_property_data']['user_id'], 'user_id'); Chris@0: $relationship = $data['entity_test_mul_property_data']['user_id']['relationship']; Chris@0: $this->assertEquals('users_field_data', $relationship['base']); Chris@0: $this->assertEquals('uid', $relationship['base field']); Chris@0: Chris@14: $this->assertStringField($data['entity_test_mul__string']['string_value']); Chris@14: $this->assertField($data['entity_test_mul__string']['string_value'], 'string'); Chris@0: $this->assertEquals([ Chris@0: 'left_field' => 'id', Chris@0: 'field' => 'entity_id', Chris@0: 'extra' => [[ Chris@0: 'field' => 'deleted', Chris@0: 'value' => 0, Chris@0: 'numeric' => TRUE, Chris@0: ], Chris@0: ], Chris@0: ], $data['entity_test_mul__string']['table']['join']['entity_test_mul']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests fields on the revision table. Chris@0: */ Chris@0: public function testRevisionTableFields() { Chris@0: $entity_type = $this->baseEntityType Chris@0: ->set('base_table', 'entity_test_mulrev') Chris@0: ->set('revision_table', 'entity_test_mulrev_revision') Chris@0: ->set('data_table', 'entity_test_mulrev_property_data') Chris@0: ->set('revision_data_table', 'entity_test_mulrev_property_revision') Chris@0: ->set('id', 'entity_test_mulrev') Chris@0: ->set('translatable', TRUE); Chris@0: $base_field_definitions = $this->setupBaseFields(EntityTestMulRev::baseFieldDefinitions($this->baseEntityType)); Chris@0: $user_base_field_definitions = [ Chris@0: 'uid' => BaseFieldDefinition::create('integer') Chris@0: ->setLabel('ID') Chris@0: ->setDescription('The ID of the user entity.') Chris@0: ->setReadOnly(TRUE) Chris@17: ->setSetting('unsigned', TRUE), Chris@0: ]; Chris@0: $this->entityManager->expects($this->any()) Chris@0: ->method('getBaseFieldDefinitions') Chris@0: ->will($this->returnValueMap([ Chris@0: ['user', $user_base_field_definitions], Chris@0: ['entity_test_mulrev', $base_field_definitions], Chris@0: ])); Chris@0: Chris@0: $this->viewsData->setEntityType($entity_type); Chris@0: Chris@0: // Setup the table mapping. Chris@0: $table_mapping = $this->getMockBuilder(DefaultTableMapping::class) Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getTableNames') Chris@0: ->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']); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getColumnNames') Chris@0: ->willReturnMap([ Chris@0: ['id', ['value' => 'id']], Chris@0: ['uuid', ['value' => 'uuid']], Chris@0: ['type', ['value' => 'type']], Chris@0: ['langcode', ['value' => 'langcode']], Chris@0: ['name', ['value' => 'name']], Chris@0: ['description', ['value' => 'description__value', 'format' => 'description__format']], Chris@0: ['homepage', ['value' => 'homepage']], Chris@0: ['user_id', ['target_id' => 'user_id']], Chris@14: ['revision_id', ['value' => 'revision_id']], Chris@14: ['string', ['value' => 'string_value']], Chris@0: ]); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getFieldNames') Chris@0: ->willReturnMap([ Chris@0: ['entity_test_mulrev', ['id', 'revision_id', 'uuid', 'type']], Chris@0: ['entity_test_mulrev_revision', ['id', 'revision_id', 'langcode']], Chris@0: ['entity_test_mulrev_property_data', ['id', 'revision_id', 'langcode', 'name', 'description', 'homepage', 'user_id']], Chris@0: ['entity_test_mulrev_property_revision', ['id', 'revision_id', 'langcode', 'name', 'description', 'homepage', 'user_id']], Chris@0: ['entity_test_mulrev__string', ['string']], Chris@0: ['entity_test_mulrev_revision__string', ['string']], Chris@0: ]); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('requiresDedicatedTableStorage') Chris@0: ->willReturnCallback(function (BaseFieldDefinition $base_field) { Chris@0: return $base_field->getName() === 'string'; Chris@0: }); Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getDedicatedDataTableName') Chris@0: ->willReturnCallback(function (BaseFieldDefinition $base_field) { Chris@0: if ($base_field->getName() === 'string') { Chris@0: return 'entity_test_mulrev__string'; Chris@0: } Chris@0: }); Chris@0: Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getDedicatedRevisionTableName') Chris@0: ->willReturnCallback(function (BaseFieldDefinition $base_field) { Chris@0: if ($base_field->getName() === 'string') { Chris@0: return 'entity_test_mulrev_revision__string'; Chris@0: } Chris@0: }); Chris@0: Chris@0: $table_mapping->expects($this->any()) Chris@0: ->method('getFieldTableName') Chris@0: ->willReturnCallback(function ($field) { Chris@0: if ($field == 'uuid') { Chris@0: return 'entity_test_mulrev'; Chris@0: } Chris@0: return 'entity_test_mulrev_property_data'; Chris@0: }); Chris@0: Chris@0: $this->entityStorage->expects($this->once()) Chris@0: ->method('getTableMapping') Chris@0: ->willReturn($table_mapping); Chris@0: Chris@0: $this->setupFieldStorageDefinition(); Chris@0: Chris@0: $data = $this->viewsData->getViewsData(); Chris@0: Chris@0: // Check the base fields. Chris@0: $this->assertFalse(isset($data['entity_test_mulrev']['id'])); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev']['type'])); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev']['revision_id'])); Chris@0: $this->assertUuidField($data['entity_test_mulrev']['uuid']); Chris@0: $this->assertField($data['entity_test_mulrev']['uuid'], 'uuid'); Chris@0: Chris@0: // Also ensure that field_data only fields don't appear on the base table. Chris@0: $this->assertFalse(isset($data['entity_test_mulrev']['name'])); Chris@0: $this->assertFalse(isset($data['entity_test_mul']['description'])); Chris@0: $this->assertFalse(isset($data['entity_test_mul']['description__value'])); Chris@0: $this->assertFalse(isset($data['entity_test_mul']['description__format'])); Chris@0: $this->assertFalse(isset($data['entity_test_mul']['homepage'])); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev']['langcode'])); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev']['user_id'])); Chris@0: Chris@0: // Check the revision fields. The revision ID should only appear in the data Chris@0: // table. Chris@0: $this->assertFalse(isset($data['entity_test_mulrev_revision']['revision_id'])); Chris@0: Chris@0: // Also ensure that field_data only fields don't appear on the revision table. Chris@0: $this->assertFalse(isset($data['entity_test_mulrev_revision']['id'])); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev_revision']['name'])); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev_revision']['description'])); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev_revision']['description__value'])); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev_revision']['description__format'])); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev_revision']['homepage'])); Chris@0: $this->assertFalse(isset($data['entity_test_mulrev_revision']['user_id'])); Chris@0: Chris@0: // Check the data fields. Chris@0: $this->assertNumericField($data['entity_test_mulrev_property_data']['id']); Chris@0: $this->assertField($data['entity_test_mulrev_property_data']['id'], 'id'); Chris@0: $this->assertNumericField($data['entity_test_mulrev_property_data']['revision_id']); Chris@0: $this->assertField($data['entity_test_mulrev_property_data']['revision_id'], 'revision_id'); Chris@0: $this->assertLanguageField($data['entity_test_mulrev_property_data']['langcode']); Chris@0: $this->assertField($data['entity_test_mulrev_property_data']['langcode'], 'langcode'); Chris@0: $this->assertStringField($data['entity_test_mulrev_property_data']['name']); Chris@0: $this->assertField($data['entity_test_mulrev_property_data']['name'], 'name'); Chris@0: Chris@0: $this->assertLongTextField($data['entity_test_mulrev_property_data'], 'description'); Chris@0: $this->assertField($data['entity_test_mulrev_property_data']['description__value'], 'description'); Chris@0: $this->assertField($data['entity_test_mulrev_property_data']['description__format'], 'description'); Chris@0: $this->assertUriField($data['entity_test_mulrev_property_data']['homepage']); Chris@0: $this->assertField($data['entity_test_mulrev_property_data']['homepage'], 'homepage'); Chris@0: Chris@0: $this->assertEntityReferenceField($data['entity_test_mulrev_property_data']['user_id']); Chris@0: $this->assertField($data['entity_test_mulrev_property_data']['user_id'], 'user_id'); Chris@0: $relationship = $data['entity_test_mulrev_property_data']['user_id']['relationship']; Chris@0: $this->assertEquals('users_field_data', $relationship['base']); Chris@0: $this->assertEquals('uid', $relationship['base field']); Chris@0: Chris@0: // Check the property data fields. Chris@0: $this->assertNumericField($data['entity_test_mulrev_property_revision']['id']); Chris@0: $this->assertField($data['entity_test_mulrev_property_revision']['id'], 'id'); Chris@0: Chris@0: $this->assertLanguageField($data['entity_test_mulrev_property_revision']['langcode']); Chris@0: $this->assertField($data['entity_test_mulrev_property_revision']['langcode'], 'langcode'); Chris@0: $this->assertEquals('Translation language', $data['entity_test_mulrev_property_revision']['langcode']['title']); Chris@0: Chris@0: $this->assertStringField($data['entity_test_mulrev_property_revision']['name']); Chris@0: $this->assertField($data['entity_test_mulrev_property_revision']['name'], 'name'); Chris@0: Chris@0: $this->assertLongTextField($data['entity_test_mulrev_property_revision'], 'description'); Chris@0: $this->assertField($data['entity_test_mulrev_property_revision']['description__value'], 'description'); Chris@0: $this->assertField($data['entity_test_mulrev_property_revision']['description__format'], 'description'); Chris@0: Chris@0: $this->assertUriField($data['entity_test_mulrev_property_revision']['homepage']); Chris@0: $this->assertField($data['entity_test_mulrev_property_revision']['homepage'], 'homepage'); Chris@0: Chris@0: $this->assertEntityReferenceField($data['entity_test_mulrev_property_revision']['user_id']); Chris@0: $this->assertField($data['entity_test_mulrev_property_revision']['user_id'], 'user_id'); Chris@0: $relationship = $data['entity_test_mulrev_property_revision']['user_id']['relationship']; Chris@0: $this->assertEquals('users_field_data', $relationship['base']); Chris@0: $this->assertEquals('uid', $relationship['base field']); Chris@0: Chris@14: $this->assertStringField($data['entity_test_mulrev__string']['string_value']); Chris@14: $this->assertField($data['entity_test_mulrev__string']['string_value'], 'string'); Chris@0: $this->assertEquals([ Chris@0: 'left_field' => 'id', Chris@0: 'field' => 'entity_id', Chris@0: 'extra' => [[ Chris@0: 'field' => 'deleted', Chris@0: 'value' => 0, Chris@0: 'numeric' => TRUE, Chris@0: ], Chris@0: ], Chris@0: ], $data['entity_test_mulrev__string']['table']['join']['entity_test_mulrev_property_data']); Chris@0: Chris@14: $this->assertStringField($data['entity_test_mulrev_revision__string']['string_value']); Chris@14: $this->assertField($data['entity_test_mulrev_revision__string']['string_value'], 'string'); Chris@0: $this->assertEquals([ Chris@0: 'left_field' => 'revision_id', Chris@0: 'field' => 'entity_id', Chris@0: 'extra' => [[ Chris@0: 'field' => 'deleted', Chris@0: 'value' => 0, Chris@0: 'numeric' => TRUE, Chris@0: ], Chris@0: ], Chris@0: ], $data['entity_test_mulrev_revision__string']['table']['join']['entity_test_mulrev_property_revision']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests generic stuff per field. Chris@0: * Chris@0: * @param array $data Chris@0: * The views data to check. Chris@0: * @param string $field_name Chris@0: * The entity field name. Chris@0: */ Chris@0: protected function assertField($data, $field_name) { Chris@0: $this->assertEquals($field_name, $data['entity field']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests add link types. Chris@0: */ Chris@0: public function testEntityLinks() { Chris@0: $this->baseEntityType->setLinkTemplate('canonical', '/entity_test/{entity_test}'); Chris@0: $this->baseEntityType->setLinkTemplate('edit-form', '/entity_test/{entity_test}/edit'); Chris@0: $this->baseEntityType->setLinkTemplate('delete-form', '/entity_test/{entity_test}/delete'); Chris@0: Chris@0: $data = $this->viewsData->getViewsData(); Chris@16: foreach (['entity_test', 'entity_test_revision'] as $table_name) { Chris@16: $this->assertEquals('entity_link', $data[$table_name]['view_entity_test']['field']['id']); Chris@16: $this->assertEquals('entity_link_edit', $data[$table_name]['edit_entity_test']['field']['id']); Chris@16: $this->assertEquals('entity_link_delete', $data[$table_name]['delete_entity_test']['field']['id']); Chris@16: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests additional edit links. Chris@0: */ Chris@0: public function testEntityLinksJustEditForm() { Chris@0: $this->baseEntityType->setLinkTemplate('edit-form', '/entity_test/{entity_test}/edit'); Chris@0: Chris@0: $data = $this->viewsData->getViewsData(); Chris@0: Chris@16: foreach (['entity_test', 'entity_test_revision'] as $table_name) { Chris@16: $this->assertFalse(isset($data[$table_name]['view_entity_test'])); Chris@16: $this->assertFalse(isset($data[$table_name]['delete_entity_test'])); Chris@16: Chris@16: $this->assertEquals('entity_link_edit', $data[$table_name]['edit_entity_test']['field']['id']); Chris@16: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * @covers ::getViewsData Chris@0: */ Chris@0: public function testGetViewsDataWithoutEntityOperations() { Chris@0: // Make sure there is no list builder. The API does not document is Chris@0: // supports resetting entity handlers, so this might break in the future. Chris@0: $this->baseEntityType->setListBuilderClass(NULL); Chris@0: $data = $this->viewsData->getViewsData(); Chris@0: $this->assertArrayNotHasKey('operations', $data[$this->baseEntityType->getBaseTable()]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @covers ::getViewsData Chris@0: */ Chris@0: public function testGetViewsDataWithEntityOperations() { Chris@0: $this->baseEntityType->setListBuilderClass('\Drupal\Core\Entity\EntityListBuilder'); Chris@0: $data = $this->viewsData->getViewsData(); Chris@0: $this->assertSame('entity_operations', $data[$this->baseEntityType->getBaseTable()]['operations']['field']['id']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests views data for a string field. Chris@0: * Chris@0: * @param $data Chris@0: * The views data to check. Chris@0: */ Chris@0: protected function assertStringField($data) { Chris@0: $this->assertEquals('field', $data['field']['id']); Chris@0: $this->assertEquals('string', $data['filter']['id']); Chris@0: $this->assertEquals('string', $data['argument']['id']); Chris@0: $this->assertEquals('standard', $data['sort']['id']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests views data for a URI field. Chris@0: * Chris@0: * @param $data Chris@0: * The views data to check. Chris@0: */ Chris@0: protected function assertUriField($data) { Chris@0: $this->assertEquals('field', $data['field']['id']); Chris@0: $this->assertEquals('string', $data['field']['default_formatter']); Chris@0: $this->assertEquals('string', $data['filter']['id']); Chris@0: $this->assertEquals('string', $data['argument']['id']); Chris@0: $this->assertEquals('standard', $data['sort']['id']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests views data for a long text field. Chris@0: * Chris@0: * @param $data Chris@0: * The views data for the table this field is in. Chris@0: * @param $field_name Chris@0: * The name of the field being checked. Chris@0: */ Chris@0: protected function assertLongTextField($data, $field_name) { Chris@0: $value_field = $data[$field_name . '__value']; Chris@0: $this->assertEquals('field', $value_field['field']['id']); Chris@0: $this->assertEquals($field_name . '__format', $value_field['field']['format']); Chris@0: $this->assertEquals('string', $value_field['filter']['id']); Chris@0: $this->assertEquals('string', $value_field['argument']['id']); Chris@0: $this->assertEquals('standard', $value_field['sort']['id']); Chris@0: Chris@0: $this->assertStringField($data[$field_name . '__format']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests views data for a UUID field. Chris@0: * Chris@0: * @param array $data Chris@0: * The views data to check. Chris@0: */ Chris@0: protected function assertUuidField($data) { Chris@0: // @todo Can we provide additional support for UUIDs in views? Chris@0: $this->assertEquals('field', $data['field']['id']); Chris@0: $this->assertFalse($data['field']['click sortable']); Chris@0: $this->assertEquals('string', $data['filter']['id']); Chris@0: $this->assertEquals('string', $data['argument']['id']); Chris@0: $this->assertEquals('standard', $data['sort']['id']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests views data for a numeric field. Chris@0: * Chris@0: * @param array $data Chris@0: * The views data to check. Chris@0: */ Chris@0: protected function assertNumericField($data) { Chris@0: $this->assertEquals('field', $data['field']['id']); Chris@0: $this->assertEquals('numeric', $data['filter']['id']); Chris@0: $this->assertEquals('numeric', $data['argument']['id']); Chris@0: $this->assertEquals('standard', $data['sort']['id']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests views data for a language field. Chris@0: * Chris@0: * @param array $data Chris@0: * The views data to check. Chris@0: */ Chris@0: protected function assertLanguageField($data) { Chris@0: $this->assertEquals('field', $data['field']['id']); Chris@0: $this->assertEquals('language', $data['filter']['id']); Chris@0: $this->assertEquals('language', $data['argument']['id']); Chris@0: $this->assertEquals('standard', $data['sort']['id']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests views data for a entity reference field. Chris@0: */ Chris@0: protected function assertEntityReferenceField($data) { Chris@0: $this->assertEquals('field', $data['field']['id']); Chris@0: $this->assertEquals('numeric', $data['filter']['id']); Chris@0: $this->assertEquals('numeric', $data['argument']['id']); Chris@0: $this->assertEquals('standard', $data['sort']['id']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests views data for a bundle field. Chris@0: */ Chris@0: protected function assertBundleField($data) { Chris@0: $this->assertEquals('field', $data['field']['id']); Chris@0: $this->assertEquals('bundle', $data['filter']['id']); Chris@0: $this->assertEquals('string', $data['argument']['id']); Chris@0: $this->assertEquals('standard', $data['sort']['id']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns entity info for the user entity. Chris@0: * Chris@0: * @return array Chris@0: */ Chris@0: protected static function userEntityInfo() { Chris@0: return new ContentEntityType([ Chris@0: 'id' => 'user', Chris@0: 'class' => 'Drupal\user\Entity\User', Chris@0: 'label' => 'User', Chris@0: 'base_table' => 'users', Chris@0: 'data_table' => 'users_field_data', Chris@0: 'entity_keys' => [ Chris@0: 'id' => 'uid', Chris@0: 'uuid' => 'uuid', Chris@0: ], Chris@0: ]); Chris@0: } Chris@0: Chris@0: } Chris@0: Chris@0: class TestEntityViewsData extends EntityViewsData { Chris@0: Chris@0: public function setEntityType(EntityTypeInterface $entity_type) { Chris@0: $this->entityType = $entity_type; Chris@0: } Chris@0: Chris@0: } Chris@0: Chris@0: class TestEntityType extends ContentEntityType { Chris@0: Chris@0: /** Chris@0: * Sets a specific entity key. Chris@0: * Chris@0: * @param string $key Chris@0: * The name of the entity key. Chris@0: * @param string $value Chris@0: * The new value of the key. Chris@0: * Chris@0: * @return $this Chris@0: */ Chris@0: public function setKey($key, $value) { Chris@0: $this->entity_keys[$key] = $value; Chris@0: return $this; Chris@0: } Chris@0: Chris@0: } Chris@0: Chris@0: namespace Drupal\entity_test\Entity; Chris@0: Chris@0: if (!function_exists('t')) { Chris@17: Chris@0: function t($string, array $args = []) { Chris@0: return strtr($string, $args); Chris@0: } Chris@17: Chris@0: } Chris@0: Chris@0: Chris@0: namespace Drupal\Core\Entity; Chris@0: Chris@0: if (!function_exists('t')) { Chris@17: Chris@0: function t($string, array $args = []) { Chris@0: return strtr($string, $args); Chris@0: } Chris@17: Chris@0: }