Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Entity / EntityRevisionTranslationTest.php
index b43b376f5fa0767f0ecfc85e8e3e60838188e31a..addbad2e0f40f6bd4bb84cc55e07f94990482877 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace Drupal\KernelTests\Core\Entity;
 
+use Drupal\entity_test\Entity\EntityTestMul;
 use Drupal\entity_test\Entity\EntityTestMulRev;
 use Drupal\language\Entity\ConfigurableLanguage;
 
@@ -23,9 +24,11 @@ class EntityRevisionTranslationTest extends EntityKernelTestBase {
   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');
   }
 
@@ -157,4 +160,124 @@ class EntityRevisionTranslationTest extends EntityKernelTestBase {
     $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));
+  }
+
 }