dynamic_entity_reference-8.x-1.x-dev/tests/src/Functional/Update/DerUpdateTest.php

tests/src/Functional/Update/DerUpdateTest.php
<?php

namespace Drupal\Tests\dynamic_entity_reference\Functional\Update;

use Drupal\entity_test\Entity\EntityTest;
use Drupal\entity_test\Entity\EntityTestMul;
use Drupal\entity_test\Entity\EntityTestStringId;
use Drupal\FunctionalTests\Update\UpdatePathTestBase;

/**
 * Tests DER update path.
 *
 * @group dynamic_entity_reference
 * @group legacy
 */
class DerUpdateTest extends UpdatePathTestBase {

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

  /**
   * {@inheritdoc}
   */
  protected $installProfile = 'testing';

  /**
   * {@inheritdoc}
   */
  protected function setDatabaseDumpFiles() {
    // This dump is created using 8.x-1.x branch of dynamic_entity_reference
    // after installing testing profile and running update_test_8201.php script.
    $this->databaseDumpFiles = [
      __DIR__ . '/../../../fixtures/update/der_dump.php.gz',
    ];
  }

  /**
   * Test that target_id is converted to string and target_id_int is created.
   *
   * @see dynamic_entity_reference_update_8201()
   */
  public function testUpdate8201() {
    if (version_compare(\Drupal::VERSION, '10.2-dev', '>=')) {
      $update_manager = \Drupal::entityDefinitionUpdateManager();
      $entity_type = \Drupal::entityTypeManager()->getDefinition('entity_test_unique_constraint');
      $update_manager->installEntityType($entity_type);
    }
    $connection = \Drupal::database();
    if ($connection->driver() == 'mysql') {
      // This might force an 1071 Specified key was too long; max key length
      // is 767 bytes error if innodb_large_prefix is ON so test it.
      $connection->query('ALTER TABLE {entity_test__field_test} ROW_FORMAT=compact');
    }
    // Enable the DB driver specific module.
    $driver = $connection->driver();
    if (!\Drupal::moduleHandler()->moduleExists($driver)) {
      \Drupal::service('module_installer')->install([$driver]);
    }
    $this->runUpdates();
    // The db dump contain two entity_test entities referencing one entity_test
    // entity and one entity_test_mul entity.
    // Check the basefields value on entity table columns.
    $this->assertEquals([
      NULL,
      1,
      1,
    ], $connection->query('SELECT dynamic_references__target_id FROM {entity_test} ORDER BY id')->fetchCol());
    $this->assertEquals([
      NULL,
      1,
      1,
    ], $connection->query('SELECT dynamic_references__target_id_int FROM {entity_test} ORDER BY id')->fetchCol());
    // Check the both columns of configurable fields values.
    $this->assertEquals([
      1,
      1,
      1,
      1,
    ], $connection->query('SELECT field_test_target_id FROM {entity_test__field_test} ORDER BY entity_id, delta')->fetchCol());
    $this->assertEquals([
      1,
      1,
      1,
      1,
    ], $connection->query('SELECT field_test_target_id_int FROM {entity_test__field_test} ORDER BY entity_id, delta')->fetchCol());
    // The db dump contain two entity_test entities referencing one entity_test
    // entity and one entity_test_mul entity.
    // Check the basefields values on entity data table columns.
    $this->assertEquals([NULL,
      1,
      1,
    ], $connection->query('SELECT dynamic_references__target_id FROM {entity_test_mul_property_data} ORDER BY id')->fetchCol());
    $this->assertEquals([
      NULL,
      1,
      1,
    ], $connection->query('SELECT dynamic_references__target_id_int FROM {entity_test_mul_property_data} ORDER BY id')->fetchCol());
    // Check the both columns of configurable fields values.
    $this->assertEquals([
      1,
      1,
      1,
      1,
    ], $connection->query('SELECT field_test_mul_target_id FROM {entity_test_mul__field_test_mul} ORDER BY entity_id, delta')->fetchCol());
    $this->assertEquals([
      1,
      1,
      1,
      1,
    ], $connection->query('SELECT field_test_mul_target_id_int FROM {entity_test_mul__field_test_mul} ORDER BY entity_id, delta')->fetchCol());

    // String id entity can be referenced now.
    $referenced_entity = EntityTestStringId::create([
      'id' => 'test',
    ]);
    $referenced_entity->save();
    $entity = EntityTest::load(3);
    $entity->field_test[] = $referenced_entity;
    $entity->save();
    // Check the values in both columns.
    $this->assertEquals([
      1,
      1,
      1,
      1,
      0,
    ], $connection->query('SELECT field_test_target_id_int FROM {entity_test__field_test} ORDER BY entity_id, delta')->fetchCol());
    $this->assertEquals([
      1,
      1,
      1,
      1,
      'test',
    ], $connection->query('SELECT field_test_target_id FROM {entity_test__field_test} ORDER BY entity_id, delta')->fetchCol());
    $entity = EntityTestMul::load(3);
    $entity->field_test_mul[] = $referenced_entity;
    $entity->save();
    // Check the values in both columns.
    $this->assertEquals([
      1,
      1,
      1,
      1,
      0,
    ], $connection->query('SELECT field_test_mul_target_id_int FROM {entity_test_mul__field_test_mul} ORDER BY entity_id, delta')->fetchCol());
    $this->assertEquals([
      1,
      1,
      1,
      1,
      'test',
    ], $connection->query('SELECT field_test_mul_target_id FROM {entity_test_mul__field_test_mul} ORDER BY entity_id, delta')->fetchCol());

    // Create some test entities which link each other.
    $referenced_entity = EntityTest::load(1);
    $referenced_entity_mul = EntityTestMul::load(1);
    // Create test entity without any reference.
    $entity = EntityTest::create();
    $entity->save();
    // Create test data table entity without any reference.
    $entity = EntityTestMul::create();
    $entity->save();
    // Create test entity with all kind of references.
    $entity = EntityTest::create();
    $entity->field_test[] = $referenced_entity;
    $entity->field_test[] = $referenced_entity_mul;
    $entity->dynamic_references[] = $referenced_entity_mul;
    $entity->save();
    // Create test data table entity with all kind of references.
    $entity = EntityTestMul::create();
    $entity->field_test_mul[] = $referenced_entity;
    $entity->field_test_mul[] = $referenced_entity_mul;
    $entity->dynamic_references[] = $referenced_entity;
    $entity->save();
    // Check the basefields value on entity table columns.
    $this->assertEquals([
      NULL,
      1,
      1,
      NULL,
      1,
    ], $connection->query('SELECT dynamic_references__target_id FROM {entity_test} ORDER BY id')->fetchCol());
    $this->assertEquals([
      NULL,
      1,
      1,
      NULL,
      1,
    ], $connection->query('SELECT dynamic_references__target_id_int FROM {entity_test} ORDER BY id')->fetchCol());
    // Check the both columns of configurable fields values.
    $this->assertEquals([1,
      1,
      1,
      1,
      0,
      1,
      1,
    ], $connection->query('SELECT field_test_target_id_int FROM {entity_test__field_test} ORDER BY entity_id, delta')->fetchCol());
    $this->assertEquals([
      1,
      1,
      1,
      1,
      'test',
      1,
      1,
    ], $connection->query('SELECT field_test_target_id FROM {entity_test__field_test} ORDER BY entity_id, delta')->fetchCol());
    // Check the basefields values on entity data table columns.
    $this->assertEquals([
      NULL,
      1,
      1,
      NULL,
      1,
    ], $connection->query('SELECT dynamic_references__target_id FROM {entity_test_mul_property_data} ORDER BY id')->fetchCol());
    $this->assertEquals([
      NULL,
      1,
      1,
      NULL,
      1,
    ], $connection->query('SELECT dynamic_references__target_id_int FROM {entity_test_mul_property_data} ORDER BY id')->fetchCol());
    // Check the both columns of configurable fields values.
    $this->assertEquals([
      1,
      1,
      1,
      1,
      0,
      1,
      1,
    ], $connection->query('SELECT field_test_mul_target_id_int FROM {entity_test_mul__field_test_mul} ORDER BY entity_id, delta')->fetchCol());
    $this->assertEquals([
      1,
      1,
      1,
      1,
      'test',
      1,
      1,
    ], $connection->query('SELECT field_test_mul_target_id FROM {entity_test_mul__field_test_mul} ORDER BY entity_id, delta')->fetchCol());

    // Even though this was fixed after this update hook, since this one adds
    // the _int column, the index is created at that time.
    // @see \Drupal\Tests\dynamic_entity_reference\Functional\Update\DerUpdate8202
    $this->assertTrue(\Drupal::database()->schema()->indexExists('entity_test', 'dynamic_references__target_id_int'));
    $this->assertTrue(\Drupal::database()->schema()->indexExists('entity_test__field_test', 'field_test_target_id_int'));
    $this->assertTrue(\Drupal::database()->schema()->indexExists('entity_test_mul__field_test_mul', 'field_test_mul_target_id_int'));
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc