installEntitySchema('entity_test_rev'); $this->installEntitySchema('entity_test_mul'); $this->installEntitySchema('entity_test_mulrev'); } /** * Tests UUID generation in entity CRUD operations. */ function testCRUD() { // All entity variations have to have the same results. foreach (entity_test_entity_types() as $entity_type) { $this->assertCRUD($entity_type); } } /** * Executes the UUID CRUD tests for the given entity type. * * @param string $entity_type * The entity type to run the tests with. */ 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 entity_load_by_uuid() loads the same entity. $entity_loaded_by_uuid = entity_load_by_uuid($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()); } }