EntityUpdateToPublishableTest.php in Drupal 8
File
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;
class EntityUpdateToPublishableTest extends UpdatePathTestBase {
use EntityDefinitionTestTrait;
use DbUpdatesTrait;
protected $defaultTheme = 'stark';
protected $entityTypeManager;
protected $entityDefinitionUpdateManager;
protected $lastInstalledSchemaRepository;
protected $installedStorageSchema;
protected $state;
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();
}
protected function setDatabaseDumpFiles() {
$this->databaseDumpFiles = [
__DIR__ . '/../../../fixtures/update/drupal-8.0.0-rc1-filled.standard.entity_test_update_mul.php.gz',
];
}
public function testConvertToPublishable() {
$entity_test_update = $this->lastInstalledSchemaRepository
->getLastInstalledDefinition('entity_test_update');
$this
->assertFalse($entity_test_update
->getKey('published'));
$this
->updateEntityTypeDefinition();
$this
->enableUpdates('entity_test_update', 'entity_rev_pub_updates', 8400);
$this
->runUpdates();
$entity_test_update = $this->lastInstalledSchemaRepository
->getLastInstalledDefinition('entity_test_update');
$this
->assertEquals('status', $entity_test_update
->getKey('published'));
$storage = \Drupal::entityTypeManager()
->getStorage('entity_test_update');
$this
->assertCount(102, $storage
->loadMultiple(), 'All test entities were found.');
$entity = $storage
->load(50);
$this
->assertEquals(1, $entity->status->value);
$translation = $entity
->getTranslation('ro');
$this
->assertEquals(1, $translation->status->value);
$entity = $storage
->load(100);
$this
->assertEquals(1, $entity->status->value);
$translation = $entity
->getTranslation('ro');
$this
->assertEquals(1, $translation->status->value);
$entity = $storage
->load(101);
$this
->assertEquals(0, $entity->status->value);
$translation = $entity
->getTranslation('ro');
$this
->assertEquals(1, $translation->status->value);
$entity = $storage
->load(102);
$this
->assertEquals(1, $entity->status->value);
$translation = $entity
->getTranslation('ro');
$this
->assertEquals(0, $translation->status->value);
}
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);
$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();
}
}