function EntityRevisionsTest::testIsLatestAffectedRevisionTranslation

Same name and namespace in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/Entity/EntityRevisionsTest.php \Drupal\KernelTests\Core\Entity\EntityRevisionsTest::testIsLatestAffectedRevisionTranslation()
  2. 10 core/tests/Drupal/KernelTests/Core/Entity/EntityRevisionsTest.php \Drupal\KernelTests\Core\Entity\EntityRevisionsTest::testIsLatestAffectedRevisionTranslation()
  3. 11.x core/tests/Drupal/KernelTests/Core/Entity/EntityRevisionsTest.php \Drupal\KernelTests\Core\Entity\EntityRevisionsTest::testIsLatestAffectedRevisionTranslation()

Tests that latest affected revisions are working as expected.

The latest revision affecting a particular translation behaves as the latest revision for monolingual entities.

@covers ::isLatestTranslationAffectedRevision @covers \Drupal\Core\Entity\ContentEntityStorageBase::getLatestRevisionId @covers \Drupal\Core\Entity\ContentEntityStorageBase::getLatestTranslationAffectedRevisionId

File

core/tests/Drupal/KernelTests/Core/Entity/EntityRevisionsTest.php, line 209

Class

EntityRevisionsTest
Tests the loaded Revision of an entity.

Namespace

Drupal\KernelTests\Core\Entity

Code

public function testIsLatestAffectedRevisionTranslation() {
    ConfigurableLanguage::createFromLangcode('it')->save();
    // Create a basic EntityTestMulRev entity and save it.
    $entity = EntityTestMulRev::create();
    $entity->setName($this->randomString());
    $entity->save();
    $this->assertTrue($entity->isLatestTranslationAffectedRevision());
    // Load the created entity and create a new pending revision.
    $pending_revision = EntityTestMulRev::load($entity->id());
    $pending_revision->setName($this->randomString());
    $pending_revision->setNewRevision(TRUE);
    $pending_revision->isDefaultRevision(FALSE);
    // Check that no revision affecting Italian is available, given that no
    // Italian translation has been created yet.
    
    /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
    $storage = $this->entityTypeManager
        ->getStorage($entity->getEntityTypeId());
    $this->assertNull($storage->getLatestTranslationAffectedRevisionId($entity->id(), 'it'));
    $this->assertEquals($pending_revision->getLoadedRevisionId(), $storage->getLatestRevisionId($entity->id()));
    // The pending revision should still be marked as the latest affected one
    // before it is saved.
    $this->assertTrue($pending_revision->isLatestTranslationAffectedRevision());
    $pending_revision->save();
    $this->assertTrue($pending_revision->isLatestTranslationAffectedRevision());
    // Load the default revision and check that it is not marked as the latest
    // (translation-affected) revision.
    $default_revision = EntityTestMulRev::load($entity->id());
    $this->assertFalse($default_revision->isLatestRevision());
    $this->assertFalse($default_revision->isLatestTranslationAffectedRevision());
    // Add a translation in a new pending revision and verify that both the
    // English and Italian revision translations are the latest affected
    // revisions for their respective languages, while the English revision is
    // not the latest revision.
    
    /** @var \Drupal\entity_test\Entity\EntityTestMulRev $en_revision */
    $en_revision = clone $pending_revision;
    
    /** @var \Drupal\entity_test\Entity\EntityTestMulRev $it_revision */
    $it_revision = $pending_revision->addTranslation('it');
    $it_revision->setName($this->randomString());
    $it_revision->setNewRevision(TRUE);
    $it_revision->isDefaultRevision(FALSE);
    // @todo Remove this once the "original" property works with revisions. See
    //   https://www.drupal.org/project/drupal/issues/2859042.
    $it_revision->original = $storage->loadRevision($it_revision->getLoadedRevisionId());
    $it_revision->save();
    $this->assertTrue($it_revision->isLatestRevision());
    $this->assertTrue($it_revision->isLatestTranslationAffectedRevision());
    $this->assertFalse($en_revision->isLatestRevision());
    $this->assertTrue($en_revision->isLatestTranslationAffectedRevision());
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.