EntityUpdateToPublishableTest.php
Namespace
Drupal\Tests\system\Functional\UpdateFile
-
core/
modules/ system/ tests/ src/ Functional/ Update/ EntityUpdateToPublishableTest.php
View source
<?php
namespace Drupal\Tests\system\Functional\Update;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\FunctionalTests\Update\UpdatePathTestBase;
use Drupal\Tests\system\Functional\Entity\Traits\EntityDefinitionTestTrait;
/**
* Tests the upgrade path for making an entity publishable.
*
* @group Update
* @group legacy
*/
class EntityUpdateToPublishableTest extends UpdatePathTestBase {
use EntityDefinitionTestTrait;
use DbUpdatesTrait;
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* The entity type manager service.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* The entity definition update manager.
*
* @var \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface
*/
protected $entityDefinitionUpdateManager;
/**
* The last installed schema repository service.
*
* @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface
*/
protected $lastInstalledSchemaRepository;
/**
* The key-value collection for tracking installed storage schema.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
*/
protected $installedStorageSchema;
/**
* The state service.
*
* @var \Drupal\Core\State\StateInterface
*/
protected $state;
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->entityTypeManager = \Drupal::entityTypeManager();
$this->entityDefinitionUpdateManager = \Drupal::entityDefinitionUpdateManager();
$this->lastInstalledSchemaRepository = \Drupal::service('entity.last_installed_schema.repository');
$this->installedStorageSchema = \Drupal::keyValue('entity.storage_schema.sql');
$this->state = \Drupal::state();
}
/**
* {@inheritdoc}
*/
protected function setDatabaseDumpFiles() {
$this->databaseDumpFiles = [
__DIR__ . '/../../../fixtures/update/drupal-8.0.0-rc1-filled.standard.entity_test_update_mul.php.gz',
];
}
/**
* Tests the conversion of an entity type to be publishable.
*
* @see entity_test_update_update_8400()
*/
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);
}
/**
* Updates the 'entity_test_update' entity type to translatable and
* publishable.
*/
protected function updateEntityTypeDefinition() {
$entity_type = clone $this->entityTypeManager
->getDefinition('entity_test_update');
$keys = $entity_type->getKeys();
$keys['published'] = 'status';
$entity_type->set('entity_keys', $keys);
$entity_type->set('translatable', TRUE);
$entity_type->set('data_table', 'entity_test_update_data');
$this->state
->set('entity_test_update.entity_type', $entity_type);
// Add the status field to the entity type.
$status = BaseFieldDefinition::create('boolean')->setLabel(t('Publishing status'))
->setDescription(t('A boolean indicating the published state.'))
->setRevisionable(TRUE)
->setTranslatable(TRUE)
->setRequired(TRUE)
->setDefaultValue(TRUE);
$this->state
->set('entity_test_update.additional_base_field_definitions', [
'status' => $status,
]);
$this->entityTypeManager
->clearCachedDefinitions();
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
EntityUpdateToPublishableTest | Tests the upgrade path for making an entity publishable. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.