function EntityQueryTest::setUp

Same name and namespace in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php \Drupal\KernelTests\Core\Entity\EntityQueryTest::setUp()
  2. 8.9.x core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php \Drupal\KernelTests\Core\Entity\EntityQueryTest::setUp()
  3. 11.x core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php \Drupal\KernelTests\Core\Entity\EntityQueryTest::setUp()

Overrides EntityKernelTestBase::setUp

File

core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php, line 73

Class

EntityQueryTest
Tests Entity Query functionality.

Namespace

Drupal\KernelTests\Core\Entity

Code

protected function setUp() : void {
  parent::setUp();
  $this->installEntitySchema('entity_test_mulrev');
  $this->installConfig([
    'language',
  ]);
  $figures = $this->randomMachineName();
  $greetings = $this->randomMachineName();
  foreach ([
    $figures => 'shape',
    $greetings => 'text',
  ] as $field_name => $field_type) {
    $field_storage = FieldStorageConfig::create([
      'field_name' => $field_name,
      'entity_type' => 'entity_test_mulrev',
      'type' => $field_type,
      'cardinality' => 2,
    ]);
    $field_storage->save();
    $field_storages[] = $field_storage;
  }
  $bundles = [];
  for ($i = 0; $i < 2; $i++) {
    // For the sake of tablesort, make sure the second bundle is higher than
    // the first one. Beware: MySQL is not case sensitive.
    do {
      $bundle = $this->randomMachineName();
    } while ($bundles && strtolower($bundles[0]) >= strtolower($bundle));
    entity_test_create_bundle($bundle, entity_type: $field_storage->getTargetEntityTypeId());
    foreach ($field_storages as $field_storage) {
      FieldConfig::create([
        'field_storage' => $field_storage,
        'bundle' => $bundle,
      ])->save();
    }
    $bundles[] = $bundle;
  }
  // Each unit is a list of field name, langcode and a column-value array.
  $units[] = [
    $figures,
    'en',
    [
      'color' => 'red',
      'shape' => 'triangle',
    ],
  ];
  $units[] = [
    $figures,
    'en',
    [
      'color' => 'blue',
      'shape' => 'circle',
    ],
  ];
  // To make it easier to test sorting, the greetings get formats according
  // to their langcode.
  $units[] = [
    $greetings,
    'tr',
    [
      'value' => 'merhaba',
      'format' => 'format-tr',
    ],
  ];
  $units[] = [
    $greetings,
    'pl',
    [
      'value' => 'siema',
      'format' => 'format-pl',
    ],
  ];
  // Make these languages available to the greetings field.
  ConfigurableLanguage::createFromLangcode('tr')->save();
  ConfigurableLanguage::createFromLangcode('pl')->save();
  // Calculate the cartesian product of the unit array by looking at the
  // bits of $i and add the unit at the bits that are 1. For example,
  // decimal 13 is binary 1101 so unit 3,2 and 0 will be added to the
  // entity.
  for ($i = 1; $i <= 15; $i++) {
    $entity = EntityTestMulRev::create([
      'type' => $bundles[$i & 1],
      'name' => $this->randomMachineName(),
      'langcode' => 'en',
    ]);
    // Make sure the name is set for every language that we might create.
    foreach ([
      'tr',
      'pl',
    ] as $langcode) {
      $entity->addTranslation($langcode)->name = $this->randomMachineName();
    }
    foreach (array_reverse(str_split(decbin($i))) as $key => $bit) {
      if ($bit) {
        // @todo https://www.drupal.org/project/drupal/issues/3001920 Doing
        //   [$field_name, $langcode, $values] = $units[$key]; causes
        //   problems in PHP 7.3. Revert to better variable names once
        //   https://bugs.php.net/bug.php?id=76937 is fixed.
        $entity->getTranslation($units[$key][1])->{$units[$key][0]}[] = $units[$key][2];
      }
    }
    $entity->save();
  }
  $this->bundles = $bundles;
  $this->figures = $figures;
  $this->greetings = $greetings;
  $this->storage = $this->container
    ->get('entity_type.manager')
    ->getStorage('entity_test_mulrev');
}

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