You are here

protected function EntityUUIDTest::assertCRUD in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/system/src/Tests/Entity/EntityUUIDTest.php \Drupal\system\Tests\Entity\EntityUUIDTest::assertCRUD()

Executes the UUID CRUD tests for the given entity type.

Parameters

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

1 call to EntityUUIDTest::assertCRUD()
EntityUUIDTest::testCRUD in core/modules/system/src/Tests/Entity/EntityUUIDTest.php
Tests UUID generation in entity CRUD operations.

File

core/modules/system/src/Tests/Entity/EntityUUIDTest.php, line 44
Contains \Drupal\system\Tests\Entity\EntityUUIDTest.

Class

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

Namespace

Drupal\system\Tests\Entity

Code

protected function assertCRUD($entity_type) {

  // Verify that no UUID is auto-generated when passing one for creation.
  $uuid_service = $this->container
    ->get('uuid');
  $uuid = $uuid_service
    ->generate();
  $custom_entity = entity_create($entity_type, array(
    'name' => $this
      ->randomMachineName(),
    'uuid' => $uuid,
  ));
  $this
    ->assertIdentical($custom_entity
    ->uuid(), $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 = entity_create($entity_type, array(
    'name' => $this
      ->randomMachineName(),
  ));
  $uuid = $entity
    ->uuid();
  $this
    ->assertTrue($uuid);

  // Verify that the new UUID is different.
  $this
    ->assertNotEqual($custom_entity
    ->uuid(), $uuid);

  // Verify that the UUID is retained upon saving.
  $entity
    ->save();
  $this
    ->assertIdentical($entity
    ->uuid(), $uuid);

  // Verify that the UUID is retained upon loading.
  $entity_loaded = entity_load($entity_type, $entity
    ->id(), TRUE);
  $this
    ->assertIdentical($entity_loaded
    ->uuid(), $uuid);

  // Verify that \Drupal::entityManager()->loadEntityByUuid() loads the same entity.
  $entity_loaded_by_uuid = \Drupal::entityManager()
    ->loadEntityByUuid($entity_type, $uuid, TRUE);
  $this
    ->assertIdentical($entity_loaded_by_uuid
    ->uuid(), $uuid);
  $this
    ->assertEqual($entity_loaded_by_uuid
    ->id(), $entity_loaded
    ->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
          ->assertNotEqual($entity_duplicate
          ->uuid(), $entity
          ->uuid());
        break;
      case 'id':
        $this
          ->assertNull($entity_duplicate
          ->id());
        $this
          ->assertNotNull($entity
          ->id());
        $this
          ->assertNotEqual($entity_duplicate
          ->id(), $entity
          ->id());
        break;
      case 'revision_id':
        $this
          ->assertNull($entity_duplicate
          ->getRevisionId());
        $this
          ->assertNotNull($entity
          ->getRevisionId());
        $this
          ->assertNotEqual($entity_duplicate
          ->getRevisionId(), $entity
          ->getRevisionId());
        $this
          ->assertNotEqual($entity_duplicate->{$property}
          ->getValue(), $entity->{$property}
          ->getValue());
        break;
      default:
        $this
          ->assertEqual($entity_duplicate->{$property}
          ->getValue(), $entity->{$property}
          ->getValue());
    }
  }
  $entity_duplicate
    ->save();
  $this
    ->assertNotEqual($entity
    ->id(), $entity_duplicate
    ->id());
}