function EntityUpdateToPublishableTest::testConvertToPublishable

Tests the conversion of an entity type to be publishable.

See also

entity_test_update_update_8400()

File

core/modules/system/tests/src/Functional/Update/EntityUpdateToPublishableTest.php, line 87

Class

EntityUpdateToPublishableTest
Tests the upgrade path for making an entity publishable.

Namespace

Drupal\Tests\system\Functional\Update

Code

public function testConvertToPublishable() {
  // Check that entity type is not publishable prior to running the update
  // process.
  $entity_test_update = $this->lastInstalledSchemaRepository
    ->getLastInstalledDefinition('entity_test_update');
  $this->assertFalse($entity_test_update->getKey('published'));
  // Make the entity type translatable and publishable.
  $this->updateEntityTypeDefinition();
  $this->enableUpdates('entity_test_update', 'entity_rev_pub_updates', 8400);
  $this->runUpdates();
  /** @var \Drupal\Core\Entity\EntityTypeInterface $entity_test_update */
  $entity_test_update = $this->lastInstalledSchemaRepository
    ->getLastInstalledDefinition('entity_test_update');
  $this->assertEquals('status', $entity_test_update->getKey('published'));
  /** @var \Drupal\Core\Entity\Sql\SqlEntityStorageInterface $storage */
  $storage = \Drupal::entityTypeManager()->getStorage('entity_test_update');
  $this->assertCount(102, $storage->loadMultiple(), 'All test entities were found.');
  // The test entity with ID 50 was created before Content Translation was
  // enabled, which means it didn't have a 'content_translation_status' field.
  // content_translation_update_8400() added values for that field which
  // should now be reflected in the entity's 'status' field.
  /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
  $entity = $storage->load(50);
  $this->assertEquals(1, $entity->status->value);
  $translation = $entity->getTranslation('ro');
  $this->assertEquals(1, $translation->status->value);
  // The test entity with ID 100 was created with Content Translation enabled
  // and it should have the same values as entity 50.
  $entity = $storage->load(100);
  $this->assertEquals(1, $entity->status->value);
  $translation = $entity->getTranslation('ro');
  $this->assertEquals(1, $translation->status->value);
  // The test entity 101 had 'content_translation_status' set to 0 for the
  // English (source) language.
  $entity = $storage->load(101);
  $this->assertEquals(0, $entity->status->value);
  $translation = $entity->getTranslation('ro');
  $this->assertEquals(1, $translation->status->value);
  // The test entity 102 had 'content_translation_status' set to 0 for the
  // Romanian language.
  $entity = $storage->load(102);
  $this->assertEquals(1, $entity->status->value);
  $translation = $entity->getTranslation('ro');
  $this->assertEquals(0, $translation->status->value);
}

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