function EntityUUIDTest::assertCRUD

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

Executes the UUID CRUD tests for the given entity type.

@internal

Parameters

string $entity_type: The entity type to run the tests with.

1 call to EntityUUIDTest::assertCRUD()
EntityUUIDTest::testCRUD in core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php
Tests UUID generation in entity CRUD operations.

File

core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php, line 44

Class

EntityUUIDTest
Tests creation, saving, and loading of entity UUIDs.

Namespace

Drupal\KernelTests\Core\Entity

Code

protected function assertCRUD(string $entity_type) : void {
    // Verify that no UUID is auto-generated when passing one for creation.
    $uuid_service = $this->container
        ->get('uuid');
    $uuid = $uuid_service->generate();
    $custom_entity = $this->container
        ->get('entity_type.manager')
        ->getStorage($entity_type)
        ->create([
        'name' => $this->randomMachineName(),
        'uuid' => $uuid,
    ]);
    $this->assertSame($uuid, $custom_entity->uuid());
    // Save this entity, so we have more than one later.
    $custom_entity->save();
    // Verify that a new UUID is generated upon creating an entity.
    $entity = $this->container
        ->get('entity_type.manager')
        ->getStorage($entity_type)
        ->create([
        'name' => $this->randomMachineName(),
    ]);
    $uuid = $entity->uuid();
    $this->assertNotEmpty($uuid);
    // Verify that the new UUID is different.
    $this->assertNotEquals($custom_entity->uuid(), $uuid);
    // Verify that the UUID is retained upon saving.
    $entity->save();
    $this->assertSame($uuid, $entity->uuid());
    // Verify that the UUID is retained upon loading.
    
    /** @var \Drupal\Core\Entity\EntityStorageInterface $storage */
    $storage = $this->container
        ->get('entity_type.manager')
        ->getStorage($entity_type);
    $storage->resetCache([
        $entity->id(),
    ]);
    $entity_loaded = $storage->load($entity->id());
    $this->assertSame($uuid, $entity_loaded->uuid());
    // Verify that \Drupal::service('entity.repository')->loadEntityByUuid() loads the same entity.
    $entity_loaded_by_uuid = \Drupal::service('entity.repository')->loadEntityByUuid($entity_type, $uuid, TRUE);
    $this->assertSame($uuid, $entity_loaded_by_uuid->uuid());
    $this->assertEquals($entity_loaded->id(), $entity_loaded_by_uuid->id());
    // Creating a duplicate needs to result in a new UUID.
    $entity_duplicate = $entity->createDuplicate();
    foreach ($entity->getFields() as $property => $value) {
        switch ($property) {
            case 'uuid':
                $this->assertNotNull($entity_duplicate->uuid());
                $this->assertNotNull($entity->uuid());
                $this->assertNotEquals($entity->uuid(), $entity_duplicate->uuid());
                break;
            case 'id':
                $this->assertNull($entity_duplicate->id());
                $this->assertNotNull($entity->id());
                $this->assertNotEquals($entity->id(), $entity_duplicate->id());
                break;
            case 'revision_id':
                $this->assertNull($entity_duplicate->getRevisionId());
                $this->assertNotNull($entity->getRevisionId());
                $this->assertNotEquals($entity->getRevisionId(), $entity_duplicate->getRevisionId());
                $this->assertNotEquals($entity->{$property}
                    ->getValue(), $entity_duplicate->{$property}
                    ->getValue());
                break;
            default:
                $this->assertEquals($entity->{$property}
                    ->getValue(), $entity_duplicate->{$property}
                    ->getValue());
        }
    }
    $entity_duplicate->save();
    $this->assertNotEquals($entity_duplicate->id(), $entity->id());
}

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