Version 1
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Entity / EntityRevisionTranslationTest.php
diff --git a/web/core/tests/Drupal/KernelTests/Core/Entity/EntityRevisionTranslationTest.php b/web/core/tests/Drupal/KernelTests/Core/Entity/EntityRevisionTranslationTest.php
new file mode 100644 (file)
index 0000000..5c0ef7b
--- /dev/null
@@ -0,0 +1,160 @@
+<?php
+
+namespace Drupal\KernelTests\Core\Entity;
+
+use Drupal\entity_test\Entity\EntityTestMulRev;
+use Drupal\language\Entity\ConfigurableLanguage;
+
+/**
+ * Tests proper revision propagation of entities.
+ *
+ * @group Entity
+ */
+class EntityRevisionTranslationTest extends EntityKernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['language'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Enable an additional language.
+    ConfigurableLanguage::createFromLangcode('de')->save();
+
+    $this->installEntitySchema('entity_test_mulrev');
+  }
+
+  /**
+   * Tests if the translation object has the right revision id after new revision.
+   */
+  public function testNewRevisionAfterTranslation() {
+    $user = $this->createUser();
+
+    // Create a test entity.
+    $entity = EntityTestMulRev::create([
+      'name' => $this->randomString(),
+      'user_id' => $user->id(),
+      'language' => 'en',
+    ]);
+    $entity->save();
+    $old_rev_id = $entity->getRevisionId();
+
+    $translation = $entity->addTranslation('de');
+    $translation->setNewRevision();
+    $translation->save();
+
+    $this->assertTrue($translation->getRevisionId() > $old_rev_id, 'The saved translation in new revision has a newer revision id.');
+    $this->assertTrue($this->reloadEntity($entity)->getRevisionId() > $old_rev_id, 'The entity from the storage has a newer revision id.');
+  }
+
+  /**
+   * Tests if the translation object has the right revision id after new revision.
+   */
+  public function testRevertRevisionAfterTranslation() {
+    $user = $this->createUser();
+    $storage = $this->entityManager->getStorage('entity_test_mulrev');
+
+    // Create a test entity.
+    $entity = EntityTestMulRev::create([
+      'name' => $this->randomString(),
+      'user_id' => $user->id(),
+      'language' => 'en',
+    ]);
+    $entity->save();
+    $old_rev_id = $entity->getRevisionId();
+
+    $translation = $entity->addTranslation('de');
+    $translation->setNewRevision();
+    $translation->save();
+
+    $entity = $this->reloadEntity($entity);
+
+    $this->assertTrue($entity->hasTranslation('de'));
+
+    $entity = $storage->loadRevision($old_rev_id);
+
+    $entity->setNewRevision();
+    $entity->isDefaultRevision(TRUE);
+    $entity->save();
+
+    $entity = $this->reloadEntity($entity);
+
+    $this->assertFalse($entity->hasTranslation('de'));
+  }
+
+  /**
+   * Tests the translation values when saving a forward revision.
+   */
+  public function testTranslationValuesWhenSavingForwardRevisions() {
+    $user = $this->createUser();
+    $storage = $this->entityManager->getStorage('entity_test_mulrev');
+
+    // Create a test entity and a translation for it.
+    $entity = EntityTestMulRev::create([
+      'name' => 'default revision - en',
+      'user_id' => $user->id(),
+      'language' => 'en',
+    ]);
+    $entity->addTranslation('de', ['name' => 'default revision - de']);
+    $entity->save();
+
+    // Create a forward revision for the entity and change a field value for
+    // both languages.
+    $forward_revision = $this->reloadEntity($entity);
+
+    $forward_revision->setNewRevision();
+    $forward_revision->isDefaultRevision(FALSE);
+
+    $forward_revision->name = 'forward revision - en';
+    $forward_revision->save();
+
+    $forward_revision_translation = $forward_revision->getTranslation('de');
+    $forward_revision_translation->name = 'forward revision - de';
+    $forward_revision_translation->save();
+
+    $forward_revision_id = $forward_revision->getRevisionId();
+    $forward_revision = $storage->loadRevision($forward_revision_id);
+
+    // Change the value of the field in the default language, save the forward
+    // revision and check that the value of the field in the second language is
+    // also taken from the forward revision, *not* from the default revision.
+    $forward_revision->name = 'updated forward revision - en';
+    $forward_revision->save();
+
+    $forward_revision = $storage->loadRevision($forward_revision_id);
+
+    $this->assertEquals($forward_revision->name->value, 'updated forward revision - en');
+    $this->assertEquals($forward_revision->getTranslation('de')->name->value, 'forward revision - de');
+  }
+
+  /**
+   * Tests changing the default revision flag is propagated to all translations.
+   */
+  public function testDefaultRevision() {
+    // Create a test entity with a translation, which will internally trigger
+    // entity cloning for the new translation and create references for some of
+    // the entity properties.
+    $entity = EntityTestMulRev::create([
+      'name' => 'original',
+      'language' => 'en',
+    ]);
+    $translation = $entity->addTranslation('de');
+    $entity->save();
+
+    // Assert that the entity is in the default revision.
+    $this->assertTrue($entity->isDefaultRevision());
+    $this->assertTrue($translation->isDefaultRevision());
+
+    // Change the default revision flag on one of the entity translations and
+    // assert that the change is propagated to all entity translation objects.
+    $translation->isDefaultRevision(FALSE);
+    $this->assertFalse($entity->isDefaultRevision());
+    $this->assertFalse($translation->isDefaultRevision());
+  }
+
+}