function SqlContentEntityStorageTest::testGetTableMappingRevisionableTranslatable

Same name in other branches
  1. 8.9.x core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php \Drupal\Tests\Core\Entity\Sql\SqlContentEntityStorageTest::testGetTableMappingRevisionableTranslatable()
  2. 10 core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php \Drupal\Tests\Core\Entity\Sql\SqlContentEntityStorageTest::testGetTableMappingRevisionableTranslatable()
  3. 11.x core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php \Drupal\Tests\Core\Entity\Sql\SqlContentEntityStorageTest::testGetTableMappingRevisionableTranslatable()

Tests getTableMapping() with a revisionable, translatable entity type.

@covers ::__construct @covers ::getTableMapping

@dataProvider providerTestGetTableMappingSimple()

Parameters

string[] $entity_keys: A map of entity keys to use for the mocked entity type.

File

core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php, line 829

Class

SqlContentEntityStorageTest
@coversDefaultClass \Drupal\Core\Entity\Sql\SqlContentEntityStorage @group Entity

Namespace

Drupal\Tests\Core\Entity\Sql

Code

public function testGetTableMappingRevisionableTranslatable(array $entity_keys) {
    // This allows to re-use the data provider.
    $entity_keys = [
        'id' => $entity_keys['id'],
        'revision' => 'test_revision',
        'bundle' => $entity_keys['bundle'],
        'uuid' => $entity_keys['uuid'],
        'langcode' => 'langcode',
    ];
    $revision_metadata_keys = [
        'revision_created' => 'revision_timestamp',
        'revision_user' => 'revision_uid',
        'revision_log_message' => 'revision_log',
    ];
    $this->entityType
        ->expects($this->atLeastOnce())
        ->method('isRevisionable')
        ->willReturn(TRUE);
    $this->entityType
        ->expects($this->atLeastOnce())
        ->method('isTranslatable')
        ->willReturn(TRUE);
    $this->entityType
        ->expects($this->atLeastOnce())
        ->method('getDataTable')
        ->willReturn('entity_test_field_data');
    $this->entityType
        ->expects($this->any())
        ->method('getKey')
        ->willReturnMap([
        [
            'id',
            $entity_keys['id'],
        ],
        [
            'uuid',
            $entity_keys['uuid'],
        ],
        [
            'bundle',
            $entity_keys['bundle'],
        ],
        [
            'revision',
            $entity_keys['revision'],
        ],
        [
            'langcode',
            $entity_keys['langcode'],
        ],
    ]);
    $this->entityType
        ->expects($this->any())
        ->method('getRevisionMetadataKeys')
        ->willReturn($revision_metadata_keys);
    $this->fieldDefinitions = $this->mockFieldDefinitions(array_values($revision_metadata_keys), [
        'isRevisionable' => TRUE,
    ]);
    $this->setUpEntityStorage();
    $mapping = $this->entityStorage
        ->getTableMapping();
    $expected = [
        'entity_test',
        'entity_test_field_data',
        'entity_test_revision',
        'entity_test_field_revision',
    ];
    $this->assertEquals($expected, $mapping->getTableNames());
    // The default language code is stored on the base table.
    $expected = array_values(array_filter([
        $entity_keys['id'],
        $entity_keys['revision'],
        $entity_keys['bundle'],
        $entity_keys['uuid'],
        $entity_keys['langcode'],
    ]));
    $actual = $mapping->getFieldNames('entity_test');
    $this->assertEquals($expected, $actual);
    // The revision table on the other hand does not store the bundle and the
    // UUID.
    $expected = array_values(array_filter([
        $entity_keys['id'],
        $entity_keys['revision'],
        $entity_keys['langcode'],
    ]));
    $expected = array_merge($expected, array_values($revision_metadata_keys));
    $actual = $mapping->getFieldNames('entity_test_revision');
    $this->assertEquals($expected, $actual);
    // The UUID is not stored on the data table.
    $expected = array_values(array_filter([
        $entity_keys['id'],
        $entity_keys['revision'],
        $entity_keys['bundle'],
        $entity_keys['langcode'],
    ]));
    $actual = $mapping->getFieldNames('entity_test_field_data');
    $this->assertEquals($expected, $actual);
    // The data revision also does not store the bundle.
    $expected = array_values(array_filter([
        $entity_keys['id'],
        $entity_keys['revision'],
        $entity_keys['langcode'],
    ]));
    $actual = $mapping->getFieldNames('entity_test_field_revision');
    $this->assertEquals($expected, $actual);
    $expected = [];
    $actual = $mapping->getExtraColumns('entity_test');
    $this->assertEquals($expected, $actual);
    $actual = $mapping->getExtraColumns('entity_test_revision');
    $this->assertEquals($expected, $actual);
    $actual = $mapping->getExtraColumns('entity_test_field_data');
    $this->assertEquals($expected, $actual);
    $actual = $mapping->getExtraColumns('entity_test_field_revision');
    $this->assertEquals($expected, $actual);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.