namespace Drupal\KernelTests\Core\Entity;
+use Drupal\entity_test\Entity\EntityTestMul;
use Drupal\entity_test\Entity\EntityTestMulRev;
use Drupal\language\Entity\ConfigurableLanguage;
protected function setUp() {
parent::setUp();
- // Enable an additional language.
+ // Enable some additional languages.
ConfigurableLanguage::createFromLangcode('de')->save();
+ ConfigurableLanguage::createFromLangcode('it')->save();
+ $this->installEntitySchema('entity_test_mul');
$this->installEntitySchema('entity_test_mulrev');
}
$this->assertFalse($translation->isDefaultRevision());
}
+ /**
+ * @covers \Drupal\Core\Entity\RevisionableInterface::setNewRevision
+ */
+ public function testSetNewRevision() {
+ $user = $this->createUser();
+
+ // All revisionable entity variations have to have the same results.
+ foreach (entity_test_entity_types(ENTITY_TEST_TYPES_REVISABLE) as $entity_type) {
+ $this->installEntitySchema($entity_type);
+
+ $entity = entity_create($entity_type, [
+ 'name' => 'foo',
+ 'user_id' => $user->id(),
+ ]);
+
+ $entity->save();
+ $entity_id = $entity->id();
+ $entity_rev_id = $entity->getRevisionId();
+ $entity = entity_load($entity_type, $entity_id, TRUE);
+
+ $entity->setNewRevision(TRUE);
+ $entity->setNewRevision(FALSE);
+ $entity->save();
+ $entity = entity_load($entity_type, $entity_id, TRUE);
+
+ $this->assertEquals($entity_rev_id, $entity->getRevisionId(), 'A new entity revision was not created.');
+ }
+ }
+
+ /**
+ * Tests that revision translations are correctly detected.
+ *
+ * @covers \Drupal\Core\Entity\ContentEntityStorageBase::isAnyStoredRevisionTranslated
+ */
+ public function testIsAnyStoredRevisionTranslated() {
+ /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
+ $storage = $this->entityManager->getStorage('entity_test_mul');
+ $method = new \ReflectionMethod(get_class($storage), 'isAnyStoredRevisionTranslated');
+ $method->setAccessible(TRUE);
+
+ // Check that a non-revisionable new entity is handled correctly.
+ $entity = EntityTestMul::create();
+ $this->assertEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertFalse($method->invoke($storage, $entity));
+ $entity->addTranslation('it');
+ $this->assertNotEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertFalse($method->invoke($storage, $entity));
+
+ // Check that not yet stored translations are handled correctly.
+ $entity = EntityTestMul::create();
+ $entity->save();
+ $entity->addTranslation('it');
+ $this->assertNotEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertFalse($method->invoke($storage, $entity));
+
+ // Check that removed translations are handled correctly.
+ $entity->save();
+ $entity->removeTranslation('it');
+ $this->assertEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertTrue($method->invoke($storage, $entity));
+ $entity->save();
+ $this->assertEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertFalse($method->invoke($storage, $entity));
+ $entity->addTranslation('de');
+ $entity->removeTranslation('de');
+ $this->assertEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertFalse($method->invoke($storage, $entity));
+
+ // Check that a non-revisionable not translated entity is handled correctly.
+ $entity = EntityTestMul::create();
+ $entity->save();
+ $this->assertEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertFalse($method->invoke($storage, $entity));
+
+ // Check that a non-revisionable translated entity is handled correctly.
+ $entity->addTranslation('it');
+ $entity->save();
+ $this->assertNotEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertTrue($method->invoke($storage, $entity));
+
+ /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
+ $storage = $this->entityManager->getStorage('entity_test_mulrev');
+
+ // Check that a revisionable new entity is handled correctly.
+ $entity = EntityTestMulRev::create();
+ $this->assertEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertFalse($method->invoke($storage, $entity));
+ $entity->addTranslation('it');
+ $this->assertNotEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertFalse($method->invoke($storage, $entity));
+
+ // Check that a revisionable not translated entity is handled correctly.
+ $entity = EntityTestMulRev::create();
+ $entity->save();
+ $this->assertEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertFalse($method->invoke($storage, $entity));
+
+ // Check that a revisionable translated pending revision is handled
+ // correctly.
+ /** @var \Drupal\Core\Entity\ContentEntityInterface $new_revision */
+ $new_revision = $storage->createRevision($entity, FALSE);
+ $new_revision->addTranslation('it');
+ $new_revision->save();
+ /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
+ $entity = $storage->loadUnchanged($entity->id());
+ $this->assertEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertNotEmpty($new_revision->getTranslationLanguages(FALSE));
+ $this->assertTrue($method->invoke($storage, $entity));
+
+ // Check that a revisionable translated default revision is handled
+ // correctly.
+ $new_revision->isDefaultRevision(TRUE);
+ $new_revision->save();
+ /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
+ $entity = $storage->loadUnchanged($entity->id());
+ $this->assertNotEmpty($entity->getTranslationLanguages(FALSE));
+ $this->assertNotEmpty($new_revision->getTranslationLanguages(FALSE));
+ $this->assertTrue($method->invoke($storage, $entity));
+ }
+
}