+ /**
+ * Tests explicit entity ID assignment.
+ */
+ public function testEntityIdAssignment() {
+ $entity_type = 'entity_test';
+ /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
+ $storage = $this->container->get('entity_type.manager')->getStorage($entity_type);
+
+ // Check that an ID can be explicitly assigned on creation.
+ /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
+ $entity = $this->createTestEntity($entity_type);
+ $entity_id = 3;
+ $entity->set('id', $entity_id);
+ $this->assertSame($entity_id, $entity->id());
+ $storage->save($entity);
+ $entity = $storage->loadUnchanged($entity->id());
+ $this->assertTrue($entity);
+
+ // Check that an explicitly-assigned ID is preserved on update.
+ $storage->save($entity);
+ $entity = $storage->loadUnchanged($entity->id());
+ $this->assertTrue($entity);
+
+ // Check that an ID cannot be explicitly assigned on update.
+ $this->setExpectedException(EntityStorageException::class);
+ $entity->set('id', $entity_id + 1);
+ $storage->save($entity);
+ }
+