View source
<?php
namespace Drupal\Tests\system\Functional\Entity\Update;
use Drupal\FunctionalTests\Update\UpdatePathTestBase;
use Drupal\Tests\system\Functional\Entity\Traits\EntityDefinitionTestTrait;
use Drupal\Tests\Traits\ExpectDeprecationTrait;
abstract class SqlContentEntityStorageSchemaConverterTestBase extends UpdatePathTestBase {
use EntityDefinitionTestTrait;
use ExpectDeprecationTrait;
protected $entityDefinitionUpdateManager;
protected $lastInstalledSchemaRepository;
protected $installedStorageSchema;
protected $state;
protected function setUp() {
parent::setUp();
$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();
}
public function testMakeRevisionable() {
$original_entity_type_definition = $this->lastInstalledSchemaRepository
->getLastInstalledDefinition('entity_test_update');
$original_field_storage_definitions = $this->lastInstalledSchemaRepository
->getLastInstalledFieldStorageDefinitions('entity_test_update');
$this
->assertFalse($original_entity_type_definition
->isRevisionable());
$translatable = $original_entity_type_definition
->isTranslatable();
if ($translatable) {
$this
->updateEntityTypeToRevisionableAndTranslatable();
}
else {
$this
->updateEntityTypeToRevisionable();
}
$this
->addExpectedDeprecationMessage('\\Drupal\\Core\\Entity\\Sql\\SqlContentEntityStorageSchemaConverter is deprecated in Drupal 8.7.0, will be removed before Drupal 9.0.0. Use \\Drupal\\Core\\Entity\\EntityDefinitionUpdateManagerInterface::updateFieldableEntityType() instead. See https://www.drupal.org/node/3029997.');
$this
->runUpdates();
$entity_test_update = $this->lastInstalledSchemaRepository
->getLastInstalledDefinition('entity_test_update');
$field_storage_definitions = $this->lastInstalledSchemaRepository
->getLastInstalledFieldStorageDefinitions('entity_test_update');
$this
->assertTrue($entity_test_update
->isRevisionable());
$this
->assertEquals($translatable, isset($field_storage_definitions['revision_translation_affected']));
$storage = \Drupal::entityTypeManager()
->getStorage('entity_test_update');
$this
->assertCount(102, $storage
->loadMultiple(), 'All test entities were found.');
for ($i = 1; $i <= 102; $i++) {
$revision = $storage
->loadRevision($i);
$this
->assertEqual($i, $revision
->id());
$this
->assertEqual($i, $revision
->getRevisionId());
$this
->assertEqual($i . ' - test single property', $revision->test_single_property->value);
$this
->assertEqual($i . ' - test multiple properties - value1', $revision->test_multiple_properties->value1);
$this
->assertEqual($i . ' - test multiple properties - value2', $revision->test_multiple_properties->value2);
$this
->assertEqual($i . ' - test single property multiple values 0', $revision->test_single_property_multiple_values->value);
$this
->assertEqual($i . ' - test single property multiple values 1', $revision->test_single_property_multiple_values[1]->value);
$this
->assertEqual($i . ' - test multiple properties multiple values - value1 0', $revision->test_multiple_properties_multiple_values[0]->value1);
$this
->assertEqual($i . ' - test multiple properties multiple values - value2 0', $revision->test_multiple_properties_multiple_values[0]->value2);
$this
->assertEqual($i . ' - test multiple properties multiple values - value1 1', $revision->test_multiple_properties_multiple_values[1]->value1);
$this
->assertEqual($i . ' - test multiple properties multiple values - value2 1', $revision->test_multiple_properties_multiple_values[1]->value2);
$this
->assertEqual($i . ' - field test configurable field - value1 0', $revision->field_test_configurable_field[0]->value1);
$this
->assertEqual($i . ' - field test configurable field - value2 0', $revision->field_test_configurable_field[0]->value2);
$this
->assertEqual($i . ' - field test configurable field - value1 1', $revision->field_test_configurable_field[1]->value1);
$this
->assertEqual($i . ' - field test configurable field - value2 1', $revision->field_test_configurable_field[1]->value2);
$this
->assertEqual($i . ' - test entity base field info', $revision->test_entity_base_field_info->value);
if (!$translatable) {
continue;
}
$this
->assertTrue($revision->revision_translation_affected->value);
$translation = $revision
->getTranslation('ro');
$this
->assertEqual($i . ' - test single property - ro', $translation->test_single_property->value);
$this
->assertEqual($i . ' - test multiple properties - value1 - ro', $translation->test_multiple_properties->value1);
$this
->assertEqual($i . ' - test multiple properties - value2 - ro', $translation->test_multiple_properties->value2);
$this
->assertEqual($i . ' - test single property multiple values 0 - ro', $translation->test_single_property_multiple_values[0]->value);
$this
->assertEqual($i . ' - test single property multiple values 1 - ro', $translation->test_single_property_multiple_values[1]->value);
$this
->assertEqual($i . ' - test multiple properties multiple values - value1 0 - ro', $translation->test_multiple_properties_multiple_values[0]->value1);
$this
->assertEqual($i . ' - test multiple properties multiple values - value2 0 - ro', $translation->test_multiple_properties_multiple_values[0]->value2);
$this
->assertEqual($i . ' - test multiple properties multiple values - value1 1 - ro', $translation->test_multiple_properties_multiple_values[1]->value1);
$this
->assertEqual($i . ' - test multiple properties multiple values - value2 1 - ro', $translation->test_multiple_properties_multiple_values[1]->value2);
$this
->assertEqual($i . ' - field test configurable field - value1 0 - ro', $translation->field_test_configurable_field[0]->value1);
$this
->assertEqual($i . ' - field test configurable field - value2 0 - ro', $translation->field_test_configurable_field[0]->value2);
$this
->assertEqual($i . ' - field test configurable field - value1 1 - ro', $translation->field_test_configurable_field[1]->value1);
$this
->assertEqual($i . ' - field test configurable field - value2 1 - ro', $translation->field_test_configurable_field[1]->value2);
$this
->assertEqual($i . ' - test entity base field info - ro', $translation->test_entity_base_field_info->value);
}
$schema = \Drupal::database()
->schema();
$temporary_table_names = $storage
->getCustomTableMapping($entity_test_update, $field_storage_definitions, 'tmp_')
->getTableNames();
$current_table_names = $storage
->getCustomTableMapping($entity_test_update, $field_storage_definitions)
->getTableNames();
foreach (array_combine($temporary_table_names, $current_table_names) as $temp_table_name => $table_name) {
$this
->assertTrue($schema
->tableExists($table_name));
$this
->assertFalse($schema
->tableExists($temp_table_name));
}
$table_mapping = $storage
->getCustomTableMapping($original_entity_type_definition, $original_field_storage_definitions, 'old_');
foreach ($table_mapping
->getTableNames() as $table_name) {
$this
->assertFalse($schema
->tableExists($table_name));
}
}
}