You are here

public function MoveRevisionMetadataFieldsUpdateTest::testSystemUpdate8400 in Drupal 8

Tests that the revision metadata fields are moved correctly.

@expectedDeprecation The revision_user revision metadata key is not set for entity type: entity_test_mul_revlog See: https://www.drupal.org/node/2831499 @expectedDeprecation The revision_created revision metadata key is not set for entity type: entity_test_mul_revlog See: https://www.drupal.org/node/2831499 @expectedDeprecation The revision_log_message revision metadata key is not set for entity type: entity_test_mul_revlog See: https://www.drupal.org/node/2831499 @expectedDeprecation Support for pre-8.3.0 revision table names in imported views is deprecated in drupal:8.3.0 and is removed from drupal:9.0.0. Imported views must reference the correct tables. See https://www.drupal.org/node/2831499

File

core/modules/system/tests/src/Functional/Entity/Update/MoveRevisionMetadataFieldsUpdateTest.php, line 39

Class

MoveRevisionMetadataFieldsUpdateTest
Tests the upgrade path for moving the revision metadata fields.

Namespace

Drupal\Tests\system\Functional\Entity\Update

Code

public function testSystemUpdate8400() {
  $this
    ->runUpdates();
  foreach ([
    'entity_test_revlog',
    'entity_test_mul_revlog',
  ] as $entity_type_id) {

    /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
    $storage = \Drupal::entityTypeManager()
      ->getStorage($entity_type_id);

    /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */
    $entity_type = $storage
      ->getEntityType();
    $revision_metadata_field_names = $entity_type
      ->getRevisionMetadataKeys();
    $database_schema = \Drupal::database()
      ->schema();

    // Test that the revision metadata fields are present only in the
    // revision table.
    foreach ($revision_metadata_field_names as $revision_metadata_field_name) {
      if ($entity_type
        ->isTranslatable()) {
        $this
          ->assertFalse($database_schema
          ->fieldExists($entity_type
          ->getDataTable(), $revision_metadata_field_name));
        $this
          ->assertFalse($database_schema
          ->fieldExists($entity_type
          ->getRevisionDataTable(), $revision_metadata_field_name));
      }
      else {
        $this
          ->assertFalse($database_schema
          ->fieldExists($entity_type
          ->getBaseTable(), $revision_metadata_field_name));
      }
      $this
        ->assertTrue($database_schema
        ->fieldExists($entity_type
        ->getRevisionTable(), $revision_metadata_field_name));
    }

    // Test that the revision metadata values have been transferred correctly
    // and that the moved fields are accessible.

    /** @var \Drupal\Core\Entity\RevisionLogInterface $entity_rev_first */
    $entity_rev_first = $storage
      ->loadRevision(1);
    $this
      ->assertEqual($entity_rev_first
      ->getRevisionUserId(), '1');
    $this
      ->assertEqual($entity_rev_first
      ->getRevisionLogMessage(), 'first revision');
    $this
      ->assertEqual($entity_rev_first
      ->getRevisionCreationTime(), '1476268517');

    /** @var \Drupal\Core\Entity\RevisionLogInterface $entity_rev_second */
    $entity_rev_second = $storage
      ->loadRevision(2);
    $this
      ->assertEqual($entity_rev_second
      ->getRevisionUserId(), '1');
    $this
      ->assertEqual($entity_rev_second
      ->getRevisionLogMessage(), 'second revision');
    $this
      ->assertEqual($entity_rev_second
      ->getRevisionCreationTime(), '1476268518');

    // Test that the views using revision metadata fields are updated
    // properly.
    $view = View::load($entity_type_id . '_for_2248983');
    $displays = $view
      ->get('display');
    foreach ($displays as $display => $display_data) {
      foreach ($display_data['display_options']['fields'] as $property_data) {
        if (in_array($property_data['field'], $revision_metadata_field_names)) {
          $this
            ->assertEqual($property_data['table'], $entity_type
            ->getRevisionTable());
        }
      }
    }
  }
}