Issue #3220784 by berdir, johnchque, mathilde_dumond, dww, quietone: ContentEntityBase::createDuplicate() should reset default revision flag

(cherry picked from commit e5a67b91bb)
merge-requests/10915/head
catch 2025-01-15 12:02:00 +00:00
parent 5143962686
commit 48f7f549cd
2 changed files with 18 additions and 0 deletions

View File

@ -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')) {

View File

@ -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);
}
}