diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php index b96c11952d8..f8d383179ac 100644 --- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php +++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php @@ -1185,7 +1185,11 @@ abstract class ContentEntityBase extends EntityBase implements \IteratorAggregat if ($entity_type->hasKey('id')) { $duplicate->{$entity_type->getKey('id')}->value = NULL; } + // Explicitly mark the entity as new and the default revision. A new entity + // is always the default revision, but that persists only until the entity + // is saved. $duplicate->enforceIsNew(); + $duplicate->isDefaultRevision(TRUE); // Check if the entity type supports UUIDs and generate a new one if so. if ($entity_type->hasKey('uuid')) { diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityDuplicateTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityDuplicateTest.php index a1b32dd60c3..fce299acd48 100644 --- a/core/tests/Drupal/KernelTests/Core/Entity/EntityDuplicateTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityDuplicateTest.php @@ -44,7 +44,13 @@ class EntityDuplicateTest extends EntityKernelTestBase { $duplicate_first_revision = $this->entityTestRevStorage->loadRevision($first_revision_id)->createDuplicate(); $this->assertTrue($duplicate_first_revision->isDefaultRevision(), 'Duplicating a non-default revision creates a default revision.'); $this->assertEquals('First Revision', $duplicate_first_revision->label()); + $this->assertTrue($duplicate_first_revision->isNew()); + $this->assertTrue($duplicate_first_revision->isNewRevision()); + $this->assertTrue($duplicate_first_revision->isDefaultRevision()); $duplicate_first_revision->save(); + $this->assertFalse($duplicate_first_revision->isNew()); + $this->assertFalse($duplicate_first_revision->isNewRevision()); + $this->assertTrue($duplicate_first_revision->isDefaultRevision()); $duplicate_first_revision->name = 'Updated name'; $duplicate_first_revision->save(); @@ -52,6 +58,14 @@ class EntityDuplicateTest extends EntityKernelTestBase { $this->entityTestRevStorage->resetCache(); $duplicate_first_revision = EntityTestRev::load($duplicate_first_revision->id()); $this->assertEquals('Updated name', $duplicate_first_revision->label()); + + // Also ensure the base table storage by doing an entity query for the + // updated name field. + $results = \Drupal::entityQuery('entity_test_rev') + ->condition('name', 'Updated name') + ->accessCheck(FALSE) + ->execute(); + $this->assertEquals([$duplicate_first_revision->getRevisionId() => $duplicate_first_revision->id()], $results); } }