Loading core/lib/Drupal/Core/Entity/ContentEntityBase.php +4 −0 Original line number Diff line number Diff line Loading @@ -1184,7 +1184,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')) { Loading core/tests/Drupal/KernelTests/Core/Entity/EntityDuplicateTest.php +14 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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); } } Loading
core/lib/Drupal/Core/Entity/ContentEntityBase.php +4 −0 Original line number Diff line number Diff line Loading @@ -1184,7 +1184,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')) { Loading
core/tests/Drupal/KernelTests/Core/Entity/EntityDuplicateTest.php +14 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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); } }