EntityTrait.php

Namespace

Drupal\Tests

File

core/tests/Drupal/Tests/EntityTrait.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests;

use Drupal\Core\Entity\EntityInterface;

/**
 * Provides helper methods for working with entities in tests.
 *
 * Expects the $entityTypeManager class property.
 */
trait EntityTrait {
    
    /**
     * A list of entity IDs generated by self::generateRandomEntityId().
     *
     * @var array
     */
    protected array $generatedIds = [];
    
    /**
     * Reloads the given entity from the storage and returns it.
     *
     * @param \Drupal\Core\Entity\EntityInterface $entity
     *   The entity to be reloaded.
     *
     * @return \Drupal\Core\Entity\EntityInterface
     *   The reloaded entity.
     */
    protected function reloadEntity(EntityInterface $entity) : EntityInterface {
        $controller = $this->entityTypeManager
            ->getStorage($entity->getEntityTypeId());
        $controller->resetCache([
            $entity->id(),
        ]);
        return $controller->load($entity->id());
    }
    
    /**
     * Generates a random ID avoiding collisions.
     *
     * @param bool $string
     *   (optional) Whether the id should have string type. Defaults to FALSE.
     *
     * @return int|string
     *   The entity identifier.
     */
    protected function generateRandomEntityId(bool $string = FALSE) : int|string {
        srand(time());
        do {
            // 0x7FFFFFFF is the maximum allowed value for integers that works for all
            // Drupal supported databases and is known to work for other databases
            // like SQL Server 2014 and Oracle 10 too.
            $id = $string ? $this->randomMachineName() : mt_rand(1, 0x7fffffff);
        } while (isset($this->generatedIds[$id]));
        $this->generatedIds[$id] = $id;
        return $id;
    }

}

Traits

Title Deprecated Summary
EntityTrait Provides helper methods for working with entities in tests.

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