You are here

public function SqlContentEntityStorageTest::testGetTableMappingRevisionableTranslatable in Drupal 9

Same name and namespace in other branches
  1. 8 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 830
Contains \Drupal\Tests\Core\Entity\Sql\SqlContentEntityStorageTest.

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')
    ->will($this
    ->returnValue(TRUE));
  $this->entityType
    ->expects($this
    ->atLeastOnce())
    ->method('isTranslatable')
    ->will($this
    ->returnValue(TRUE));
  $this->entityType
    ->expects($this
    ->atLeastOnce())
    ->method('getDataTable')
    ->will($this
    ->returnValue('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')
    ->will($this
    ->returnValue($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);
}