Version 1
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Entity / ContentEntityNonRevisionableFieldTest.php
diff --git a/web/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityNonRevisionableFieldTest.php b/web/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityNonRevisionableFieldTest.php
new file mode 100644 (file)
index 0000000..99c99b0
--- /dev/null
@@ -0,0 +1,210 @@
+<?php
+
+namespace Drupal\KernelTests\Core\Entity;
+
+use Drupal\entity_test\Entity\EntityTestMulRev;
+use Drupal\entity_test\Entity\EntityTestRev;
+use Drupal\language\Entity\ConfigurableLanguage;
+
+/**
+ * Tests non-revisionable fields on revisionable (and translatable) entities.
+ *
+ * @group Entity
+ */
+class ContentEntityNonRevisionableFieldTest extends EntityKernelTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['language'];
+
+  /**
+   * The EntityTestMulRev entity type storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $mulRev;
+
+  /**
+   * The EntityTestRev entity type storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $rev;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Enable an additional language.
+    ConfigurableLanguage::createFromLangcode('de')->save();
+
+    $this->installEntitySchema('entity_test_mulrev');
+    $this->installEntitySchema('entity_test_rev');
+    $this->mulRev = $this->entityManager->getStorage('entity_test_mulrev');
+    $this->rev = $this->entityManager->getStorage('entity_test_rev');
+  }
+
+  /**
+   * Tests non-revisionable fields on revisionable and translatable entities.
+   */
+  public function testMulNonRevisionableField() {
+    $user1 = $this->createUser();
+    $user2 = $this->createUser();
+
+    // Create a test entity.
+    $entity = EntityTestMulRev::create([
+      'name' => $this->randomString(),
+      'user_id' => $user1->id(),
+      'language' => 'en',
+      'non_rev_field' => 'Huron',
+    ]);
+    $entity->save();
+
+    // Create a test entity.
+    $entity2 = EntityTestMulRev::create([
+      'name' => $this->randomString(),
+      'user_id' => $user1->id(),
+      'language' => 'en',
+      'non_rev_field' => 'Michigan',
+    ]);
+    $entity2->save();
+
+    $this->assertEquals('Huron', $entity->get('non_rev_field')->value, 'Huron found on entity 1');
+    $this->assertEquals('Michigan', $entity2->get('non_rev_field')->value, 'Michigan found on entity 2');
+
+    $entity->setNewRevision();
+    $entity->setOwner($user2);
+    $entity->save();
+    $entity2->setNewRevision();
+    $entity2->setOwner($user2);
+    $entity2->save();
+    $this->assertEquals($user2->id(), $entity->getOwner()->id(), 'User 2 found on entity 1');
+    $this->assertEquals($user2->id(), $entity2->getOwner()->id(), 'User 2 found on entity 2');
+
+    $entity->addTranslation('de');
+    $entity->save();
+    $entity2->addTranslation('de');
+    $entity2->save();
+
+    $expected_revision_ids = [
+      4 => 2,
+      3 => 1,
+      2 => 2,
+      1 => 1,
+    ];
+    $revision_ids = $this->mulRev->getQuery()
+      ->allRevisions()
+      ->sort('revision_id', 'DESC')
+      ->execute();
+    $this->assertEquals($expected_revision_ids, $revision_ids, 'Revision ids found');
+
+    $expected_non_rev_field_revision_ids = [
+      3 => 1,
+      1 => 1,
+    ];
+    $non_rev_field_revision_ids = $this->mulRev->getQuery()
+      ->allRevisions()
+      ->condition('non_rev_field', 'Huron')
+      ->sort('revision_id', 'DESC')
+      ->execute();
+    $this->assertEquals($expected_non_rev_field_revision_ids, $non_rev_field_revision_ids, 'Revision ids found');
+  }
+
+  /**
+   * Tests non-revisionable fields on revisionable entities.
+   */
+  public function testNonRevisionableField() {
+    $user1 = $this->createUser();
+    $user2 = $this->createUser();
+
+    // Create a test entity.
+    $entity = EntityTestRev::create([
+      'name' => $this->randomString(),
+      'user_id' => $user1->id(),
+      'non_rev_field' => 'Superior',
+    ]);
+    $entity->save();
+
+    // Create a test entity.
+    $entity2 = EntityTestRev::create([
+      'name' => $this->randomString(),
+      'user_id' => $user1->id(),
+      'non_rev_field' => 'Ontario',
+    ]);
+    $entity2->save();
+
+    $this->assertEquals('Superior', $entity->get('non_rev_field')->value, 'Superior found on entity 1');
+    $this->assertEquals('Ontario', $entity2->get('non_rev_field')->value, 'Ontario found on entity 2');
+
+    $entity->setNewRevision();
+    $entity->setOwner($user2);
+    $entity->save();
+    $entity2->setNewRevision();
+    $entity2->setOwner($user2);
+    $entity2->save();
+    $this->assertEquals($user2->id(), $entity->getOwner()->id(), 'User 2 found on entity 1');
+    $this->assertEquals($user2->id(), $entity2->getOwner()->id(), 'User 2 found on entity 2');
+
+    $expected_revision_ids = [
+      4 => 2,
+      3 => 1,
+      2 => 2,
+      1 => 1,
+    ];
+    $revision_ids = $this->rev->getQuery()
+      ->allRevisions()
+      ->sort('revision_id', 'DESC')
+      ->execute();
+    $this->assertEquals($expected_revision_ids, $revision_ids, 'Revision ids found');
+
+    $expected_non_rev_field_revision_ids = [
+      3 => 1,
+      1 => 1,
+    ];
+    $non_rev_field_revision_ids = $this->rev->getQuery()
+      ->allRevisions()
+      ->condition('non_rev_field', 'Superior')
+      ->sort('revision_id', 'DESC')
+      ->execute();
+    $this->assertEquals($expected_non_rev_field_revision_ids, $non_rev_field_revision_ids, 'Revision ids found');
+  }
+
+  /**
+   * Tests multi column non revisionable base field for revisionable entity.
+   */
+  public function testMultiColumnNonRevisionableBaseField() {
+    \Drupal::state()->set('entity_test.multi_column', TRUE);
+    \Drupal::entityDefinitionUpdateManager()->applyUpdates();
+    // Refresh the storage.
+    $this->mulRev = $this->entityManager->getStorage('entity_test_mulrev');
+    $user1 = $this->createUser();
+
+    // Create a test entity.
+    $entity = EntityTestMulRev::create([
+      'name' => $this->randomString(),
+      'user_id' => $user1->id(),
+      'language' => 'en',
+      'non_rev_field' => 'Huron',
+      'description' => [
+        'shape' => 'shape',
+        'color' => 'color',
+      ],
+    ]);
+    $entity->save();
+    $entity = $this->mulRev->loadUnchanged($entity->id());
+    $expected = [
+      [
+        'shape' => 'shape',
+        'color' => 'color',
+      ],
+    ];
+    $this->assertEquals('Huron', $entity->get('non_rev_field')->value, 'Huron found on entity 1');
+    $this->assertEquals($expected, $entity->description->getValue());
+  }
+
+}