diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php index b96c11952d8f81e1b9159a802c886a2cedd0b862..f8d383179accbd6e5b33898a588d02d3b88adb96 100644 --- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php +++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php @@ -1185,7 +1185,11 @@ public function createDuplicate() { 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 a1b32dd60c320cd2801c64c289be51b8646bf9e1..fce299acd4855100391662c47a8ce2e6295cd4a2 100644 --- a/core/tests/Drupal/KernelTests/Core/Entity/EntityDuplicateTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityDuplicateTest.php @@ -44,7 +44,13 @@ public function testDuplicateNonDefaultRevision(): void { $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 @@ public function testDuplicateNonDefaultRevision(): void { $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); } }