function EntityViewsDataTest::testRevisionTableFields

Same name and namespace in other branches
  1. 9 core/modules/views/tests/src/Kernel/Entity/EntityViewsDataTest.php \Drupal\Tests\views\Kernel\Entity\EntityViewsDataTest::testRevisionTableFields()
  2. 10 core/modules/views/tests/src/Kernel/Entity/EntityViewsDataTest.php \Drupal\Tests\views\Kernel\Entity\EntityViewsDataTest::testRevisionTableFields()
  3. 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 <a href="/api/drupal/core%21modules%21views%21src%21EntityViewsData.php/class/EntityViewsData/8.9.x" title="Provides generic views integration for entities." class="local">\Drupal\views\EntityViewsData</a> @group Views

Namespace

Drupal\Tests\views\Unit

Code

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.